OpenAI Film Fieldnotes

Candidate construction guide · native Resolve not tested

Allocate a pane before revealing the result

Source-bound original SVG/code kit: editable Remotion recipe, two built-in content variants, and a complete manual DaVinci Resolve/Fusion node handoff. This is a candidate, not source-fidelity acceptance or a tested native .setting. No animation was rendered by this worker. Parent exports, if made later, require their own output hashes, moving comparison and review; authoring checks do not describe the current state of the parent's render queue.

Run from the public download

The kit root contains README.md, guide.json, handoff.py, controls.csv, core-publication-v08.zip and active-assets.zip. Only the new recipe and active original SVGs belong in the override archive. Both variants are embedded in the recipe. No inputs/, generator, private worker, source-media ZIP or repository checkout is required. Do not restore historical benchmark folders.

Use Python 3.11+ and unzip for the handoff; rendering additionally needs Node 22.18+, npm, FFmpeg/FFprobe and an installed Chromium executable. Set REMOTION_BROWSER_EXECUTABLE if Chromium is not discoverable on PATH. Preserve core's README, package lock, public/fonts/Geist.ttf and public/fonts/OFL.txt. The renderer does not fetch source media or download a browser.

From a fresh kit root, unpack core first:

unzip core-publication-v08.zip -d .
unzip -l active-assets.zip

The supplied overlay manifest uses project/-prefixed archive members; apply it at kit root:

unzip -o active-assets.zip -d .
test -f project/recipes/split-result-pane-allocation.json
python3 handoff.py verify --guide guide.json --project project
python3 handoff.py frames --guide guide.json --project project > controls-regenerated.csv

If a distributor instead uses project-relative recipes/ and public/ members, unpack that archive with unzip -o active-assets.zip -d project instead of -d .. Never create project/project/, and never unpack both ways. Inspect paths before extraction. An archive with source video/raster media is not this kit.

handoff.py verifies recipe/SVG hashes, source identity and numeric tracks. It does not execute Fusion, shape text, compare pixels or certify source fidelity. The bundled controls.csv is a native-frame numeric table, not a Fusion import. You may stop here for the manual Resolve construction; npm is not needed for it.

For Remotion, run the actual archived CLI from project/:

cd project
npm ci
node --experimental-strip-types scripts/render.mjs --recipe split-result-pane-allocation --variant default --out out/split-result-pane-allocation-default.mp4
node --experimental-strip-types scripts/render.mjs --recipe split-result-pane-allocation --variant adaptation --out out/split-result-pane-allocation-adaptation.mp4
node --experimental-strip-types scripts/verify.mjs out/split-result-pane-allocation-default.mp4
node --experimental-strip-types scripts/verify.mjs out/split-result-pane-allocation-adaptation.mp4

Use new --out names on reruns; the renderer refuses an existing movie or adjacent manifest. Retain each .manifest.json. These instructions were checked against the archived scripts, not executed as exports by the author. For custom content, copy recipe defaults or adaptation into your own JSON, then use --content your-content.json instead of --variant. Keep every field, SVG dimensions and rights statement. No helper script is needed.

Source and clock

Film: Build and share interactive prototypes in Codex — retained publication date 2026-06-04. Metadata agrees with the pinned queue; this is not a current online channel verification.

The available excerpt and unit start together; no leading trim is needed for this clock.

All source frames were decoded and opened in static native-cadence order: 150 frames for this excerpt, at 480×270 thumbnail resolution, plus selected native 960×540 stills. Static all-frame inspection is not moving review and does not establish exact easing, subpixel onset, source fonts or a camera model. A separate fresh critic received the original clips' frame sheets and original implementations before any candidate files. Its source-first findings are incorporated in the differences below; it did not approve candidate footage.

Choreography

Local 0–17: wide request. Local 18–30: request width 800→300; preview width 0→500; 26px gutter and common right edge are preserved. This is chosen geometric allocation, not source CSS recovery.

Local 30–63: fully allocated blank preview. Local 64: result branch starts at alpha .12 and 14px below its final location; by 76 alpha is 1 and the rise is complete.

Local 64–149: an independent parent scale 1→1.035 reframes the entire window. This is a creative control: the source-first critic could not verify the inherited outer-camera claim.

Inherited Collapse / Icon / SplitResult implementations are timing and structure scaffolds, not recovered OpenAI specifications. Recipe observations separate visible source states from chosen output controls. The two variants are one candidate, not two distinct treatments.

Resolve/Fusion construction

  1. Make a Fusion Composition at 1280×720, square pixels, 30/1 fps, local range 0–149 inclusive. If the application starts the comp at a nonzero frame, subtract that start for CSV lookups. Disable motion blur and automatic retiming; use no optical flow.
  2. Build RootPaper, then every fusionNodes entry in guide.json recursively. Each sibling array is back-to-front and gives exact background/foreground connections, named transform chain, parent, active interval and full static controls. A group assembles its children before its own transform and alpha.
  3. For each image node, select its default/adaptation asset and instantiate the corresponding svgSubgraphs definition: every original rectangle, circle, polygon, fill, alpha and Merge connection is enumerated. Build editable vector masks and Backgrounds; do not load a rendered source screenshot. Multiple uses of an SVG retain independent layer transforms and namespaced nodes.
  4. Live text uses core's Geist. Install the provided font locally for Text+, retain its OFL notice, and match the listed pixel box, line height, tracking, weight and baseline. Do not substitute source-brand fonts or assume Text+ Size equals CSS pixels. Inspect both variants for actual shaping and fit.
  5. Apply each node's local mask, AnchorShift, ScaleRotate, Position, then alpha gate. Geometry dimensions precede transforms; they are not a second scale. End-frame gates are stepped and exclusive. All descendants sample the same localFrame; never subtract their own start. Keep hero phase instances mutually exclusive and text reveal counts stepped.
  6. Populate numeric controls from the recipe's exact key arrays or CSV per-frame samples. tracks maps every present numeric property to a recipe pointer; staticControls includes non-track geometry, fonts, fills, viewBox and gates. No extra easing: linear is linear, smooth is t*t*(3-2*t), hold stays at the left value until the exact right key. Values clamp outside their key range.
  7. Crop only the final padded composite to the output canvas; send to MediaOut. Compare every checkpoint and both content variants before accepting a Fusion export. This manual handoff has not been executed in native Resolve.

Coordinate convention and overscan

Recipe coordinates are pixels, top-left origin, +X right, +Y down. Width/height are local untransformed geometry; group dimensions do not clip overflow-visible children. Recipe origin defaults to [0,0], not the element center.

Use the padded working domain in fusionSetup.workingDomain: 4096×4096, with design (0,0) at padded pixel [1024, 1024]. This preserves negative/off-canvas card positions until parent collapse brings them into view. Every internal branch uses this same domain; the final crop selects the canvas rectangle beginning at that padded origin. Never clip each branch to 1920×1080 before assembly. Local rounded masks still clip at their declared boundaries.

For domain (Dw,Dh), padding (Px,Py), normalize a design point as ((x+Px)/Dw, 1-(y+Py)/Dh). Rectangle widths/heights normalize by Dw/Dh. For a layer with translation t=(x,y) and origin o, the exact design-space map is p_parent = t + o + R_clockwise(rotation) * scale * (p_local-o). Compose this through all ancestors; CSV is local, not flattened world space.

To avoid ambiguous Pivot edits, keep each Transform Pivot at (0.5,0.5) and use three explicit nodes. Let c=(Dw/2-Px,Dh/2-Py) be the domain center in design pixels. AnchorShift translates by c-o, ScaleRotate applies Size=scale and Angle=-rotation around the domain center, Position translates by t+o-c. A translation (dx,dy) means Center=(.5+dx/Dw,.5-dy/Dh). With identity scale/rotation the first and last translations cancel to (x,y). Check this identity and an off-center rotated point before wiring animated branches. Use the native Fusion Transform node, not the Edit-page Transform effect.

For image layout, map each SVG viewBox into the local layer box using contain: s=min(width/viewBoxWidth,height/viewBoxHeight) and centered letterbox offsets; then apply the layer chain. CSS shape borders sit inside the box. SVG primitives here have no strokes or text. Apply group alpha after merging, or overlaps will darken incorrectly. Antialiasing, rounded corners and type baselines remain native-application comparison items rather than asserted pixel parity.

Key controls

The complete table is controls.csv (99 numeric controls; 8 animated). The following highlights do not replace the full hierarchy:

Layer.property Keys Numeric min → max Exact recipe pointer
outer-camera.scale 3 1 → 1.035 /layers/1/scale
request-pane.width 3 300 → 800 /layers/1/children/5/width
request-paper.width 3 300 → 800 /layers/1/children/5/children/0/width
preview-pane.x 2 638 → 1138 /layers/1/children/6/x
preview-pane.width 2 0 → 500 /layers/1/children/6/width
preview-paper.width 2 0 → 500 /layers/1/children/6/children/0/width
result-content.y 2 20 → 34 /layers/1/children/6/children/1/y
result-content.opacity 2 0.12 → 1 /layers/1/children/6/children/1/opacity

Checkpoints

Local Source Available excerpt Nominal source seconds Expected original-kit state
0 1530 0 51.000000 Wide continuous request, no preview.
18 1548 18 51.600000 Allocation starts; zero-width preview stays invisible.
24 1554 24 51.800000 Request and preview widths remain linked without overlap.
30 1560 30 52.000000 Blank preview fully allocated.
63 1593 63 53.100000 Still no result content.
64 1594 64 53.133333 First softly visible result, not application latency.
76 1606 76 53.533333 Result fully opaque and at rest; footer appears.
119 1649 119 54.966667 Result held while independent parent framing evolves.
149 1679 149 55.966667 Final bounded frame at scale 1.035.

Editable substitutions and differences

Packaging and optional historical audit

The active override contains 9 files, 41282 bytes: one recipe plus 8 original SVGs. No inputs, generators, font copies, source movies, raster art or dependencies belong in that archive. Core SHA-256: 307fb6b927e35e6d73779652873d994f5c3e36cb7deba65f22fa64748057a0de. Recipe SHA-256: 8206882976dfd0a131a5143255be746b8b80c0687a882041eeb3d5c859d7cc13. overlay-manifest.json pins each local source file, project-relative destination and recommended project/ archive member. The parent creates the ZIP; this worker did not invent a ZIP hash or encode exports.

If present, provenance.json records the exact queue record, archived source code members and accepted core hashes. They are historical audit inputs, not downloads needed by an end user. Source references remain research-only. Repository-only optional regression command:

PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s benchmarks/motion-atom-loop/expansion-200/dual-toolkit-200/guides/constructive/split-result-pane-allocation -p 'test_*.py' -v

Run that only from the source checkout with retained audit inputs available. Public users should use the standalone kit-root handoff.py commands instead.