OpenAI Film Fieldnotes

Download complete editable project · Read review limits

Grow the app tier, then replace identity and request together

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

Source and composition

Official film 2C4Cs6503gw, selected native interval [0,360), 60000/1001 fps. Use a silent 1920×1080 square-pixel composition containing local frames 0–359. Exact duration: 360360/60000 seconds (6.006000 s). Source ordinal = 0 + local frame. No frame-rate rounding, extra opening pause, closing hold or narration belongs to this study.

The comparison is a retained, hash-bound 960×540 research excerpt. Preserved native metadata and PTS ledgers bind its clock; the historical full master is absent, so this is not a fresh full-master decode. Samples informed the build. Intermediate paths and measured-looking coordinates below are authored reconstruction controls, not official product timing, latency or design tokens.

Setup and common coordinate rules

Verify the unmodified kit with python3 verify_package.py, then follow project/README.md. Choose either input JSON content set. Install the bundled licensed Geist font for Text+, and calibrate pixels, weight, tracking and baselines against the supplied MP4; a font name alone does not guarantee parity.

Regenerate docs/controls.csv with node --experimental-strip-types scripts/controls.mjs. Each row includes the local frame, source ordinal and exact sampled controls. Fusion global frame = composition start + CSV frame. Coordinates here use pixels from top-left, Y down. For a point in normalized Fusion image coordinates, X=pixelX/1920 and Y=1−pixelY/1080; convert top-left rectangles through their centers. Check the installed tool's coordinate direction instead of assuming CSS and Fusion match. Parent transforms apply after local transforms. A uniform pivoted transform is pivot + scale×(point−pivot), followed by the stated translation. Convert angles to your tool's convention. CSS rotations are clockwise in this Y-down space.

Continuous controls use the CSV per-frame values, not an unspecified default spline. Held gates, text prefixes, colors and row indexes use stepped keys. Smoothstep is t²(3−2t), with t clamped to [0,1]; linear progress is clamped t. Rectangle masks need pixel-correct width and height; normalized X/Y values are not interchangeable on a non-square raster. Match opacity, clipping and layer order before attempting a moving comparison.

Composer tier, chip mask and paired replacement

Build on white. The composer has left x=476, width 1160, corner radius 88 and vertical center y=540. Its height is composerHeight; top = 540 − height/2. The plus disc is centered at (368,inputCenterY), diameter 160. The send disc is centered at (1560,inputCenterY), diameter 120. They follow the lower input tier, not the growing composer's top. Apply introScale about (960,540) and introOpacity to this whole group. Scale settles by local 68.

  1. Use Text+ for the current app name at (535,inputCenterY−37), 60-pixel type, tracking −1.5 pixels, line height 1.2. Reveal the first max(1,floor(length×appNameProgress)) characters while progress is positive. Use weight 400, then 600 when appBold becomes 1 at 118.
  2. Expand the composer from height 160 to 360 over 144–166. The lower input center moves from 540 to 640. This tier growth precedes the chip extension.
  3. Place the upper app chip at (512,composerTop+30), height 128, corner radius
  4. Its horizontal clipping mask reveals the identity label and close mark. The chip width is 128 + (selected chipWidths value−128)×chipProgress. The original badge is an 84-pixel rounded square at chip-local (18,22). Use iconOpacity on the chip/badge group; it rises over 164–172.
  5. The label begins at chip-local (120,30), size 56, weight 600, tracking −1.5. Hide the label when chipProgress is zero so a glyph sliver cannot leak out of the fully collapsed mask. Build the badge from vector strokes. Do not substitute source logos or imply these fictional names are product integrations.
  6. Extend the first chip over 183–204. Append one space and the request prefix after the lower name, using requestProgress over 190–214. Name and request remain separate Text+ runs; measure the combined run before placing it.
  7. The request withdraws over 257–268. The chip contracts over 260–274 and its mask clips its label. The lower name also shortens over 264–274. At 274, switch appIndex to 1 with a held key: the tall composer remains. Replace badge, name and request together, without a container reset or a fade.
  8. Extend the second chip over 296–320 and reveal its request over 300–332. Hold through 359. This full identity/request sequence is one example.

The source app marks, specific requests, exact typed glyph cadence and pill metrics differ. Interpolated widths and reconstructed entry motion are authored. The supplied width guard measures the bundled font; Resolve must be calibrated separately. Do not shrink text to make an unsupported input pass.

Verification boundary

Inspect both actual exports at their native cadence, including entry/exit, hard gates, layering, width, masks and holds. Shipped code checks font loading and selected text-width budgets before rendering; it rejects oversized copy instead of silently shrinking it. This is not arbitrary-input readability approval or a guarantee that an independent Text+ rebuild fits.

The kit contains editable original geometry, fixtures, controls and tests; source screenshots/movies are not renderer inputs. Native .drp execution, tested Resolve import, independent moving-source review and source-quality approval are not included. Existing matching pinned dependencies were used, not a clean dependency install. A modified input needs a new render and review.