OpenAI Film Fieldnotes

Candidate construction guide · native Resolve not tested

Archive pages to a constructed outline

Unrendered dual-tool candidate. This worker made no new render, movie encode, deployment or native Resolve run. Completion credit, moving-source blind wins and native Resolve proofs are all 0. Independent source-first critique is pending the parent's source-only freeze and subsequent output inspection. Do not give a source-first critic this builder-informed guide before that freeze.

Source binding and inspection

Source: 10 years., https://www.youtube.com/watch?v=8JXwrVQQ4jw. Native source interval [648,780), 132 frames at 24000/1001 fps, 5.505500 seconds. Source-frame/rate arithmetic gives nominal interval [27.027000,32.532500) seconds; these values are not independently measured decoder PTS.

Retained excerpt SHA-256: 99a47ac28d5fb0f28e7f6800b94553d75b831691e16b57f6227c80b33714e208. Source master SHA-256 (inherited, not rehashed): c047b79bf59dcdfd4df793d6724f732dbd89bc43390c5a43dd676e6b25f0f0d1. Active recipe SHA-256: 9403f714bd1febaa87e9a672e05808644977b22ed2cf877f9372957953b083c1.

The actual retained excerpt was rehashed and all 132 consecutive frames were decoded and viewed as ordered 240x135 stills. This is static inspection, not moving viewing. Voice additionally has sixteen 480x270 still inspections listed in source-inspection.json. The builder read the queue's prior observations; neither this guide nor its source notes are a blind critic report. No whole-film inspection is claimed. Historical source paths are provenance, not prerequisites or editable assets. Source movies are deliberately absent from the kit.

Biggest remaining adaptation gap: Diagrammatic bench movement and monoline paper cannot reproduce filmed activity or the source paper typography. Inherited ORB/ORE macro fits still need moving comparison; native Resolve curve import is untested.

Public kit and installation

Use a fresh directory containing core-publication-v08.zip, active-assets.zip, guide.json, README.md, handoff.py, controls.csv, overlay-manifest.json, provenance.json, source-inspection.json, test_guide.py, and verify_runtime.mjs. validation-results.json records builder tests, not a runtime prerequisite. The parent supplies the pinned core alongside this kit; it is not copied into each candidate's source directory.

Python 3.11+, Node 22.18+, npm and unzip suffice for installation and mechanical checks. Rendering later also needs FFmpeg/FFprobe and an existing supported Chromium. REMOTION_BROWSER_EXECUTABLE can select that browser. No command below depends on a private script, source movie, unpublished asset archive, repository checkout, prewritten missing input file or a restored historical project.

Both ZIPs begin at project/. Extract core first, overlay second at the kit root, not inside another project/. The overlay replaces the selected recipe and installs all active SVGs and both input variants. Reversing this order would restore the legacy video/raster fields in the two inherited recipes.

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,pathlib; assert hashlib.sha256(pathlib.Path('active-assets.zip').read_bytes()).hexdigest() == '0badb5e7bda02e5a7293c8647be1b407d1460db1efea338b75de020802a4dfaf', '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
cmp controls.csv controls-regenerated.csv
PYTHONDONTWRITEBYTECODE=1 python3 test_guide.py
node verify_runtime.mjs --project project
(cd project && npm ci)

The core's other recipe definitions and old examples/ files are not this adapter's active inputs. Use only the selected recipe variants or the new project/inputs/archive-outline-montage/ files. Do not run full-library asset tests with only this selected SVG whitelist installed. The builder did not run npm ci; schema and timing checks use the hash-pinned public core TypeScript without installing or copying node_modules.

Render later, under the owner's authority

These commands are provided for the parent/recipient. They were not run by this worker. Both examples are silent and use the source cadence without holds.

cd project
npm run render -- --recipe archive-outline-montage --variant default --out out/archive-outline-montage-default.mp4
npm run render -- --recipe archive-outline-montage --variant adaptation --out out/archive-outline-montage-adaptation.mp4

For a custom edit, copy the supplied input file to an unused local filename, edit only declared content fields, then use that file:

cp inputs/archive-outline-montage/adaptation.json inputs/archive-outline-montage/custom.json
npm run render -- --recipe archive-outline-montage --content inputs/archive-outline-montage/custom.json --out out/archive-outline-montage-custom.mp4

Inspect the manifest emitted beside each later render. It must bind the active recipe, code, complete content and used SVG bytes, with the exact rational fps, 132 frames, 1920x1080 and no audio. A prior video or stale manifest cannot verify changed inputs. verify_runtime.mjs does not load Chromium or measure the actual browser font. Remotion's loaded-Geist FontGate must pass before any render can qualify for visual review. Never silently shrink replacement copy.

This adapter

The SVG adapter retains the inherited outline implementation, including its individual one-frame curve states. Only the old PNG paper/fragment slots and MP4 bench are replaced. All page bodies are real original outlined text. The tool and stroke animation continue across page replacements; their motion is an authored diagram, not a new filmed-process claim.

project/inputs/archive-outline-montage/default.json and adaptation.json are complete Content objects, not a separate design DSL. They change original copy/art while keeping event count, gate frames and native duration. guide.json includes the whole field contract, both inputs, every layer, every parent connection, local domain, path/viewBox, mask, gate, text reveal and animated control.

Resolve / Fusion construction

This is a native construction specification, not a tested .drp or .setting. Use the supplied SVG source as editable geometry, not Loader images of flattened frames. Keep node branches for independently animated objects and Text+ for runtime copy. fusionNodes provides a complete back-to-front Merge graph with exact parent IDs and recipe pointers; controls.csv supplies native integer-frame numeric controls. They are not an automatic Fusion import.

  1. Create a silent 1920x1080 Fusion composition spanning local [0,132), at exact 24000/1001. The source is [648,780); 23.976 is a UI label, not a reason to use 24. Disable frame interpolation, optical flow and retiming.

  2. Place compact-archive-fragment at (500,435), 920x213, on white for [0,16). Import the supplied fragment SVG as editable paths; its colored bands contain original outlined monoline text. Keep the source image and its lettering out of the node graph.

  3. Construct nine independent page branches, each at (290,225), 480x635. Their exact gates are [16,20), [20,24), [24,28), [28,32), [32,36), [36,40), [40,44), [44,48), [48,56). Route them through Merge nodes with stepped Blend, never a dissolve. Source f668 corresponds to local20.

  4. Create continuous-vector-workbench at (1040,350), 615x385 with a hard rectangular clip. Its three children are bench-stock, unbroken-drawing-line and drawing-tool, in that order. The bench is original SVG; the other two children remain separate animated nodes.

  5. Draw the local 410x240 Bezier in unbroken-drawing-line. Its dashArray is the sampled arc length; dashOffset goes that length to0 over [16,55]. In Fusion use a stroke reveal whose visible arc length matches this offset; a generic Write On ease is not equivalent. Follow the tool x/y/rotation rows on the shared composition clock and tip pivot (3,66.5). Tool positions are arc-length sampled along the same original path. Do not restart either track when a paper changes.

  6. At56 disable every pair branch and enable outline-macro-a. Reuse the recipe outline slot (original ORB or ORE) and all six inherited handle branches. Preserve the 1510x500 local domain, group scale and origin exactly. The two macros are different gated groups, not keyframes on one traveling camera.

  7. At86 enable outline-macro-b. Each macro-b-contour-N branch lasts [N,N+1), N=86..111, with its corresponding original outlineFrameN slot. Step between authored Bezier states; do not run an optical-flow morph or animate the SVG string as plain text. Keep all six node/compass/tangent layers separate and above the contour.

  8. At112 replace the macro with whole-outline-construction. Its whole-original-outline reuses the final outline, then node and tangent pairs have independent hard-off times. Preserve each child gate in fusionNodes; do not disappear all handles together. Dimension-guide-0 starts114 and dimension-guide-1 starts120.

  9. Build all nine metric Text+ labels and their duplicates from metric0..metric8 with Geist, declared pixel size and tracking. Metric knockout rectangles remove only their underlying line. Never substitute unreadable skeleton bars or bake the whole outline/metrics into one plate.

  10. For adaptation switch every declared input using project/inputs/archive-outline-montage/adaptation.json. ORB changes to ORE together with its 26 contour states, metrics, papers and drafting art. Arbitrary new lettering requires a complete consistent family of path states; changing only outline is unsupported.

  11. Check paired boundary frames 15/16,19/20,55/56,85/86,111/112 and node departures114..122 before judging the motion. This kit has no new render or native Resolve proof; source-quality eligibility remains unresolved.

Coordinate, text and compositing calibration

Recipe positions use a top-left, downward-positive parent pixel domain. All tracks use the same local frame number even inside groups. For box width/height w,h, origin ox,oy, and sampled properties, use this local mapping:

M = T(x+ox, y+oy) * R_CSS(rotation) * S(scale*scaleX, scale*scaleY) * T(-ox,-oy)
world = M_parent * M_child * ... * localPoint
Fusion point for domain W,H: (worldX/W, 1-worldY/H)
unrotated/unscaled center: ((x+w/2)/W, 1-(y+h/2)/H)
unrotated/unscaled pivot:  ((x+ox)/W, 1-(y+oy)/H)

The last two formulas are calibration cases, not replacements for the matrix under a transformed parent. Test a known asymmetric corner to establish Fusion's rotation sign and normalized pivot. Missing width/height inherit the containing domain; missing origin is (0,0). Never assume image center. Preserve overflow until the explicitly declared mask or the final canvas; pad group domains when needed rather than clipping children to their nominal width/height.

Keys use left-key easing: linear by default, smooth=t*t*(3-2*t), hold until the right key and then take its exact value. Clamp outside keys. Gates are Step at start and end; Resolve's displayed inclusive end is 131. Do not add end-frame 132. Sampled one-frame path states and numeric rows must not gain automatic Bezier smoothing or retiming. These are implementation controls, not source-time PTS or a recovered physical model.

SVG path viewBoxes stretch independently into the declared path layer width and height; image SVGs preserve their supplied aspect/fit. Import compound paths, gradient stops and outlined monoline glyphs, not just a screenshot of the SVG. CSS shape borders are inside the border box; path strokes are centered on their curves. Match eight-digit color alpha, premultiplication and node alpha once. Parent opacity applies after child compositing. Blur/shadow radii are not numerically portable between CSS and Fusion and require a rendered fit.

Core public/fonts/Geist.ttf and its OFL license supply runtime text. Geist is a declared substitute, not a recovered source font. Align Text+ to actual glyph bounds within each prescribed box, including tracking, weight, line height, right/center alignment and complete-word reveal. A raw Fusion Size parameter or matching character count does not establish the same baseline or fit.

Native checkpoints

Local frame Source frame Check
0 648 Compact multicolor vector editorial fragment.
15 663 Last fragment frame.
16 664 Cut to paired paper and moving vector bench.
19 667 First paper remains.
20 668 Second page replaces only the left slot.
24 672 Page 2.
28 676 Page 3.
32 680 Page 4.
36 684 Page 5.
40 688 Page 6.
44 692 Page 7.
48 696 Page 8; bench continues.
55 703 Final pair frame.
56 704 Hard cut to curved macro with construction handles already present.
85 733 Last first-macro frame.
86 734 Hard cut to rounding junction detail.
111 759 Final one-frame contour pose.
112 760 Hard cut to whole outline; nodes already present.
114 762 First dimension/metric group.
120 768 Second dimension guide.
131 779 Last whole-outline frame; no extra hold.

Verification and unresolved eligibility

test_guide.py checks hashes, SVG-only closure, exact overlay members, both inputs, the full node hierarchy, every exported native control, source bounds, specific gates and rejected invalid inputs. verify_runtime.mjs loads the pinned v08 validators and sampler to check both variants and every CSV row. These tests do not render, establish font/blur equivalence, or prove native Resolve behavior.

Fresh critics must inspect the actual future default/adaptation outputs after their source-first freeze, checking motion, holds, layers, typography, density, overlap and boundary frames. Their findings must bind output and recipe hashes. Keep this candidate outside completed counts until those checks resolve its material gaps. Final all-hands production and talking-head synchronization are not authorized by these standalone motion specimens.

Exact project overlay manifest

overlay-manifest.json is the machine-readable byte/size ledger. No runtime source, dependencies, fonts, source media or unrelated recipe is overlaid. Active ZIP SHA-256: 0badb5e7bda02e5a7293c8647be1b407d1460db1efea338b75de020802a4dfaf.