OpenAI Film Fieldnotes

Download complete editable project · Read review limits

Reset the view before revealing activity and its explanation

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 Ej6hnsQgV_c, selected native interval [2160,2280), 30/1 fps. Use a silent 1920×1080 square-pixel composition containing local frames 0–119. Exact duration: 120/30 seconds (4.000000 s). Source ordinal = 2160 + 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.

Hard context reset, bounded activity and sidebar explanation

The source makes a cut at local 10. Do not replace it with a smooth camera pullback merely because the research ID contains that word. The page and conversation remain separate regions throughout the wide view.

Build an original browser at (212,windowY), 1496×944, radius 12. Its top chrome is 42 pixels high. Below it, the shopping region is 1080×902 and the right conversation region is 416×902. Clip the shopping subtree independently. The 30-pixel shop margin, 155-pixel collection list and four 199-pixel product columns are authored layout choices. The complete product illustrations are SVG paths in src/Scene.tsx; rebuild them as editable shapes rather than source product photographs. public/art/study-symbol.svg is the original paper bird.

  1. Put the complete browser and the status pill inside a camera group. Before local 10, scale it around (1640,480) using cameraScale, 2.5→2.47. At 10, hard-cut to scale 1 and change the pivot to (960,540). That is a held gate, not an interpolated zoom. windowY settles 80→70 over 10–24. A small final scale change starts at 117 and reaches 1.018 at 119; do not add an end hold.
  2. Retain the request and response lines in the right sidebar. Use 14-pixel type and explicit 23-pixel line spacing. The request bubble starts 31 pixels below the sidebar heading, with 16-pixel vertical padding. Match the input fixture's explicit line breaks; the width validator does not auto-wrap.
  3. At shopping-local (-30,activityY), make a 1120×430 radial pale-blue wash, fading to transparent at its edge and blurred by an authored 28 pixels. Apply opacity=.42×activityOpacity. It rises over 40–44, moves upward through the store using activityY, then fades over 57–66. Its mask must not cover the conversation. This is activity feedback, not a page transition.
  4. Put a dark 210×36 status pill at screen-world (statusX,statusY), before the camera transform. Opacity follows statusOpacity over 41–44. Reveal the rounded prefix of statusInitial using statusProgress over 43–49. At 80, replace it with statusActive, without moving the sidebar or adding a result.
  5. Fade the planning title and its three lines with planningOpacity over 79–84, below the existing reply. These cues explain an ongoing process. The static bag remains at zero, Add controls remain idle, and the bottom assistant status bar retains its Stop affordance. No purchase is depicted.
  6. The original arrow at (1586,630) appears only in the initial close crop. It is not recovered source cursor artwork or an inferred click trace.

Desktop gradients, typography, page data, product geometry, activity field, pointer, exact status movement and framing differ. The source's compositing and optical character have not been recovered. This is a control/phase study, not a real browser automation demo or an approved source-fidelity match.

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.