OpenAI Film Fieldnotes

Download complete editable project · Read review limits

Read at one scale as the room recedes

Draft construction guide. Moving-source fidelity and native Resolve operation remain unverified. Two original content variants form one example.

Source, raster and timing

Official film identifier: To04SSylvVY. Selected native source interval: [408,552), 24000/1001 fps. Create a silent 1920×1080, square-pixel composition with 144 included frames, local 0–143. Duration is 144144/24000 seconds (6.006000 s). Source ordinal = 408 + local frame. Preserve the rational rate; do not round it or append a closing hold.

The source comparison is a retained, hash-bound 960×540 excerpt. Historical master metadata and PTS ledgers supply the timing reference, not a fresh decode of the absent full master. The editable output contains only original content.

Inputs and shared controls

Verify the unmodified download with python3 verify_package.py, then follow project/README.md. Input JSON files provide the two fictional content sets. The bundled Geist font includes its license. Install it for Text+ and calibrate sizes, tracking and baselines against the actual exported candidate. Original identity, data and palette are not official OpenAI tokens or live Poe results.

Regenerate docs/controls.csv with node --experimental-strip-types scripts/controls.mjs. Each row maps one local integer frame to its source ordinal and this treatment's controls. Fusion's global frame is composition start + CSV frame. Apply local transforms before their parents. Continuous values use the supplied per-frame samples; held switches must not receive default smooth splines. Where specified, smoothstep is t²(3−2t), with t clamped to [0,1] inside the stated start/end interval.

Independent scene depth and reading space

The retained source begins with a visible window frame. It does not establish that the camera crosses the window plane within this interval. The response scrolls upward while keeping its screen-space text size. Neither generated typing nor fixed vertical text is claimed.

Perspective construction

src/world.ts contains ordered, editable quadrilateral surfaces. The room, furniture and rear window have distinct depths. The near facade, opening frame, glass and neighboring window occlude them. This is not a zoomed screenshot. The geometry is an original workshop, without source photographs or people.

For a world point (worldX, worldY, worldZ), use the supplied camera controls:

distance = cameraZ − worldZ
pixelX = 960 + 950 × (worldX − cameraX) / distance
pixelY = 540 − 950 × (worldY − cameraY) / distance

The 950 focal factor is an authored projection constant, not a recovered lens. Across local 0–143, cameraZ rises linearly from 1.12 to 4.30, cameraX from 0 to 0.09, and cameraY from −0.49 to 0. The camera stays outside the frontmost surface. Near features shrink more than distant features. Keep this depth relationship; a uniform Transform applied to the whole room loses it.

Manual Fusion polygon route

  1. Use the supplied docs/projected-polygons.csv, generated by node --experimental-strip-types scripts/projected-polygons.mjs. It has one row for every native frame and every surface, in explicit painter order. layer is the merge order, id identifies a persistent quadrilateral and color is either a literal hex color or the selected input's warm color.
  2. Build each surface as a Background masked by a four-vertex Polygon. Enter each row's x0,y0 through x3,y3. For bottom-up normalized point controls use x=pixelX/1920 and y=1−pixelY/1080. Values outside [0,1] are intentional off-screen geometry; do not clamp them before rasterization. Confirm the installed control's coordinate convention with the first/final exports.
  3. Animate the vertices at every supplied integer frame. A held per-frame key avoids inventing intermediate overshoot. Merge in ascending layer order; reordering all surfaces by a single depth value will break the opening's occlusion. Source coordinates and palette are inspectable in world.ts.
  4. The CSV is construction data, not a tested native import script. No claim is made that an arbitrary SVG Loader or a particular Camera3D field-of-view control will reproduce these points automatically. A native 3D rebuild is optional, but must be checked against these projected controls.
  5. Above the projected scene, add the original subtle edge shade. Then merge the text in screen space, outside every camera or room transform. The request starts at x=635, y=requestY. The response starts at x=525, y=textY, width=880. Both use white 28 px type; response line height is 42 px.
  6. textY=690−5.4×localFrame and requestY=258−5.4×localFrame. Keep text scale, width and x constant. The copy exists from the start and scrolls; there is no character-generation or new-message animation. Rebuild separate Text+ paragraphs/list lines using the selected content record and compare wraps.
  7. Merge opaque black bars last: y=0–129 and y=950–1079. They clip both scene and text. Stop after 143 with no extra hold or invented response result.

The source has photographed people, moving objects, complex materials, blur and a more detailed interior. Those are absent here. Camera controls, palette, scroll speed and text metrics are authored approximations. The source ledger is millisecond-quantized; its native cadence is retained as 24000/1001, while the supplied output uses exact 1001-tick frames at a 1/24000 track timescale.

Verification boundary

Compare both actual MP4s, including first/final frames, transitions, clipping and text wrapping. Check editable geometry and input substitutions separately from the source comparison. Sampled still inspection and exact movie hashes do not establish perceived moving quality. No native .drp, tested Resolve importer, narration, product-performance result or source-quality approval is included. A newly edited input needs its own render and review.