OpenAI Film Fieldnotes

Candidate construction guide · native Resolve not tested

Build slides inside a floating task preview

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: A Look at ChatGPT agent, publication date 2025-07-17; source frames [2040,2340), 60/1 fps, 300 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 cover art and native editable sample data replace source photos and product content. Source blur/shimmer and progressive table population are only approximated; no output readability or native Resolve calibration has been checked.

300 consecutive retained excerpt frames decoded and statically viewed in 13 indexed sheets at320x180 per cell; 8 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 agent-slide-build --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 agent-slide-build --variant default --out out/agent-slide-build-default.mp4
node --experimental-strip-types scripts/render.mjs --recipe agent-slide-build --variant adaptation --out out/agent-slide-build-adaptation.mp4
node --experimental-strip-types scripts/verify.mjs out/agent-slide-build-default.mp4
node --experimental-strip-types scripts/verify.mjs out/agent-slide-build-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/agent-slide-build.json','utf8')); mkdirSync('inputs',{recursive:true}); writeFileSync('inputs/agent-slide-build-custom.json',JSON.stringify(recipe.defaults,null,2)+'\n',{flag:'wx'});"
cd ..

Edit project/inputs/agent-slide-build-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 agent-slide-build --content inputs/agent-slide-build-custom.json --out out/agent-slide-build-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 and light-field as separate original SVG material subgroups. Light-field is2048x1152, alpha0.72, with x-64→-24 and y-36→-12 over0..299, smoothstep. This chosen drift is not a reconstruction of the source light field.
  8. Make task-card at x510,y202,width900,height676,radius40,white fill,overflow hidden. Its y/height hold through240 then smoothstep to274/528 at264, holding to299. Key the local rectangle/mask height, not vertical Transform scale: text and controls must not squash. Put task-shadow behind at y=taskY+18, matching width/height,radius40,alpha0.08,CSS blur24px.
  9. Inside task-card, task-icon is(40,30,38,38). Task title is(96,28,762,52),Geist34,line42.5. Gate the slides title[0,253) and table title[253,300). Artifact-rim=(34,104,832,height),radius18,2px inside stroke; height538 through240→386 at264. File title is(78,121,600,32),font18; switch file labels/icons exactly at253.
  10. Create slide-preview=(48,178,804,454), overflow hidden, on[0,253). It contains cover-phase[0,4),chart-phase[4,113),columns-phase[113,253). Use hard gates with no transition handles. The transport pill is a sibling of those three phases and stays on[0,253), never on the spreadsheet.
  11. Cover: left color panel404x454, original400x454 cover SVG atx404, kicker(28,284),font13, title(28,320,348,118),font28,line35. The cover only occupies four included frames; do not add an introductory hold to make it easier to read.
  12. Chart: title(28,28,370,90),font30,line37.5. Notes(28,236,356,156),font13,line18.2. Gridlines run x436..776 at y98,196,294,392. Bars atx454/610, width144, final heights68/282 and final tops324/110. Both lower edges remain392. Alpha clip.top starts at the full respective height through13, reaches0 at56 by smoothstep, and holds through112. Animate masks, not bar scale about the center.
  13. Columns: title(36,28,370,90),font30. Create three232x294 groups at(28,122),(284,122),(540,122), each with accent fill, a title at(20,18),font16,line20, and body at(20,112),font13,line18.2. Use one top-inset alpha mask per group so body/text reveal with the panel rather than scaling the type.
  14. The column top inset is294 until each start115/122/129, then smoothly reaches0 at158/168/178 respectively, holding through252. Global frame numbers apply directly inside all nested groups. Their final lower edge is416. Rebuilding each branch with a rebased clip clock will put the stagger at the wrong time.
  15. Place transport-pill at(310,392,184,50) inside slide-preview, radius25, above all payload phases. Rebuild its separate previous/play/next paths from guide.json; it deliberately overlaps the bottom of the slide. There is no authored click or actual document-generation behavior.
  16. At253 disable the entire slide-preview including its transport. Enable table-preview=(34,176,832,310), overflow hidden, for[253,300). Its header labels are x220,420,620 at y14,font14; row labels atx20,y62+48row,font13, and data cells atx220+200column at the same row y,font13.
  17. For rows0..4, row-label gate starts253+8row and opacity moves0.45→1 over8frames. Data-cell gate starts256+8row+3*column; opacity0.35→1 linear and CSS blur6→0 smoothstep over12frames. Keys beyond299 describe an uncompleted trajectory, not extra rendered frames. Preserve the remaining blur/alpha at the last included frame; never replace it with a falsely finished table.
  18. Keep the small task-card morph separate from payload gates. There is no whole-canvas zoom, dissolve between chart and columns, or outgoing fade. Exact crop/softness and Text+ rasterization require parent-output and native Resolve comparison, not a mechanical pass alone.

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,300) 0; 0; 1920; 1080
light-field / image Canvas [0,300) 0:-64 smooth; 299:-24 hold; 0:-36 smooth; 299:-12 hold; 2048; 1152
task-shadow / rect Canvas [0,300) 510; 0:220 hold; 240:220 smooth; 264:292 hold; 299:292 hold; 900; 0:676 hold; 240:676 smooth; 264:528 hold; 299:528 hold
task-card / group Canvas [0,300) 510; 0:202 hold; 240:202 smooth; 264:274 hold; 299:274 hold; 900; 0:676 hold; 240:676 smooth; 264:528 hold; 299:528 hold
task-icon / path task-card [0,300) 40; 30; 38; 38
slides-task-title / text task-card [0,253) 96; 28; 762; 52
table-task-title / text task-card [253,300) 96; 28; 762; 52
artifact-rim / rect task-card [0,300) 34; 104; 832; 0:538 hold; 240:538 smooth; 264:386 hold; 299:386 hold
file-divider / rect task-card [0,300) 34; 166; 832; 1
slide-file-icon / rect task-card [0,253) 50; 126; 18; 20
table-file-icon / rect task-card [253,300) 50; 126; 18; 20
slide-file-title / text task-card [0,253) 78; 121; 600; 32
table-file-title / text task-card [253,300) 78; 121; 600; 32
download-icon / path task-card [0,300) 788; 122; 26; 26
expand-icon / path task-card [0,300) 827; 124; 24; 24
slide-preview / group task-card [0,253) 48; 178; 804; 454
cover-phase / group slide-preview [0,4) 0; 0; 804; 454
cover-color / rect cover-phase [0,4) 0; 0; 404; 454
cover-art / image cover-phase [0,4) 404; 0; 400; 454
cover-kicker / text cover-phase [0,4) 28; 284; 348; 26
cover-title / text cover-phase [0,4) 28; 320; 348; 118
chart-phase / group slide-preview [4,113) 0; 0; 804; 454
chart-title / text chart-phase [4,113) 28; 28; 370; 90
chart-notes / text chart-phase [4,113) 28; 236; 356; 156
chart-grid-0 / rect chart-phase [4,113) 436; 98; 340; 1
chart-grid-1 / rect chart-phase [4,113) 436; 196; 340; 1
chart-grid-2 / rect chart-phase [4,113) 436; 294; 340; 1
chart-grid-3 / rect chart-phase [4,113) 436; 392; 340; 1
chart-bar-0 / rect chart-phase [4,113) 454; 324; 144; 68
chart-bar-label-0 / text chart-phase [4,113) 450; 404; 152; 28
chart-bar-1 / rect chart-phase [4,113) 610; 110; 144; 282
chart-bar-label-1 / text chart-phase [4,113) 606; 404; 152; 28
columns-phase / group slide-preview [113,253) 0; 0; 804; 454
columns-title / text columns-phase [113,253) 36; 28; 370; 90
column-0 / group columns-phase [113,253) 28; 122; 232; 294
column-title-0 / text column-0 [113,253) 20; 18; 192; 60
column-body-0 / text column-0 [113,253) 20; 112; 192; 164
column-1 / group columns-phase [113,253) 284; 122; 232; 294
column-title-1 / text column-1 [113,253) 20; 18; 192; 60
column-body-1 / text column-1 [113,253) 20; 112; 192; 164
column-2 / group columns-phase [113,253) 540; 122; 232; 294
column-title-2 / text column-2 [113,253) 20; 18; 192; 60
column-body-2 / text column-2 [113,253) 20; 112; 192; 164
transport-pill / rect slide-preview [0,253) 310; 392; 184; 50
previous-arrow / path slide-preview [0,253) 326; 404; 22; 26
play-arrow / path slide-preview [0,253) 390; 404; 24; 26
next-arrow / path slide-preview [0,253) 454; 404; 22; 26
table-preview / group task-card [253,300) 34; 176; 832; 310
table-paper / rect table-preview [253,300) 0; 0; 832; 320
table-col-one / text table-preview [253,300) 220; 14; 178; 28
table-col-two / text table-preview [253,300) 420; 14; 178; 28
table-col-three / text table-preview [253,300) 620; 14; 178; 28
table-row-label-0 / text table-preview [253,300) 20; 62; 180; 28
table-cell-0-0 / text table-preview [256,300) 220; 62; 178; 28
table-cell-0-1 / text table-preview [259,300) 420; 62; 178; 28
table-cell-0-2 / text table-preview [262,300) 620; 62; 178; 28
table-row-label-1 / text table-preview [261,300) 20; 110; 180; 28
table-cell-1-0 / text table-preview [264,300) 220; 110; 178; 28
table-cell-1-1 / text table-preview [267,300) 420; 110; 178; 28
table-cell-1-2 / text table-preview [270,300) 620; 110; 178; 28
table-row-label-2 / text table-preview [269,300) 20; 158; 180; 28
table-cell-2-0 / text table-preview [272,300) 220; 158; 178; 28
table-cell-2-1 / text table-preview [275,300) 420; 158; 178; 28
table-cell-2-2 / text table-preview [278,300) 620; 158; 178; 28
table-row-label-3 / text table-preview [277,300) 20; 206; 180; 28
table-cell-3-0 / text table-preview [280,300) 220; 206; 178; 28
table-cell-3-1 / text table-preview [283,300) 420; 206; 178; 28
table-cell-3-2 / text table-preview [286,300) 620; 206; 178; 28
table-row-label-4 / text table-preview [285,300) 20; 254; 180; 28
table-cell-4-0 / text table-preview [288,300) 220; 254; 178; 28
table-cell-4-1 / text table-preview [291,300) 420; 254; 178; 28
table-cell-4-2 / text table-preview [294,300) 620; 254; 178; 28

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/agent-slide-build/context-adaptation.svg 48ceec2824c7fab6795613dec0deb0995b043def292b8b599f58b0f336eb7917
art/agent-slide-build/context-default.svg 9436d3586dec1c325315dc30743e2a6f7eb8dc5533a6b1c9aa3500ef8f4a3b52
art/agent-slide-build/cover-adaptation.svg 7b27cb9dc54389fd378952f00f255c595e4f099932cfa6413e917af419f99619
art/agent-slide-build/cover-default.svg f96657837d49e26552c017a5576e5b04a4a83b4c4f9277e63f11994ee42e502d
art/agent-slide-build/lights-adaptation.svg 5ab12eb4c36e16521e2c2753edba64a311cef9f94239b87e310f0bd11645e82f
art/agent-slide-build/lights-default.svg 408979f95405508227753027ae73776082f2062c6c24e4a7d941fd02f686b9fa

Checkpoints and regression gates

Local / source frame Expected implementation state
0 / 2040 Original vector cover within fixed artifact preview.
3 / 2043 Last cover frame.
4 / 2044 Chart-only payload begins; both bars fully masked.
13 / 2053 Last zero-height pose; bar growth starts after13.
22 / 2062 Both bars grow from baseline392.
40 / 2080 Bars growing, no preview movement.
56 / 2096 Bars at full68/282px heights.
90 / 2130 Chart hold.
112 / 2152 Last chart frame.
113 / 2153 Column title visible; all columns fully masked.
115 / 2155 First column growth begins after this key.
122 / 2162 Second growth starts; first underway.
129 / 2169 Third growth starts.
135 / 2175 Staggered partial column reveals; text is clipped, not squashed.
158 / 2198 First column full.
168 / 2208 Second column full.
178 / 2218 Third column full.
180 / 2220 All three columns held.
228 / 2268 Column hold continues.
240 / 2280 Task-card bounds start to morph after this key.
252 / 2292 Last slide/transport frame during morph.
253 / 2293 Only table payload; task/file titles switch; slide transport absent.
256 / 2296 First data-cell gate; alpha0.35 and blur6.
264 / 2304 Task card reaches y274,height528; table still builds.
280 / 2320 Several rows populated; later cells are still entering.
294 / 2334 Last cell enters at blur6,alpha0.35.
299 / 2339 Late cell still soft, no invented completion; exclusive end300.

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.