OpenAI Film Fieldnotes

Candidate construction guide · native Resolve not tested

Historical builder snapshot: 2026-09-14. Earlier README and handoff statements about being unrendered or unpublished describe that authoring stage. The current selected report verifies both content exports at 2026-09-14T02:20:33.205891+00:00; those earlier statements do not describe their current availability. Native Resolve execution and source-quality approval remain unverified.

Current selected render verification · Batch export report

Context, title hold, then recentering icon phrases

Concrete source-bound vector adaptation. Authoring-time mechanical checks only; no source-quality approval. Parent renders and independent review are separate.

Download and run

Run from the extracted kit root. Required files: guide.json, README.md, handoff.py, controls.csv, overlay-manifest.json, core-publication-v08.zip, active-assets.zip. Optional self-contained test: test_kit.py. No private worker, prepared project, generator, inspection image, sidecar or external helper documentation is required.

Install the accepted core first, then the selected active override. Never substitute legacy assets-001.zip; that historical archive can contain raster media. Start with no project/ directory:

test ! -e project
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

npm ci and movie rendering are reader/parent steps. This builder ran neither. The font and license arrive in the core. From project/:

node --experimental-strip-types scripts/catalog.mjs show workspace-icon-phrases --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 workspace-icon-phrases --variant default --out out/workspace-icon-phrases-default.mp4
node --experimental-strip-types scripts/render.mjs --recipe workspace-icon-phrases --variant adaptation --out out/workspace-icon-phrases-adaptation.mp4
node --experimental-strip-types scripts/verify.mjs out/workspace-icon-phrases-default.mp4
node --experimental-strip-types scripts/verify.mjs out/workspace-icon-phrases-adaptation.mp4

For custom content, first create the complete editable file from this selected recipe, then edit only its values (including accurate SVG dimensions and rights):

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

Edit project/inputs/workspace-icon-phrases-custom.json from the kit root. Keep field caps and fixed geometry; run the actual font gate when rendering. From project/:

node --experimental-strip-types scripts/render.mjs --recipe workspace-icon-phrases --content inputs/workspace-icon-phrases-custom.json --out out/workspace-icon-phrases-custom.mp4
node --experimental-strip-types scripts/verify.mjs out/workspace-icon-phrases-custom.mp4

Do not combine --variant with --content. This archive uses --out, not --output; no --fps or --duration override belongs to this treatment. From the kit root, the optional tests need only the extracted project and downloaded handoff:

python3 test_kit.py --project project

Tests are source/preflight checks, not render or native Resolve approval. controls-regenerated.csv is a generated output, not a missing file.

Exact binding

Source and native clock

Official research reference: Introducing workspace agents in ChatGPT; source URL https://www.youtube.com/watch?v=yyvVUEPSCu0. Published 2026-04-22. Metadata authority, response hash, retrieval date and inherited master hash are pinned separately in guide.json. Exact half-open source bounds: [3060,3420); 360 selected frames at 60/1. All retained excerpt frames are selected; no trim required. Local f maps to source index start+f. Nominal seconds=(start+f)*denominator/numerator.

Not supplied. Nominal frame/rational-FPS seconds are arithmetic labels, not recovered absolute master PTS. Do not silently replace the separately retained rounded samples with nominal times. Fresh decoded excerpt time base: 1/15360. Every integer PTS and duration, independently retained rounded source-relative time, exact source selection and provenance are in guide.json. Excerpt timing does not prove absolute master PTS.

Every selected native index viewed in a static480x270 cell. Four explicitly listed960x540 stills per piece viewed in detail. Not moving review, a master-resolution pass or an output inspection. No external source window or critic findings supplied these controls. The original source media are research only, never active assets.

Source observations versus choices

Adaptation differences

Editable Remotion construction

Install the selected recipe under project/recipes/. The accepted Treatment framegraph reads groups, text, vector-image slots and native shapes from it. Layer order is back-to-front. Start/end gates use the global local frame, not frame minus layer.start. Edit fields and both embedded content objects; do not alter source bounds or reuse the historical builder timing.

All numeric tracks below are chosen implementation values. Held string prefixes live in the node controls; they do not resize their text boxes. The original SVGs have separate vector elements and local gradients; no image element or linked media is allowed.

Resolve / Fusion manual build

Create1920x1080 at 60/1 fps, V1 Fusion composition[0,360), timeline timecode01:00:00:00. No audio. There is no supplied or validated native .setting macro.

Recipe coordinates are top-left pixels, local to parent. For a local domain W,H and pivot ox,oy, place the transform pivot at(ox/W,1-oy/H). Translate by(x/W,-y/H) in that parent domain after local scaling/rotation; use the explicit affine mapping below rather than assuming canvas dimensions for every nested group.

p_parent = (x,y) + origin + R_clockwise(rotation) * diag(scalescaleX,scalescaleY) * (p_local-origin). Merge children before applying this once per group. Convert final top-left pixels to Fusion normalized(x/W,1-y/H). Fusion angle convention must be calibrated against positive clockwise recipe rotation.

Left-key smooth=uu(3-2*u), linear=u, hold until next key. Never Auto. All tracks sampled on global recipe-local time.

Normal Over with transparent outside shape; group opacity after child composition; local clip and SVG clipPath before local transform. No image/video Loader or black/Screen workaround.

  1. Create one1920x1080 Fusion Composition on Edit V1, no audio tracks. Set the exact guide rational timeline cadence before insertion. The timeline GUI may label24000/1001 as23.976; keep the rational value in the delivery contract. Set length to the listed nativeFrameCount, local0 through count-1. Do not import the research excerpt.
  2. Use one explicit Background_Paper and ordered Over Merge chain. Treat JSON layer IDs as node names and fusionNodes parentLayerId as nesting ownership. A group contains a transparent RGBA local domain, ordered child Merges, then its own Transform and one opacity multiplier. Never apply parent travel separately to already transformed children.
  3. Reconstruct each active SVG from svgConstruction in guide.json. Use Background plus Rectangle/Ellipse/Polygon/Bezier masks; preserve viewBox, exact path controls, fill/stroke and gradient stops. Keep separate editable shape nodes in XML order; the orb uses two fills intersected with its circle alpha. No Loader of a bitmap or video. SVG import is optional, not required to obtain editable native nodes.
  4. Use bundled Geist for Text+. Enter defaults or adaptation values from contentContract. Text values remain editable, with fixed recipe width/height and no auto-wrap/shrink. Match pixel font size, weight, line height and alignment through a native baseline/width check; no numeric claim that Text+ Size equals CSS px. The supplied source-only browser gate does not certify Fusion typography.
  5. Set each layer gate start inclusive and end exclusive. When using clip trims, local Fusion time must still evaluate the global recipe-local clock: add the clip In before sampling. Use held StyledText prefixes for reveal.steps, with no interpolation of glyph counts. A disappearing group cuts all children together.
  6. For numeric tracks use controls.csv per-native-frame values, or exact left-key interpolation: linear u; smooth uu(3-2*u); hold returns left value strictly until next key. No Auto spline, overshoot, cross-dissolve or optical-flow interpolation. Evaluate keys beyond duration only to derive the truncated last in-window sample.
  7. Keep alpha transparent outside vector shapes. SVG fill/stroke opacity and gradient stop-opacity multiply their own coverage; Merge with Normal/Over, not Screen or black-keying. Clip the final canvas only; explicit inset masks, if present, apply in local pixels before that group transform. Do not shrink live text widths as a reveal mechanism.
  8. Build conversation-context from context-rail, five Text+ leaves and two vector icons. Its x travels0 to-12 across0..54. Gate the entire group[0,55); title is a sibling, not its child. This invented exchange is not a real product behavior claim.
  9. Build title-parent at x140, width1640. Its y holds430 through71 then smoothsteps to396 at95. title-line-one uses140px type and three whole-word gates55/61/71; title-line-two at local y168 uses character counts5/6/7/9/11/17 at95/98/101/108/111/115. Both hold through205 and cut206.
  10. Build phrase-stack at x560, size1260x576. Add row-1/2/3 at y0/216/432, gates206/273/345. Each merges a128px icon and78px label at x210,y8 in a1040x100 text box. Row opacity .2 to1 over fiveframes is an adaptation choice.
  11. Move only phrase-stack y:470 through264; smooth to362 at278; hold through336; smooth toward254 at366. Last output index359 is before completion. Earlier rows stay in place relative to the shared parent while each new row joins. Do not replace this with independent fixed row pop-ins.
  12. Check every listed source-bound checkpoint and adjacent frames against the scalar contract. Inspect an actual parent render and native Resolve output separately before any fidelity/equivalence claim. Default, adaptation and custom passing here are content/framegraph/font preflights only.

Complete node hierarchy and track ownership

Each row is one authored layer, with its native subgroup tools. Follow the sibling Merge order and parent IDs; guide.json contains full literal controls, local box, effective gates, mask order, text values and SVG construction trees. Child groups are transparent until their active children contribute alpha. A dormant child never makes a parent visible.

Layer Parent Kind Local gate Native tools
paper ROOT rect [0, 360] Background with Rectangle/Ellipse mask, Inside-border ring if stroke is present, Blur if present, Local Transform, Over Merge
conversation-context ROOT group [0, 55] Transparent RGBA working domain, Ordered child Merges, Rounded Rectangle/Polygon alpha intersection if required, Transform, Group opacity, Over Merge
context-rail conversation-context rect [0, 55] Background with Rectangle/Ellipse mask, Inside-border ring if stroke is present, Blur if present, Local Transform, Over Merge
context-copy-0 conversation-context text [0, 55] Text+ in bundled Geist, Set explicit newline layout, Stepped StyledText or Write On gate when present, Local Transform, Over Merge
context-copy-1 conversation-context text [0, 55] Text+ in bundled Geist, Set explicit newline layout, Stepped StyledText or Write On gate when present, Local Transform, Over Merge
context-copy-2 conversation-context text [0, 55] Text+ in bundled Geist, Set explicit newline layout, Stepped StyledText or Write On gate when present, Local Transform, Over Merge
context-copy-3 conversation-context text [0, 55] Text+ in bundled Geist, Set explicit newline layout, Stepped StyledText or Write On gate when present, Local Transform, Over Merge
context-copy-4 conversation-context text [0, 55] Text+ in bundled Geist, Set explicit newline layout, Stepped StyledText or Write On gate when present, Local Transform, Over Merge
context-icon-a conversation-context image [0, 55] Native vector subgroup reconstructed from svgConstruction, Fit Transform, Local Transform, Over Merge
context-icon-b conversation-context image [0, 55] Native vector subgroup reconstructed from svgConstruction, Fit Transform, Local Transform, Over Merge
title-parent ROOT group [55, 206] Transparent RGBA working domain, Ordered child Merges, Rounded Rectangle/Polygon alpha intersection if required, Transform, Group opacity, Over Merge
title-line-one title-parent text [55, 206] Text+ in bundled Geist, Set explicit newline layout, Stepped StyledText or Write On gate when present, Local Transform, Over Merge
title-line-two title-parent text [95, 206] Text+ in bundled Geist, Set explicit newline layout, Stepped StyledText or Write On gate when present, Local Transform, Over Merge
phrase-stack ROOT group [206, 360] Transparent RGBA working domain, Ordered child Merges, Rounded Rectangle/Polygon alpha intersection if required, Transform, Group opacity, Over Merge
row-1 phrase-stack group [206, 360] Transparent RGBA working domain, Ordered child Merges, Rounded Rectangle/Polygon alpha intersection if required, Transform, Group opacity, Over Merge
row-icon-1 row-1 image [206, 360] Native vector subgroup reconstructed from svgConstruction, Fit Transform, Local Transform, Over Merge
row-copy-1 row-1 text [206, 360] Text+ in bundled Geist, Set explicit newline layout, Stepped StyledText or Write On gate when present, Local Transform, Over Merge
row-2 phrase-stack group [273, 360] Transparent RGBA working domain, Ordered child Merges, Rounded Rectangle/Polygon alpha intersection if required, Transform, Group opacity, Over Merge
row-icon-2 row-2 image [273, 360] Native vector subgroup reconstructed from svgConstruction, Fit Transform, Local Transform, Over Merge
row-copy-2 row-2 text [273, 360] Text+ in bundled Geist, Set explicit newline layout, Stepped StyledText or Write On gate when present, Local Transform, Over Merge
row-3 phrase-stack group [345, 360] Transparent RGBA working domain, Ordered child Merges, Rounded Rectangle/Polygon alpha intersection if required, Transform, Group opacity, Over Merge
row-icon-3 row-3 image [345, 360] Native vector subgroup reconstructed from svgConstruction, Fit Transform, Local Transform, Over Merge
row-copy-3 row-3 text [345, 360] Text+ in bundled Geist, Set explicit newline layout, Stepped StyledText or Write On gate when present, Local Transform, Over Merge

Exact numerical controls

Coordinates are local pixels. Keys are frame:value easing; constant values remain held. Whole-group origin and nonnumeric controls are in the adjacent node contract in guide.json. controls.csv enumerates every native value, including inactive rows (see active column).

Layer Property Value / keys
paper x 0
paper y 0
paper width 1920
paper height 1080
conversation-context x 0:0 linear; 54:-12 hold
conversation-context y 0
conversation-context width 1920
conversation-context height 1080
context-rail x 0
context-rail y 0
context-rail width 355
context-rail height 1080
context-copy-0 x 645
context-copy-0 y 58
context-copy-0 width 1235
context-copy-0 height 84
context-copy-1 x 645
context-copy-1 y 151
context-copy-1 width 1235
context-copy-1 height 84
context-copy-2 x 645
context-copy-2 y 410
context-copy-2 width 1235
context-copy-2 height 84
context-copy-3 x 645
context-copy-3 y 530
context-copy-3 width 1235
context-copy-3 height 84
context-copy-4 x 645
context-copy-4 y 621
context-copy-4 width 1235
context-copy-4 height 84
context-icon-a x 492
context-icon-a y 54
context-icon-a width 130
context-icon-a height 130
context-icon-b x 492
context-icon-b y 402
context-icon-b width 130
context-icon-b height 130
title-parent x 140
title-parent y 55:430 hold; 71:430 smooth; 95:396 hold
title-parent width 1640
title-parent height 350
title-line-one x 0
title-line-one y 0
title-line-one width 1640
title-line-one height 170
title-line-two x 0
title-line-two y 168
title-line-two width 1640
title-line-two height 170
phrase-stack x 560
phrase-stack y 206:470 hold; 264:470 smooth; 278:362 hold; 336:362 smooth; 366:254 hold
phrase-stack width 1260
phrase-stack height 576
row-1 x 0
row-1 y 0
row-1 width 1220
row-1 height 144
row-1 opacity 206:0.2 smooth; 211:1 hold
row-icon-1 x 0
row-icon-1 y 0
row-icon-1 width 128
row-icon-1 height 128
row-copy-1 x 210
row-copy-1 y 8
row-copy-1 width 1040
row-copy-1 height 100
row-2 x 0
row-2 y 216
row-2 width 1220
row-2 height 144
row-2 opacity 273:0.2 smooth; 278:1 hold
row-icon-2 x 0
row-icon-2 y 0
row-icon-2 width 128
row-icon-2 height 128
row-copy-2 x 210
row-copy-2 y 8
row-copy-2 width 1040
row-copy-2 height 100
row-3 x 0
row-3 y 432
row-3 width 1220
row-3 height 144
row-3 opacity 345:0.2 smooth; 350:1 hold
row-icon-3 x 0
row-icon-3 y 0
row-icon-3 width 128
row-icon-3 height 128
row-copy-3 x 210
row-copy-3 y 8
row-copy-3 width 1040
row-copy-3 height 100

Original SVG whitelist and construction

These are the complete default+adaptation active image dependencies. Each SVG is supplied in active-assets.zip at project/public/. Rebuild its independent shape elements from the exact svgConstruction XML tree; use the per-element attributes, transforms, gradient stops and clipPath alpha. No generated source or private script is required.

Active SVG path SHA-256
art/workspace-icon-phrases/icon-1-adaptation.svg 843d6e3baff17f85a13daf8103ed0c10f38c200d9184607bca2b02d812d5e3a9
art/workspace-icon-phrases/icon-1-default.svg bb31613b93a757fcc90c7faeb9a53393249e6e48138561b894981b521bdb4c04
art/workspace-icon-phrases/icon-2-adaptation.svg 22983d3f1790663ff176e7eaad140bb781096287480fc5565c86cd6a68e2ca43
art/workspace-icon-phrases/icon-2-default.svg b0e58bdedeb744009362cbc52a0a3d1e39f9db11bb1fae31f238574efa0b617b
art/workspace-icon-phrases/icon-3-adaptation.svg ade8e3d8e617557100fa8bf8b23343c784e6489efc1861296e89837410fcd116
art/workspace-icon-phrases/icon-3-default.svg 829f4ea0cec79519832aeaff834dae7914a571095d74de0034d0b33bf90a4260

Checkpoints and regression limits

Local Source Required condition
0 3060 Original conversation closeup.
54 3114 Last conversation frame; small parent drift.
55 3115 Cut to first title word.
61 3121 Second whole word.
71 3131 Third whole word.
94 3154 No second line yet.
95 3155 Second-line five-character prefix.
101 3161 Seven-character prefix.
115 3175 Full replacement title.
205 3265 Last frame of long title hold.
206 3266 First icon row; title gone.
264 3324 First recentering move starts.
272 3332 One row yielding space.
273 3333 Second row starts.
278 3338 Two-row position reached.
336 3396 Three-row re-centering starts.
344 3404 Only two rows.
345 3405 Third row starts.
359 3419 Three rows; parent has not finished its continuing settle.

The tests verify installed core/recipe/artifact pins, exact flat ZIP whitelist, active SVG closure, node ownership, every numerical control and CSV row, real archived CLI options and default/adaptation/custom prepareInput bindings. The frozen font receipt checks actual full-text widths; parent renders still need their normal font gate. No passing scalar test establishes visual fidelity.

Largest remaining gap: Source-specific mascot depth, exact type spacing and conversation framing are replaced by original flat SVG symbols and invented editorial content; micro-settling curves are chosen, not source-measured.