OpenAI Film Fieldnotes

Candidate construction guide · native Resolve not tested

Review native document changes without accepting everything

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: Introducing Prism, a free workspace for scientists to write and collaborate on research, publication date 2026-01-27; source frames [960,1440), 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: The original research fixture replaces source LaTeX and product identity; bundled Geist replaces the native monospaced type. Source reframing blur, fine syntax metrics, caret cadence and row reflow are approximated, not calibrated in rendered output or native Resolve.

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

Edit project/inputs/prism-native-diff-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 prism-native-diff --content inputs/prism-native-diff-custom.json --out out/prism-native-diff-custom.mp4
cd ..

Construction steps

  1. Start in the downloaded kit root. Verify core-publication-v08.zip and active-assets.zip against the pinned SHA-256 values, then unpack core first and the selected active overlay second with overwrite enabled. Both have project/... member paths. No legacy assets archive, inspection image or private preparation file is needed.
  2. Run unchanged handoff.py verify and frames from the kit root before editing. This checks the recipe and both SVG variants and exports native-frame numerical controls, not visual quality. The complete editable recipe is installed at project/recipes/.json.
  3. In Fusion create a1920x1080 square-pixel composition at60fps with inclusive range0..479. Global local frame0 maps to the source start specified in guide.json. Do not add handles, transition frames, retiming or an ending hold.
  4. Build every group as a transparent local RGBA domain, merge children in listed order, intersect local clipping masks, then transform and apply group alpha once before Over compositing into the parent. Every child key uses the same global frame f; layer start is a gate, not a new clock.
  5. Rebuild the original SVGs from svgConstruction: all element attributes, paths, viewBoxes, gradient stops and alpha are preserved. Use native filled Polygon/Bezier/Ellipse subgroups, not a rasterized interface or source photo. Original source imagery is research only.
  6. Use the core Geist font and the stated pixel boxes, weight, lineHeight and explicit newlines. No auto-shrink or line wrapping is supported. Text+ Size/baseline and native blur need application calibration; nothing here claims a tested .comp/.drp or pixel-equivalent native result.
  7. Choose the full original content object: default is garden-note.tex with roof-garden sampling prose; adaptation is studio-note.tex with sound-studio sampling prose. Each has four explicit before/after corrections, a matching prompt, methods and proposed-change list. This is an illustrative document, not native product execution or a scientific result.
  8. Build context-field at2048x1152, x-64→-24 and y-36→-12 over0..479 smoothstep. Add separate window-shadow=(112,900,1800,150),alpha.28,CSS blur30px. Native Gaussian blur is an uncalibrated counterpart, not numerically identical.
  9. Create window-camera atx118,width1920,height1050,radius22, dark fill, overflow hidden. y=-92 through147,10 at160,0 at184 with smoothstep on the moving segments; then hold. Its right edge deliberately exceeds the canvas. A white preview strip starts localx1712,width400; only the narrow left part is visible at the canvas right.
  10. Create plain-document as a separate gate[0,147). Build each row with line-number and text nodes, original before1..before4 copy, closing commands and method lines. Initial upper lines are cropped by the window/canvas, not removed from the text source. The exact negative document origin is in the hierarchy. The thin active-line outline is a native inside-border rectangle, not an inserted diff.
  11. Keep sticky-header, file-tab and file-icon outside document-scroll. Header=(0,0,1692,102), file tab=(132,20,280,62), radius22, inside2px border; original documentArt at(150,32,30,40). Header follows window-camera but never the document scroll. The initial negative window y crops most of it; reframing brings it into view.
  12. Initial composer plate=(42,928,1626,96),radius44, gate[0,15). Prompt text=(76,956,1480,45),25px; character counts56 at0,61 at7,90 at11. At15 replace it with thinking-panel, x42,width1626,y892→704,height132→320 over15..25 smoothstep, radius26, clipped. The prompt becomes a right-aligned bubble; no second document is invented during the wait.
  13. Inside thinking-panel bubble=(790,80,806,76), text=(808,102,770,37),21px. Thinking dot=(24,181,18,18); alpha.35 at15,1 at36,.4 at66,1 at96,.4 at126,.8 at146, smoothstep. Status text is a separate muted node. Empty-composer=(62,938,1590,70) from25; caret=(88,960,2,29), alpha1 on[25,49),0 on[49,79),1 on[79,109),0 on[109,139),1 on[139,147). These are chosen approximation keys, not source-measured blink timings.
  14. At147 switch plain-document/thinking/composer off and diff-viewport on. Diff-viewport=(30,100,1640,915), overflow hidden. It contains document-scroll, not the sticky header or pointer. A separate proposed-changes panel appears at(42,670,1626,354); its y670→1008 over147..184 smoothstep leaves only its top edge in frame after settling.
  15. document-scroll y=-90 at147,26 at158,0 at184, held to255; then-120 at300 and66 at348, held to479. Use smoothstep between moving keys. Its blur0 at147→5 at154→0 at178 is linear and isotropic; source fast vertical blur is not reproduced exactly. Do not apply this blur to the fixed header, pointer or entire canvas.
  16. Create four proposals as separate groups atlocal y76,206,350,556. Row heights are34,34,70,34 respectively. Each has a muted red deletion band then a green insertion band atx86,width1518; textx92,width1494,font24,lineHeight1.35. Each insertion has its own green line number atx16. The two-line third proposal retains both explicit lines; never flatten the four proposals to a texture.
  17. For every pending proposal, place Undo atx1320,width130 and Keep atx1450,width132, both40px tall,radius20, at y2*rowHeight+8. Labels begin7px lower,20px Geist,centered. These action rows are children of their proposal and therefore scroll/reflow with it. Colors are chosen muted red#3f242d,green#253c2e,Keep#155b2e and light-green label#8bdba1, not sampled official tokens.
  18. Proposal1 gate is[147,462); proposals2..4 gate[147,480) under remaining-proposals. Closing commands and method text are also under remaining-proposals. Before462 its y is0. At462 start a smoothstep y0→-78 by474, then hold: lower proposals and lower document text reflow together when the first deletion/action region is removed.
  19. At462 replace only proposal1 with accepted-first-line and accepted-first-number at(92,76) and(16,76), neutral text without red/green bands or buttons. First correction is retained, not blanked. Do not hide remaining-proposals, change their colors to neutral or trigger an accept-all state.
  20. Keep review-pointer outside document-scroll but inside window-camera. It is a code-native24x30 arrow path M2 2 L3 23 L9 18 L14 28 L18 26 L13 16 L21 15 Z, white fill, dark1.4px viewBox stroke, round joins, fitted to30x44. Gate[256,480). Exact x/y tracks are in controls.csv and fusionNodes; it arrives at(1530,334) at438 and holds there through462 before moving slightly to(1538,370) by479.
  21. Pointer movement, document scroll, panel movement and window reframing are separate branches. Preserve the long settled diff hold184..255 and the pause on Keep438..461. No speedup is authorized. Subtle field drift and caret/status motion are not proof of real-time product latency.
  22. Check local146/147 for the document-state cut,154 for blur,184 for settled reframing,255/300/348 for scroll and return,461/462 for first-only acceptance,474/479 for lower-row reflow completion with three pending proposals. Final output must not imply the whole note was approved.

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:-64 smooth; 479:-24 hold; 0:-36 smooth; 479:-12 hold; 2048; 1152
window-shadow / rect Canvas [0,480) 112; 900; 1800; 150
window-camera / group Canvas [0,480) 118; 0:-92 hold; 147:-92 smooth; 160:10 smooth; 184:0 hold; 1920; 1050
preview-strip / rect window-camera [0,480) 1712; 0; 400; 1050
preview-rule / rect window-camera [0,480) 1730; 86; 330; 2
plain-document / group window-camera [0,147) 30; -64; 1640; 1080
plain-prelude / text plain-document [0,147) 16; 0; 1570; 78
plain-number-1 / text plain-document [0,147) 16; 96; 58; 74
plain-row-1 / text plain-document [0,147) 90; 96; 1510; 78
plain-number-2 / text plain-document [0,147) 16; 156; 58; 74
plain-row-2 / text plain-document [0,147) 90; 156; 1510; 78
plain-number-3 / text plain-document [0,147) 16; 224; 58; 74
plain-row-3 / text plain-document [0,147) 90; 224; 1510; 78
plain-number-4 / text plain-document [0,147) 16; 326; 58; 74
plain-row-4 / text plain-document [0,147) 90; 326; 1510; 78
plain-active-line / rect plain-document [0,147) 86; 324; 1518; 37
plain-closing / text plain-document [0,147) 16; 380; 1580; 186
plain-method / text plain-document [0,147) 16; 580; 1580; 190
diff-viewport / group window-camera [147,480) 30; 100; 1640; 915
document-scroll / group diff-viewport [147,480) 0; 147:-90 smooth; 158:26 smooth; 184:0 hold; 255:0 smooth; 300:-120 smooth; 348:66 hold; 1640; 1240
diff-prelude / text document-scroll [147,480) 16; 0; 1560; 70
proposal-1 / group document-scroll [147,462) 0; 76; 1620; 120
delete-band-1 / rect proposal-1 [147,462) 86; 0; 1518; 34
insert-band-1 / rect proposal-1 [147,462) 86; 34; 1518; 34
delete-text-1 / text proposal-1 [147,462) 92; 1; 1494; 36
insert-text-1 / text proposal-1 [147,462) 92; 35; 1494; 36
diff-number-1 / text proposal-1 [147,462) 16; 35; 56; 36
undo-button-1 / rect proposal-1 [147,462) 1320; 76; 130; 40
keep-button-1 / rect proposal-1 [147,462) 1450; 76; 132; 40
undo-label-1 / text proposal-1 [147,462) 1330; 83; 110; 28
keep-label-1 / text proposal-1 [147,462) 1460; 83; 112; 28
accepted-first-line / text document-scroll [462,480) 92; 76; 1494; 36
accepted-first-number / text document-scroll [462,480) 16; 76; 56; 36
remaining-proposals / group document-scroll [147,480) 0; 147:0 hold; 462:0 smooth; 474:-78 hold; 1640; 1170
proposal-2 / group remaining-proposals [147,480) 0; 206; 1620; 120
delete-band-2 / rect proposal-2 [147,480) 86; 0; 1518; 34
insert-band-2 / rect proposal-2 [147,480) 86; 34; 1518; 34
delete-text-2 / text proposal-2 [147,480) 92; 1; 1494; 36
insert-text-2 / text proposal-2 [147,480) 92; 35; 1494; 36
diff-number-2 / text proposal-2 [147,480) 16; 35; 56; 36
undo-button-2 / rect proposal-2 [147,480) 1320; 76; 130; 40
keep-button-2 / rect proposal-2 [147,480) 1450; 76; 132; 40
undo-label-2 / text proposal-2 [147,480) 1330; 83; 110; 28
keep-label-2 / text proposal-2 [147,480) 1460; 83; 112; 28
proposal-3 / group remaining-proposals [147,480) 0; 350; 1620; 192
delete-band-3 / rect proposal-3 [147,480) 86; 0; 1518; 70
insert-band-3 / rect proposal-3 [147,480) 86; 70; 1518; 70
delete-text-3 / text proposal-3 [147,480) 92; 1; 1494; 72
insert-text-3 / text proposal-3 [147,480) 92; 71; 1494; 72
diff-number-3 / text proposal-3 [147,480) 16; 71; 56; 36
undo-button-3 / rect proposal-3 [147,480) 1320; 148; 130; 40
keep-button-3 / rect proposal-3 [147,480) 1450; 148; 132; 40
undo-label-3 / text proposal-3 [147,480) 1330; 155; 110; 28
keep-label-3 / text proposal-3 [147,480) 1460; 155; 112; 28
proposal-4 / group remaining-proposals [147,480) 0; 556; 1620; 120
delete-band-4 / rect proposal-4 [147,480) 86; 0; 1518; 34
insert-band-4 / rect proposal-4 [147,480) 86; 34; 1518; 34
delete-text-4 / text proposal-4 [147,480) 92; 1; 1494; 36
insert-text-4 / text proposal-4 [147,480) 92; 35; 1494; 36
diff-number-4 / text proposal-4 [147,480) 16; 35; 56; 36
undo-button-4 / rect proposal-4 [147,480) 1320; 76; 130; 40
keep-button-4 / rect proposal-4 [147,480) 1450; 76; 132; 40
undo-label-4 / text proposal-4 [147,480) 1330; 83; 110; 28
keep-label-4 / text proposal-4 [147,480) 1460; 83; 112; 28
diff-closing / text remaining-proposals [147,480) 16; 706; 1580; 172
diff-method / text remaining-proposals [147,480) 16; 912; 1580; 172
sticky-header / rect window-camera [0,480) 0; 0; 1692; 102
header-menu / path window-camera [0,480) 34; 34; 30; 30
file-tab / rect window-camera [0,480) 132; 20; 280; 62
file-icon / image window-camera [0,480) 150; 32; 30; 40
file-name / text window-camera [0,480) 196; 37; 206; 30
header-tools / text window-camera [0,480) 1512; 35; 144; 34
initial-prompt-plate / rect window-camera [0,15) 42; 928; 1626; 96
initial-prompt / text window-camera [0,15) 76; 956; 1480; 45
thinking-panel / group window-camera [15,147) 42; 15:892 smooth; 25:704 hold; 1626; 15:132 smooth; 25:320 hold
prompt-bubble / rect thinking-panel [15,147) 790; 80; 806; 76
submitted-prompt / text thinking-panel [15,147) 808; 102; 770; 37
thinking-dot / ellipse thinking-panel [15,147) 24; 181; 18; 18
thinking-status / text thinking-panel [15,147) 52; 176; 500; 37
empty-composer / rect window-camera [25,147) 62; 938; 1590; 70
composer-caret / rect window-camera [25,147) 88; 960; 2; 29
proposed-changes-panel / group window-camera [147,480) 42; 147:670 smooth; 184:1008 hold; 1626; 354
panel-grip / rect proposed-changes-panel [147,480) 783; 10; 60; 5
proposed-title / text proposed-changes-panel [147,480) 26; 58; 810; 35
proposed-list / text proposed-changes-panel [147,480) 26; 105; 1030; 168
review-pointer / pointer window-camera [256,480) 256:1050 smooth; 300:992 smooth; 348:970 hold; 384:970 smooth; 420:1400 smooth; 438:1530 hold; 462:1530 smooth; 479:1538 hold; 256:770 smooth; 300:822 smooth; 348:648 hold; 384:648 smooth; 420:376 smooth; 438:334 hold; 462:334 smooth; 479:370 hold; 30; 44

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/prism-native-diff/document-adaptation.svg f44bee2685ea4204dfee216a0b56f571cd9a851c6cc0849d009a33a257289d0b
art/prism-native-diff/document-default.svg 9c146b0b5774b39f9fa9a3967b5a57ff6cb06c0b246eeeb91cae0e81e57df2db
art/prism-native-diff/field-adaptation.svg c1fc543a80c81b4bd9ad861df7a9bf7724173a0b9a20e34f2985f27e8fbab915
art/prism-native-diff/field-default.svg 2c6cc3f471311db94af8b88b88588eca34ac7da05d31afc760d136bb03b718c6

Checkpoints and regression gates

Local / source frame Expected implementation state
0 / 960 Before document with last prompt characters incomplete; no diff bands.
14 / 974 Last initial-composer frame; completed original prompt.
15 / 975 Thinking panel starts expanding upward; initial composer absent.
25 / 985 Expanded panel settled; empty composer and caret active.
49 / 1009 Caret switches off without removing the waiting panel.
60 / 1020 Waiting state with animated status alpha, caret off.
79 / 1039 Caret switches back on; document remains before-state.
109 / 1069 Caret off; no early diff or shortened waiting interval.
120 / 1080 Waiting state persists; no output success claim.
139 / 1099 Caret on again near end of wait.
146 / 1106 Last before/wait frame.
147 / 1107 Hard state cut to four red/green proposals and local review controls.
150 / 1110 Document scroll, blur and window reframe are in motion independently.
154 / 1114 Document-only blur reaches5px; header and pointer not blurred.
180 / 1140 Reframing nearly settled, all four proposals still pending.
184 / 1144 Windowy0, scroll0, blur0; bottom panel leaves a top edge.
240 / 1200 Diff hold; no proposal accepted.
255 / 1215 Last settled scroll frame before the upward move.
256 / 1216 Pointer branch starts; document scroll begins separately.
270 / 1230 Rows move upward under the stationary header.
300 / 1260 Scroll reaches-120; all pending proposal children move together.
330 / 1290 Scroll returning down; no acceptance.
348 / 1308 Scroll reaches66 and holds; first pair fully visible again.
360 / 1320 Pointer rests before moving toward the first Keep.
384 / 1344 Pointer begins the next approach; diff content unchanged.
420 / 1380 Pointer approaching first action row; four proposals remain.
438 / 1398 Pointer at1530,334 and held on first Keep target.
461 / 1421 Last frame with first deletion/insertion bands and first controls.
462 / 1422 Only first proposal accepted; neutral corrected line appears, remaining reflow starts.
474 / 1434 Remaining proposalsy-78; three red/green pairs and their controls persist.
479 / 1439 First corrected line retained, three proposals still pending; no accept-all ending.

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.