OpenAI Film Fieldnotes

Download complete editable project · Read review limits

Carry a four-file selection into a completed project set

One source-grounded treatment with two original content variants. The Remotion exports are real renders; these Resolve/Fusion steps are a manual construction guide, not an imported or executed project. Native Resolve execution and source-quality approval remain unverified. Use the original supplied content.

Native cadence and identity

The historical source is Creating a contextual workspace in ChatGPT, -ctJEx1n15g, published April 8, 2025. The selected interval [630,952) contains 322 frames at 24/1 fps. Local frame 0 is source frame 630; local frame 321 is source frame 951. The final twelve frames hold the restored home. The selected end is not a cut.

Set a silent 1920x1080 timeline and Fusion composition to exactly 24 fps and 322 frames. Do not use 23.976 or 25 fps. Source and research excerpt use time base 1/12288 with 512 ticks/frame. The rendered MP4s use 1/15360 with 640 ticks/frame at the same cadence. Read actual integer source positions in source-timing.json and output positions in each matching movie manifest/probe.

Create seven stable file identities A–G from the chosen input JSON. Preserve each file's name and type across surfaces. A/B/C are PDFs, D a presentation; E/F/G are an unselected document, image and text file. Picker order is A–G. Only A/B/C/D are selected. Initial project-list order is A, B, C, D, changing to A, C, B, D when the final three status glyphs appear. Do not change names or types to simulate the reorder, and do not count each file as another example.

Local interval Visible state
0–42 Empty project home; camera emphasizes Add files
43–78 Empty in-app project-files dialog; camera reframes
79–101 OS picker appears over the same dialog; no selected row yet
102–108 File A selected
109–112 A and B selected
113–117 A, B and C selected
118–153 A, B, C and D selected
154–159 Selection and Open emphasis clear as the picker dismisses
160 Picker absent; underlying empty-state message still visible
161–236 Four rows appear together, all with circular status marks
237–258 A has a document glyph; B/C/D retain circular marks
259–309 All four have file glyphs; order is A, C, B, D
310–321 Dialog closes; home displays four files and a three-icon stack

Intervals are inclusive. The completed glyphs are observed UI states, not evidence of backend persistence, service latency or current product behavior. No instruction editing, response generation, file preview or removal occurs.

Build the editable workspace

Use top-left pixel coordinates on a 1920x1080 scene plane. The original Orchard/Northline chrome and sidebar can be built from the project code. Keep the browser at (108,9),1704x1062 with 20 px corner clipping. Its 100 px chrome ends at y=109; the app body is (108,109),1704x962. The sidebar is 270 px wide.

Use a 36 px Geist, weight 650 project title at (716,242). The empty composer is (696,309),798x122. Keep its placeholder unchanged. Place the file card at (696,456),389x77 and the empty instruction card at (1105,456),389x77. The file card initially shows Add files, fileHint and an add-file glyph. When the four rows exist, its bound count becomes 4; on return it reads Project files and 4 files. Draw three overlapping document icons as a stack, not a file count. The instruction card remains empty and its edit glyph stays visible.

The desktop is an original code-built gradient. Four original icon constructions have two palettes: eight SVG bindings, not eight examples. Keep the bundled Geist font/license. Rendered text is live text; no source image is a UI layer.

In-app file dialog and status rows

Gate the app-only black scrim and dialog together over[43,310). The scrim covers (108,109),1704x962 at the authored opacity used by the project, not the browser chrome or desktop. The dialog is (534,306),852x570, radius 15.

Dialog-local controls:

The ring motion is an authored substitute, not a recovered source spinner rotation or progress percentage. Do not introduce a progress bar or success toast.

Separate OS picker layer

Draw the picker above the in-app dialog, at (497,281),925x518, radius 12 with a shadow. It moves with the shared camera. Its own authored Y offset and opacity come from pickerOffsetY and pickerAlpha. Before it, add a separate gray overlay over the whole browser, including chrome and underlying dialog: color #A5A5A5, opacity 0.75×pickerAlpha. Keep this distinct from the app scrim.

The picker has a 161 px sidebar with original text/vector destination icons, a 72 px toolbar, a 36 px column header, and a 764 px-wide striped row region at picker-local(161,108). Use seven 23 px rows. Each row has a 17 px icon at (31,3), name at (54,1) in 307 px with ellipsis, right-aligned size at (373,1) in 94 px, kind at (487,1) in 123 px, and modified text at (620,1). Names/types come from the same file records as the project list; dates and sizes are fictional.

Fill the first pickerSelectionCount rows with the original blue-green selection color. That count changes 0→1→2→3→4 at 102/109/113/118 and returns 0 at 154. Do not highlight E/F/G. The bottom-right Open button is 83x24 at (818,472), colored only while selection is visible; Cancel is 83x24 at (724,472).

Authored picker opacity is 0 before 79; (frame−78)/4 at 79–81;1 at 82–153; (160−frame)/7 at 154–159;0 from 160. Before dismissal, Y offset is −10×(1−opacity); during dismissal it is 24×(1−opacity). Keep the in-app empty message at 160, then replace it with four pending rows at 161. These opacity values and the gray wash approximate the observed OS transition, not its API.

Camera, cursor and coordinate conversion

Use one global local-frame clock. Let E(frame,a,b)=1−(1−clamp((frame−a)/(b−a),0,1))³. Set inward=E(frame,20,37), reframe=E(frame,43,58), outward=E(frame,79,118).

A scene point maps to (scale×x+X,scale×y+Y). Apply this once to workspace, scrims, dialogs and pointer together. For a full-plane Fusion Transform, convert the transformed plane center (scale×960+X,scale×540+Y) to normalized coordinates, retaining the same scale. A rectangle (x,y,w,h) has normalized center ((x+w/2)/1920,1−(y+h/2)/1080) and size (w/1920,h/1080). Keep child positions relative to the parent before conversion; check the tool's Y direction.

The Gaussian blur is the lesser of 3.6 and the sum of absolute X/Y changes plus 500×absolute scale change, divided by 65, comparing the previous frame. It is an authored blur approximation rather than measured directional exposure. Pointer anchors, cubic interpolation and arrow/hand gates are in model.ts; controls.csv gives every sampled position. Do not add another camera transform to the pointer or reset the clock when a dialog appears.

Editable constraints and verification

Preserve all required fields and seven distinct file IDs/names. The title must fit 780 px at 36 px, weight 650 and 214 px at 14 px in the sidebar. Dialog names must fit 710 px at 15 px, weight 550. Picker names may ellipsize in 307 px; keep their complete strings in the data. Three helper lines fit 602 px at 15 px. Overwide loaded-font text fails rather than silently shrinking. Calibrate these widths manually in Resolve.

Before claiming a Resolve result, open the actual application, inspect each boundary above and confirm identity/order across surfaces. Export a silent 322-frame 1920x1080 H.264 MP4 at 24 fps and reprobe every PTS/duration. Match it to the exact content variant. No native Resolve execution has been performed. Sampled stills, native-clock checks and encoded model-state checks do not establish independent moving review or source-quality approval.