OpenAI Film Fieldnotes

Candidate construction guide · native Resolve not tested

Codex word-tile collage: v08 settling and miniature hierarchy

Guide-authoring evidence only: this worker performed mechanical verification, not rendering or moving review. On September 13, 2026, the parent reported all ten outputs rendered. Those outputs have not been independently reverified here. Native Resolve validation and historical source quality remain unresolved; no independent acceptance, win or completion credit.

Binding and inspection

Source: Build and share apps in Codex, https://www.youtube.com/watch?v=5UlRL_ImvQ0; full-master binding 48fdcf37ab3bfa5d990c2bd0b979ae14cf1618e52d73bba14bd1451e4cc43fee. Source interval [140,254), 114 frames at 60/1 fps, 1920x1080. Full-master bytes were not rehashed here.

Accepted stage-root manifest 35e9bc1d88d480d93914813c0a8a0301444ec6edc177029a722894aea3c997e0. Published member project/recipes/codex-word-tiles-collage.json in downloads/core-publication-v08.zip has SHA-256 06fb638accba5b4593d4a59cf14df34512c8c6b781f833efb887b2e664fd55b3. Installed active recipe recipes/codex-word-tiles-collage.json has SHA-256 06fb638accba5b4593d4a59cf14df34512c8c6b781f833efb887b2e664fd55b3.

The bound excerpt evidence/codex-word-tiles-collage/publication-v08/source.mp4 has SHA-256 424d10a56c4ef66151ab1d68935c6b445c71b961a68cc97dfb0627decf70f4ac. All 114 half-resolution excerpt frames were decoded and viewed as ordered static thumbnails, without frame skipping. 114 selected full-resolution native source members were hash-checked. Native stills actually viewed are enumerated in guide.json; extraction is not viewing. No moving review is claimed.

Largest gap: The published v08 candidate uses substitute copy, relief geometry and pixel animals. Source-like miniature detail, type metrics and translucent overlap still need fresh moving comparison; a historical no-open-findings report bound to an older recipe cannot accept this kit.

Historical report evidence/review-type-b/retest-review02/codex-word-tiles-collage/review.json is retained with its hash and recipe binding. Its verdict does not approve this guide. Source quality remains unresolved.

Historical evidence paths in this section are provenance records, not files required by the downloadable kit. Source movies, native-frame archives and private diagnostics are not active presentation assets or public run prerequisites.

Download and install

Work in a fresh directory containing the extracted downloadable kit:

guide.json
README.md
handoff.py
controls.csv
core-publication-v08.zip
active-assets.zip

Use Python 3.11+, Node 22.18+, npm and unzip. Rendering also needs FFmpeg/FFprobe and an existing supported Chromium. Set REMOTION_BROWSER_EXECUTABLE to its executable path if it is not discovered automatically; the render command does not download a browser.

Both ZIPs contain paths beginning project/. Unpack the core first, then the assets overlay into the kit root. The overlay deliberately replaces the selected recipe with the hash-pinned active recipe and installs its SVGs. Do not unpack into project/ again, reverse the order, use an existing project, or substitute the older broad asset packs. In the travel kit, reversing the order would restore JPEG defaults.

From the kit root:

set -eu
test ! -e project
python3 -c "import hashlib,pathlib; assert hashlib.sha256(pathlib.Path('core-publication-v08.zip').read_bytes()).hexdigest() == '307fb6b927e35e6d73779652873d994f5c3e36cb7deba65f22fa64748057a0de', 'Core checksum mismatch'"
unzip core-publication-v08.zip
unzip -o active-assets.zip
python3 handoff.py verify --guide guide.json --project project
python3 handoff.py frames --guide guide.json --project project > controls-regenerated.csv
(cd project && npm ci)

handoff.py checks the installed recipe and every active default/adaptation SVG against this guide. Preserve the bundled controls.csv; the new controls-regenerated.csv is a local regeneration for comparison. These rows are local implementation values, not ready-to-import Fusion centers or decoder timestamps.

The asset ZIP supplies all selected recipe media. No private worker, inspection archive, generator, prewritten input JSON, repository checkout or authoring test suite is needed. The archive contains other recipe contracts, but only this selected recipe's active SVG whitelist is included. Do not run the full-library tests as if every other recipe's assets were installed.

No recipe or SVG changes. Codex requires v08 additions; no downgrade to its stale loose recipe.

All active image assets are SVG; path/text/shape layers stay code-native. Bundled Geist is a runtime text dependency from the core, not replacement artwork. svgAssets pins every default/adaptation SVG, assetPreparation.variants maps slots, and svgConstruction records internal materials. Historical archive and generator hashes are provenance only. Use the supplied editable SVG paths instead of tracing a preview.

Construction in Remotion and Fusion

Direct Content API, no content builder. The installed recipes/codex-word-tiles-collage.json supplies complete defaults and adaptation objects. The optional custom-content command below creates an input from that installed override; do not use stale core example JSON. Supply the entire Content object, not a partial override. Change only declared fields; retain native recipe tracks and src/Treatment.tsx. TreatmentAtFrame({recipe,content,frame}) uses the local native clock. For integration across clocks, nativeFrame(outputFrame,outputFps,sourceFps) preserves seconds; mixed-cadence editorial use is not native comparison.

  1. Use the accepted core recipe 06fb638accba5b4593d4a59cf14df34512c8c6b781f833efb887b2e664fd55b3, not the stale loose project recipe 55635995f82b5c0c385d511461643ce1e19bd4a5ac1fa3e86efc952160a69a1d. The download active-assets.zip installs the selected recipe and all ten current SVGs, including the v08 additions. Its historical base/v08 asset-archive references are provenance, not extra download dependencies.
  2. Create 1920x1080 at 60/1 fps, [0,114), source [140,254). Merge roots exactly: small-background-line, topographic-card, editorial-index, small-original-dial, high-left-word-tile, lower-middle-word-tile, quiet-ring-chart, moving-paper-miniature, right-edge-word-tile.
  3. Build backing title with Geist 98px, weight600, line-height1.1, center alignment in the 650x123 box at (635,487), active [0,105). It stays stationary even when the lavender tile settles. Use a separate Text+ object, not text baked into a plate.
  4. Build high-left tile 874x611, [1,92), using its independent x/y/uniform-scale tracks around default origin (0,0). At1 x=111,y=12.69908,scale=0.99886; at91 x=119,y=13.68078,scale=0.97597. Do not turn the sampled settling into a static rectangle or a generic ease.
  5. Inside purple, build its fill, original-direction-cue and secondary-cue-pulse separately, then first-word. Primary path uses viewBox 0 0 80 135 at (80,403); secondary uses 0 0 98 28 at (183,510), visible only local1 and [33,64). Keep both original path slots editable; do not use the source terminal identity.
  6. Build lavender tile 668x704 at [31,112) with its own x/y/scale tracks. Its top starts508.5 and settles near492.5; it is not the backing-title y487. Second-word is a 520x285 box at (124,-20), Geist242px/400, line-height1.05. Its stricter advance gate is 432px, not the box width.
  7. Build blue tile 750x561 at [61,96), starting (1239,372), scale1. It extends beyond the right edge. Third-word sits at (53,-22), 625x285, Geist242px/400, line-height1.05; maximum measured advance600. Keep each word opaque white above its own translucent plate.
  8. Apply eight-digit fill alpha to the plate only, not to the whole word group. Default alpha is237/255 for purple,217/255 for lavender,230/255 for blue. Parent opacity remains1. Compositing over paper and other plates produces overlap colors; preblending against white removes the visible title/index.
  9. Build topographic-card [39,114) as a 580x350 domain. poster-stock is behind the separately clipped/panning poster art, then title, menu and six v08 surface annotations. Preserve poster-clip overflow hidden and the authored internal pan; do not bake the complete browser-style illustration into one image or omit the sixth annotation.
  10. Build the editorial-index [56,114) and the dial [65,114) below all foreground word tiles. Preserve five two-line index rows, vector badges and rotating dial detail. They are original editorial specimens, not evidence of real Poe or Codex product behavior.
  11. Build quiet-ring-chart [36,114) ABOVE the lavender tile with paper-stock, four arc/value clusters and four 10px callout Text+ labels. Its 900x560 domain begins y790 and remains bottom-clipped by the outer canvas. At113 y797. Do not fit the entire diagram onscreen.
  12. Build moving-paper-miniature [41,114) ABOVE the chart. Keep 200x150 body and wing SVGs separate. Parent has translation/rotation; wing has origin(95,90), perspective600 and its own rotationX. A flat 2D rotation is not equivalent; use projected-corner/3D-plane construction and verify in Resolve.
  13. At92 remove only purple, at96 only blue, at105 only backing title, and at112 only lavender. Miniatures continue through113. Copy defaults try/ask/act and adaptation see/use/do from the current recipe, not historical notes that still mention map. map violates the 432px gate; no auto-shrink or silent rewrite.
  14. Run actual-font fit during rendering. CLI Content preflight is not a font measurement. Compare secondary pulse boundaries1/2/32/33/63/64, late settling91..111 and every miniature at113; report source-style/Resolve gaps without upgrading historical quality.

Local domains, timing and alpha

CSS top-left pixel domains, positive y down. Origin defaults to(0,0), not the center. Size is unscaled. At a 2D layer center: center=(x,y)+origin+Rzdiag(scalescaleX,scalescaleY)((width/2,height/2)-origin). Normalize the resulting center in its parent domain, then invert Y. Compose ancestors; do not apply both a baked world transform and a parent transform.

T(x,y) * T(originX,originY) * Perspective(d) * RotateX * RotateY * RotateZ * ScaleXY * T(-originX,-originY). Apply right-to-left, then homogeneous division. Fusion y-up angle/matrix conversion is an unverified construction target.

Use the left key: linear by default; smooth=uu(3-2*u); hold keeps left value until the exact right key, which returns right value. Clamp before first/after last. Export each native frame; do not use default Bezier smoothing. For frame-zero offset T, place keys at T+localFrame, gates end at T+end-1.

Normal over only unless the SVG explicitly defines a mask. Preserve internal fill/gradient alphas; apply group opacity after local child compositing. Do not preflatten against white. For non-linear color/blur operations unpremultiply only when needed and repremultiply exactly once; verify fringes in-app.

CSS hex and SVG gradient values are implementation RGB values. No recovered film color pipeline or tested Resolve color-management setting. First compare an ungraded sRGB/reference viewer path, then document any transform rather than correcting colors by eye.

Build a Fusion composition with Background_Canvas at the declared dimensions and fps, local0 mapped to its chosen start frame, then the ordered Merge chain and MediaOut1. Each group has a transparent child base. Masks must remain in the correct local domain. A Transform center is not a CSS left/top. For a no-rotation origin-zero box, its scaled center is (x+scaleX*scale*width/2,y+scaleY*scale*height/2) before ancestor transforms. For perspective turns, project the four corners with the declared CSS matrix before mapping to a plane. The coordinate conversion is a construction target, not an application-tested setting.

This is a node-building guide, not an importable .setting or .drp. Do not silently rasterize SVGs if your Resolve installation cannot preserve their masks/filters. Reconstruct their editable local path/material branches and verify them, or report the unsupported conversion.

Full back-to-front hierarchy

Depth / layer Kind Local active interval Parent Box / fixed controls
small-background-line text [0,105) canvas 650 x 123
topographic-card group [39,114) canvas 580 x 350
↳ poster-stock rect [39,114) topographic-card 580 x 350
↳ poster-clip group [39,114) topographic-card 580 x 350
↳ ↳ poster-art image [39,114) poster-clip 580 x 348
↳ poster-label text [39,114) topographic-card 95 x 12
↳ poster-menu text [39,114) topographic-card 240 x 12
↳ poster-site-0 text [39,114) topographic-card 90 x 28
↳ poster-site-1 text [39,114) topographic-card 90 x 28
↳ poster-site-2 text [39,114) topographic-card 90 x 28
↳ poster-site-3 text [39,114) topographic-card 90 x 28
↳ poster-site-4 text [39,114) topographic-card 90 x 28
↳ poster-site-5-v06 text [39,114) topographic-card 80 x 28
editorial-index group [56,114) canvas 400 x 458
↳ index-stock rect [56,114) editorial-index 400 x 458
↳ index-active-band rect [56,114) editorial-index 368 x 66
↳ index-pictograms image [56,114) editorial-index 400 x 458
↳ index-title text [56,114) editorial-index 307 x 19
↳ index-row-0 text [56,114) editorial-index 221 x 25
↳ index-detail-0 text [56,114) editorial-index 221 x 24
↳ index-row-1 text [56,114) editorial-index 221 x 25
↳ index-detail-1 text [56,114) editorial-index 221 x 24
↳ index-row-2 text [56,114) editorial-index 221 x 25
↳ index-detail-2 text [56,114) editorial-index 221 x 24
↳ index-row-3 text [56,114) editorial-index 221 x 25
↳ index-detail-3 text [56,114) editorial-index 221 x 24
↳ index-row-4 text [56,114) editorial-index 221 x 25
↳ index-detail-4 text [56,114) editorial-index 221 x 24
small-original-dial group [65,114) canvas 116 x 116
↳ dial-circle ellipse [65,114) small-original-dial 108 x 108
↳ dial-hand path [65,114) small-original-dial 116 x 116
high-left-word-tile group [1,92) canvas 874 x 611
↳ first-tile-fill rect [1,92) high-left-word-tile 874 x 781
↳ original-direction-cue path [1,92) high-left-word-tile 80 x 135
↳ secondary-cue-pulse path [1,92) high-left-word-tile 98 x 28
↳ first-word text [1,92) high-left-word-tile 540 x 285
lower-middle-word-tile group [31,112) canvas 668 x 704
↳ second-tile-fill rect [31,112) lower-middle-word-tile 668 x 704
↳ second-word text [31,112) lower-middle-word-tile 520 x 285
quiet-ring-chart group [36,114) canvas 900 x 560
↳ diagram-paper-stock-v06 rect [36,114) quiet-ring-chart 900 x 560
↳ line-chart-art image [36,114) quiet-ring-chart 900 x 560
↳ diagram-value-one text [36,114) quiet-ring-chart 160 x 115
↳ diagram-value-two text [36,114) quiet-ring-chart 110 x 78
↳ diagram-value-three text [36,114) quiet-ring-chart 76 x 50
↳ diagram-callout-1 text [36,114) quiet-ring-chart 30 x 14
↳ diagram-callout-2 text [36,114) quiet-ring-chart 30 x 14
↳ diagram-callout-3 text [36,114) quiet-ring-chart 30 x 14
↳ diagram-callout-4 text [36,114) quiet-ring-chart 30 x 14
↳ diagram-value-four text [36,114) quiet-ring-chart 88 x 65
moving-paper-miniature group [41,114) canvas 200 x 150
↳ paper-body image [41,114) moving-paper-miniature 234 x 166
↳ paper-wing image [41,114) moving-paper-miniature 234 x 166
right-edge-word-tile group [61,96) canvas 750 x 561
↳ third-tile-fill rect [61,96) right-edge-word-tile 750 x 561
↳ third-word text [61,96) right-edge-word-tile 625 x 285

Every node, sibling connection, static control, content slot, ancestor gate and numeric track is in guide.json. tracks[].value is the exact scalar/key list; do not substitute a hand-copied summary table for dense tracks. The shared handoff.py frames CSV is per-frame local implementation data, not ready-to-import Fusion center/angle controls.

Checkpoints

Local Source Check
0 140 Only backing title; no tile.
1 141 Purple and both cues on.
2 142 Secondary cue off, primary remains.
30 170 Last frame before lavender.
31 171 Lavender enters independently.
32 172 Secondary remains off.
33 173 Secondary pulse begins.
36 176 Four-value diagram enters above lavender.
39 179 Relief card enters behind tiles.
41 181 Body/wing miniature enters above diagram.
56 196 Index enters under blue future footprint.
61 201 Blue enters with x1239,y372; three plates overlap.
63 203 Last secondary-pulse frame.
64 204 Secondary off; do not fade.
65 205 Fifth miniature, the dial, enters.
91 231 Last purple frame and late settling.
92 232 Purple off; backing title stays.
95 235 Last blue frame.
96 236 Blue off, index revealed.
104 244 Last backing-title frame, y487.
105 245 Title off; lavender continues.
111 251 Last lavender frame.
112 252 Lavender off; five miniatures survive.
113 253 Final frame; no extra global freeze.

Run the downloaded recipe

From the kit root after installation, enter project/ for the archived CLIs. The catalog and help commands were executed against the frozen core during this repair. The render/verify-output commands below are instructions for the downloaded kit, not a claim that new exports were made here.

cd project
node --experimental-strip-types scripts/catalog.mjs show codex-word-tiles-collage --contract
node --experimental-strip-types scripts/render.mjs --help
node --experimental-strip-types scripts/verify.mjs --help
node --experimental-strip-types scripts/render.mjs --recipe codex-word-tiles-collage --variant default --out out/codex-word-tiles-collage-default.mp4
node --experimental-strip-types scripts/render.mjs --recipe codex-word-tiles-collage --variant adaptation --out out/codex-word-tiles-collage-adaptation.mp4
node --experimental-strip-types scripts/verify.mjs out/codex-word-tiles-collage-default.mp4
node --experimental-strip-types scripts/verify.mjs out/codex-word-tiles-collage-adaptation.mp4
cd ..

--variant default and --variant adaptation use the installed recipe's complete Content objects. Dimensions and native cadence come from the recipe; no --fps, --duration, --output or invented Resolve-import flag is needed. Each render refuses an existing output or sibling manifest; use a new output name for a later revision. Preserve each output manifest with its movie. Output verification is a technical/provenance check, not source-fidelity approval.

Optional editable Content

No inputs/ file has to be shipped. From the kit root, create a full custom input from the installed override, not the core's historical examples:

cd project
node --input-type=module -e "import {readFileSync,mkdirSync,writeFileSync} from 'node:fs'; const recipe=JSON.parse(readFileSync('recipes/codex-word-tiles-collage.json','utf8')); mkdirSync('inputs',{recursive:true}); writeFileSync('inputs/codex-word-tiles-collage-custom.json',JSON.stringify(recipe.defaults,null,2)+'\n',{flag:'wx'});"
cd ..

Edit project/inputs/codex-word-tiles-collage-custom.json using the declared field limits. Change recipe.defaults to recipe.adaptation in the creation command to start from variant two. Creation refuses an existing file. Keep media project-contained and preserve the original pinned files; new assets/content are separate reuse inputs, not permission to rebind the baseline guide. Then, from the kit root:

cd project
node --experimental-strip-types scripts/render.mjs --recipe codex-word-tiles-collage --content inputs/codex-word-tiles-collage-custom.json --out out/codex-word-tiles-collage-custom.mp4
node --experimental-strip-types scripts/verify.mjs out/codex-word-tiles-collage-custom.mp4
cd ..

Handoff and historical evidence

The two handoff.py commands in the installation block run from the kit root, not from a repository's guide subdirectory. They need only guide.json, handoff.py and the installed project/. The Resolve construction steps and numerical controls above remain unchanged.

Private authoring tests and source-inspection records are historical evidence only. They are not included in or needed by this downloadable kit. This repair checks the portable command contract, archived CLI parsing and unchanged recipe/SVG pins. The parent assembles the final archive; its extraction, npm ci, new renders and Resolve execution have not been run in this repair. Static sheets remain static inspection, not moving review.

Remaining gates

Before accepting either render, check actual motion at native cadence, first/last frames, all listed cut/reveal gates, local masks, alpha over checker/black/white, content fit and comparison to source. Keep original and adaptation separate from attributed source research. Obtain fresh-context critique of the kit and actual Resolve evaluation; no count or quality status changes here.