OpenAI Film Fieldnotes

Candidate construction guide · native Resolve not tested

Editorial callouts over a stable sidebar

Concrete original SVG/code kit; mechanically testable, unrendered by this builder. Parent renders and independent source-first critique are separate. Source quality remains unresolved; no completed-example or variant-as-example credit.

Source and adaptation

Exact source: Bring your work into Codex in a few clicks, publication date 2026-05-01; source frames [2640,3120), 60/1 fps, 480 frames, 1920x1080 design canvas.

Publication metadata, source-master hash and source frame mapping are inherited from the pinned queue, not a new online metadata or master verification. The retained source excerpt is research only; it is not an active dependency or part of the overlay.

Largest known gap: Original vector backdrop and chosen push/edge-wipe controls will not reproduce the source's moving light field, exact rounded stroke rasterization, pointer path or native UI metrics.

480 consecutive retained excerpt frames decoded and statically viewed in 20 indexed sheets at320x180 per cell; 10 selected frames viewed at960x540. This is not moving review or master-resolution inspection.

Source observations

Intentional differences

Run from the download

Start in a fresh extracted kit root with exactly these runtime files:

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

Use Python3.11+, Node22.18+, npm, unzip, FFmpeg/FFprobe and an existing supported Chromium. The core pins Remotion4.0.520 and the runtime lockfile. Set REMOTION_BROWSER_EXECUTABLE to your local Chromium if discovery fails. No private checkout, preparation script, authoring generator or inspection archive is required.

The core and active overlay both contain project/... members. Apply the selected overlay AFTER the core. The legacy assets-001.zip archives are not this kit; do not install them. The core font and its license remain required even though all active image/video media is SVG/code.

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'"
python3 -c "import hashlib,json,pathlib; manifest=json.loads(pathlib.Path('overlay-manifest.json').read_text()); assert hashlib.sha256(pathlib.Path('active-assets.zip').read_bytes()).hexdigest() == manifest['archiveSha256'], 'Overlay 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)

Run the exact archived CLIs from project/. These are user-run commands, not a claim that the author rendered. No --fps, --duration or --output option is supported; cadence and duration come from the recipe.

cd project
node --experimental-strip-types scripts/catalog.mjs show sidebar-editorial-callouts --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 sidebar-editorial-callouts --variant default --out out/sidebar-editorial-callouts-default.mp4
node --experimental-strip-types scripts/render.mjs --recipe sidebar-editorial-callouts --variant adaptation --out out/sidebar-editorial-callouts-adaptation.mp4
node --experimental-strip-types scripts/verify.mjs out/sidebar-editorial-callouts-default.mp4
node --experimental-strip-types scripts/verify.mjs out/sidebar-editorial-callouts-adaptation.mp4
cd ..

Keep each output manifest next to its movie. The CLI refuses to overwrite an output or sibling manifest. Verification is provenance/technical checking, not source-fidelity approval. New editorial holds would change the requested bounded example and are not part of this kit.

Edit the complete Content object

Create the file from the installed recipe, never from a stale example or a partial object. This refuses to overwrite an existing custom file:

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

Edit project/inputs/sidebar-editorial-callouts-custom.json, respecting every field and the limits in guide.json. Both variants are original illustrative content, not real product behavior. For image slots, keep the declared viewBox/aspect and SVG-only dependency rules. Then:

cd project
node --experimental-strip-types scripts/render.mjs --recipe sidebar-editorial-callouts --content inputs/sidebar-editorial-callouts-custom.json --out out/sidebar-editorial-callouts-custom.mp4
cd ..

Construction steps

  1. Start in the downloaded kit root. Unpack core-publication-v08.zip and then active-assets.zip with overwrite enabled. Both use project/... member paths; no legacy asset archive, private preparation script or inspection file is required.
  2. Verify the selected recipe and both variants of every active SVG using unchanged handoff.py, and export its native-frame controls.csv before editing. Local frame zero is the queued source start, not absolute source frame zero.
  3. Keep all UI components as native rectangles, paths and text. Build the supplied SVG materials from their exact element/gradient tree when reproducing them in Fusion. Never use a source screenshot, footage, embedded bitmap or rasterized whole-interface substitute.
  4. Make a1920x1080 square-pixel Fusion composition at60fps, range0..lastIncludedFrame. Use one global frame clock for every child; parent gates intersect child gates but do not rebase keyframe time.
  5. Build groups on transparent RGBA working domains, merge their children in listed order, intersect local rounded/inset masks, then apply the parent transform and opacity once. Mask the composite, not just the Transform effect.
  6. Set bundled Geist with explicit line breaks, listed weight, pixel size, line height and box width. No automatic shrink/wrap is supported. Calibrate Text+ size/baseline with the installed font and test both complete contents before accepting an output.
  7. Create context-field at0,0,1920,1080. Above it put light-field at2048x1152, alpha0.72; move(-64,-36) at0 to(-24,-12) at479 with smoothstep. Keep these behind the app and outside its camera. SVG gradient stops supply alpha; no black backing or Screen blend.
  8. Add window-shadow at(212,78,1496,968), radius16, alpha0.22, CSS blur32px. Above it create window-clip=(212,56,1496,968), radius12, overflow hidden. It is fixed for all480frames. Fusion Gaussian size is not numerically interchangeable with CSS blur.
  9. Inside window-clip, ui-camera uses top-left origin(0,0), x0,y0; scale1 at0,1.485 at40,1.5 at50, held through479. Each of the first two segments is smoothstep. Its subtree contains all UI labels, sidebar/main paper, icons, hover strip, composer and pointer. Keep the editorial rectangles outside this subtree.
  10. For a full1920x1080 transparent transform domain and centered Fusion Pivot(.5,.5), ui-camera Center is(scale/2,1-scale/2), Size=scale. At the final1.5 scale use Center(.75,.25), not(.5,.5). The outer translation is separately212px,56px with Size1. Changing Size with a centered default pivot would move the wrong target.
  11. Sidebar local width424; navigation labels begin(56,64+44*i), font20,line25, i0..3. Project label is(24,266), font19; project names begin(56,314/414/458),font20; detail at(56,362),font17. Main heading starts(810,326),font40; composer plate=(512,432,1100,140),radius30. All remaining exact nodes and paths are in fusionNodes; the fixed outer clip intentionally crops the right-hand page after the push.
  12. Keep hover-strip alpha0.035 on[0,98), its top y54 on[0,74),98 on[74,86),142 on[86,98). All changes are held, not eased. Pointer follows the independent chosen x/y tracks in guide.json and rests from120. This illustrative hover is not the editorial callout and does not navigate.
  13. Create navigation-callout as a transparent inside-border rectangle at(0,76,556,284) in window coordinates, radius10, stroke14px,#151515, gate[130,321). Subtract the inset rounded rectangle from the outer one to form the ring. Local clip.right is550 at130,0 at140 then held. Clip.left is0 through308,556 at321. Wipes are linear; no retiming, opacity fade or box translation.
  14. Create projects-callout separately at(0,380,636,388), radius10,14px inside border, gate[308,480). Clip.right=630 at308,0 at323 then held; other insets zero. Merge it after the upper ring. The two branches overlap during[308,321); this is a rightward draw/wipe handoff, not a morph between rectangle bounds.
  15. In Fusion, implement each wipe as a rectangular alpha intersection in the ring local domain: visible bounds(leftInset,topInset,width-leftInset-rightInset,height-topInset-bottomInset). Width0 gives no pixels. Do not stretch the outline to imitate a reveal; stroke thickness and target positions must remain fixed.
  16. Hold the lower projects callout through479. Do not add an outgoing fade, expand the source interval, select a real project or call the entire image frozen while the original vector light field still drifts.

Fusion hierarchy and controls

This is an application-unverified construction map, not a .comp or .drp import. No native Resolve output exists from this worker. The full controls, exact paths, materials and text are in guide.json; the per-frame numeric sampler is controls.csv.

Use Background_Canvas -> the ordered root Merge chain -> MediaOut1. Build every group on transparent RGBA before its parent transform. A group fill is behind all of its children. Each row identifies the exact recipe node, parent, half-open local gate and local pixel box. Do not flatten the whole interface into an image.

Layer / tool Parent Local gate x; y; width; height
context-field / image Canvas [0,480) 0; 0; 1920; 1080
light-field / image Canvas [0,480) 0:-64 smooth; 479:-24 hold; 0:-36 smooth; 479:-12 hold; 2048; 1152
window-shadow / rect Canvas [0,480) 212; 78; 1496; 968
window-clip / group Canvas [0,480) 212; 56; 1496; 968
ui-camera / group window-clip [0,480) 0; 0; 1496; 968
sidebar-paper / rect ui-camera [0,480) 0; 0; 424; 968
main-paper / rect ui-camera [0,480) 424; 0; 1496; 968
sidebar-divider / rect ui-camera [0,480) 423; 0; 1; 968
window-toggle / rect ui-camera [0,480) 130; 14; 18; 16
back-control / path ui-camera [0,480) 168; 12; 22; 22
forward-control / path ui-camera [0,480) 212; 12; 22; 22
hover-strip / rect ui-camera [0,98) 16; 0:54 hold; 74:98 hold; 86:142 hold; 97:142 hold; 392; 42
nav-icon-0 / path ui-camera [0,480) 24; 67; 24; 24
nav-label-0 / text ui-camera [0,480) 56; 64; 344; 30
nav-icon-1 / path ui-camera [0,480) 24; 111; 24; 24
nav-label-1 / text ui-camera [0,480) 56; 108; 344; 30
nav-icon-2 / path ui-camera [0,480) 24; 155; 24; 24
nav-label-2 / text ui-camera [0,480) 56; 152; 344; 30
nav-icon-3 / path ui-camera [0,480) 24; 199; 24; 24
nav-label-3 / text ui-camera [0,480) 56; 196; 344; 30
project-label / text ui-camera [0,480) 24; 266; 348; 30
project-icon-0 / path ui-camera [0,480) 24; 316; 26; 26
project-name-0 / text ui-camera [0,480) 56; 314; 344; 30
project-icon-1 / path ui-camera [0,480) 24; 416; 26; 26
project-name-1 / text ui-camera [0,480) 56; 414; 344; 30
project-icon-2 / path ui-camera [0,480) 24; 460; 26; 26
project-name-2 / text ui-camera [0,480) 56; 458; 344; 30
project-detail / text ui-camera [0,480) 56; 362; 348; 28
threads-label / text ui-camera [0,480) 24; 526; 340; 30
empty-threads / text ui-camera [0,480) 24; 572; 340; 30
page-heading / text ui-camera [0,480) 810; 326; 860; 66
composer-shadow / rect ui-camera [0,480) 512; 444; 1100; 140
composer-plate / rect ui-camera [0,480) 512; 432; 1100; 140
composer-hint / text ui-camera [0,480) 540; 454; 920; 38
composer-plus / path ui-camera [0,480) 540; 522; 28; 28
project-hint / text ui-camera [0,480) 548; 592; 760; 38
suggestion-mark-0 / rect ui-camera [0,480) 540; 674; 16; 16
suggestion-text-0 / text ui-camera [0,480) 570; 668; 800; 34
suggestion-mark-1 / rect ui-camera [0,480) 540; 730; 16; 16
suggestion-text-1 / text ui-camera [0,480) 570; 724; 800; 34
suggestion-mark-2 / rect ui-camera [0,480) 540; 786; 16; 16
suggestion-text-2 / text ui-camera [0,480) 570; 780; 800; 34
suggestion-mark-3 / rect ui-camera [0,480) 540; 842; 16; 16
suggestion-text-3 / text ui-camera [0,480) 570; 836; 800; 34
pointer / path ui-camera [0,480) 0:145 smooth; 50:190 smooth; 80:368 smooth; 100:490 smooth; 120:526 hold; 479:526 hold; 0:65 smooth; 50:76 smooth; 80:120 smooth; 100:128 smooth; 120:169 hold; 479:169 hold; 26; 34
navigation-callout / rect window-clip [130,321) 0; 76; 556; 284
projects-callout / rect window-clip [308,480) 0; 380; 636; 388

Coordinates, easing and alpha

Editable SVG materials

Every SVG is generated from scratch by generate_assets.py. That optional source file can reproduce assets byte-for-byte when supplied; it is not a runtime prerequisite. The active archive already contains the required SVGs. No tracing, bitmap conversion, source master, remote resource, SVG image node or embedded font is present.

Rebuild each SVG as a vector subgroup using svgConstruction in guide.json: all viewBoxes, element attributes, paths, gradient coordinates, stop colors and opacities are explicit. Resolve SVG imports may lose paint/gradient semantics; do not assume a successful import is equivalent. Native Background/Polygon/Ellipse material layers are the fallback, not a screenshot export.

Active SVG path under project/public SHA-256
art/sidebar-editorial-callouts/context-adaptation.svg 8e77dbaffe9e5973e6846bde253e3686a656c9b8d772384b5c5e74ee5ceca400
art/sidebar-editorial-callouts/context-default.svg f5a162d609e5a9347c17d287903759a7c3f32394c76d3bc721b884517a75e270
art/sidebar-editorial-callouts/lights-adaptation.svg cc9d9b5f3ed59076714d0c144a759354fdf025ac88ec40112f2d4b269dafdf14
art/sidebar-editorial-callouts/lights-default.svg a7eeb1450bb14bf9ff28d63e5eff80a62deb99f684d1aa02e62cf9562b56b292

Checkpoints and regression gates

Local / source frame Expected implementation state
0 / 2640 Outer clip fixed; UI scale1; hover at54; no callout.
20 / 2660 Internal push only; outer bounds unchanged.
40 / 2680 UI scale1.485.
50 / 2690 UI scale1.5 final pose.
73 / 2713 Last upper-row hover frame.
74 / 2714 Hover jumps to98.
80 / 2720 Hover at98; pointer still moving.
85 / 2725 Last second-row hover frame.
86 / 2726 Hover jumps to142.
97 / 2737 Last hover-strip frame.
98 / 2738 Hover off; app has not navigated.
120 / 2760 Pointer reaches its held pose; no callout yet.
129 / 2769 No editorial ring.
130 / 2770 Navigation ring begins with6px of revealed width.
140 / 2780 Navigation ring fully exposed; transparent interior.
240 / 2880 Navigation ring holds.
307 / 2947 Only upper ring.
308 / 2948 Lower ring starts; upper left wipe starts.
312 / 2952 Both fixed-position ring branches active with different insets.
320 / 2960 Last active upper-ring frame; lower ring nearly complete.
321 / 2961 Upper ring gate closes, lower draw continues.
323 / 2963 Lower ring complete.
360 / 3000 Lower ring held.
420 / 3060 Lower ring held; field drift continues.
479 / 3119 Last included frame; no fade. Exclusive end480.

The focused test_guide.py is an authoring regression suite, not a required download step. It checks exact recipe/source/SVG pins, archive whitelist, deterministic SVG generation, hierarchy and masks, native/quarter-frame sampler agreement, all handoff rows, half-open cuts, content rejection and actual archived CLI options without rendering.

A human still needs to review parent-rendered default and adaptation outputs at native cadence, compare the source and validate the Fusion reconstruction. A contact sheet is not moving review.

Limits

Historical inputs and source masters are provenance only. The downloadable run steps use only the listed kit files and installed tools. The source-only builder pass precedes any fresh critic findings; it does not accept its own visual quality.