OpenAI Film Fieldnotes

Download complete editable project · Read review limits

Reset two filters, restore their intersection, open the same prompt

Manual construction guide; source-quality and moving review outstanding. No native project, import macro or verified Resolve execution is included.

Create a silent 1920×1080 composition at exactly60/1 fps with local frames0–1187. The official source is N-MJ1W8Vj9E [2870,4058). Integer source PTS are 256 ticks on a 1/15360 time base. Do not retime, append a hold or include the edited return. Install the supplied licensed Geist font and calibrate Text+ against the actual exports. Native font, mask, blur and antialiasing parity remain unverified.

Contract and controls

Both selectors start with an existing choice. Format index2 clears, returns and remains selected while audience index0 clears and returns. The combined context is carried into an eight-item gallery and the first item's drawer. This is one relation, not separate counts for selectors, cards and text selection.

Local frame Source Observable event
0 2870 Both choices already active; format section visible
13 2883 Format clears while audience stays active
365 3235 Format restores; page scrolls toward audience
435 3305 Audience clears while format stays active
673 3543 Audience restores; page scrolls into combined results
978 3848 First result opens in a right drawer
1038–1060 3908–3930 Authored drawer-body scroll within inspected bracket
1085 3955 Complete prompt text becomes selected in one change
1187 4057 Final selection hold; no copy, launch or return

docs/controls.csv contains all1188 rows from scripts/controls.mjs. It is the authoritative numerical animation table, not a verified Resolve importer. Regenerate it before editing. Global frame=composition start+local frame. Use held keys for selected flags, drawerVisible, textSelected and pointerMode. For scalar transforms either key each CSV row or reproduce track() exactly: clamp t to [0,1], use t²(3−2t), then interpolate the adjacent anchor values. Do not replace these curves with a default spline or infer real event latency.

Format fill holds1 through12, is.62 at13 and0 at20, stays0 through364, is.16 at365 and1 at372. Audience fill holds1 through434, is.7 at435 and0 at442, stays0 through672, is.35 at673 and1 at680. Checks switch at the event frames, independently of the short fill fades. Clearing one must never clear both.

PageY anchors are (0,0), (55,0), (120,−78), (364,−78), (365,−90), (368,−290), (370,−565), (385,−800), (672,−800), (673,−800), (675,−880), (678,−1250), (690,−1540), (705,−1530), (758,−1530), (805,−1715), (870,−1715), (885,−1760), (1187,−1760). The small reversal after690 is authored settling, not measured source easing. Keep gallery registration from978 onward.

Coordinate system and layer ownership

All numbers are top-left pixels, Y down. Convert a point to normalized Fusion coordinates with X=pixelX/1920, Y=1−pixelY/1080; convert rectangles through their centers. Confirm the installed node's convention. Apply a child's transform before its parent's, once only. Output clipping is not a scale operation.

  1. Build a white1920×1080 Background. Above it, mask the page to the rectangle (0,116,1920,964). Page-local content uses the world coordinates below plus PageY. The React nested −116 offset merely cancels the mask's origin; do not apply it again if your Fusion page branch already uses full-frame coordinates.
  2. The fixed chrome is (0,0,1920,116), fill#edf1eb, bottom border#dce3d8. Its brand row begins(30,18), uses a24px SVG mark, 15px600 text and.8px tracking. The white address-style context pill is(30,64,1860,34), radius18, padding22, text16px. It lists only currently selected labels; this is fictional chrome.
  3. Keep page content and its context bar in one branch. Apply the authored backdropBlur to that branch only, then composite a#19231a solid over the page mask using backdropAlpha. Never blur or dim the drawer or fixed chrome. Use the CSS5px blur as an optical target, not a claimed equal Fusion setting.
  4. Composite the drawer above the retained page and below the chrome. Pointer comes last, outside all scrolling groups. Do not put the drawer in PageY.

Selector sections

Both sections occupy x360..1560. First eyebrow(360,190), title(360,230), tiles y408. Second eyebrow(360,900), title(360,940), tiles y1120. Eyebrows use14px600, tracking1, color#426a79; titles72px, line76, tracking−2, two fixed lines. The first section's Clear selections label is(1395,346), size16, underlined. It is never activated in this excerpt.

Each grid has three columns at400px pitch and two rows. Format tiles are 400×184; audience tiles400×250. Use1px#d6dcd6 borders and3px colored top rules. The six rule colors in order are#75a6d8, #cf809b, #c6a731, #d78e55, #9c83bd,

6ca98e. Pale fills are#edf4fb, #fbf0f5, #fcf5de, #fcf0e5, #f2eef8, #eaf6ee;

format fills grade vertically to white, audience fills stay flat.

Overlay#17211e on the selected tile using its fill control. Its text shade is round(25+224×fill), with RGB=(shade,shade+2,shade). The unselected tiles use fill0. Title local x24,y21 for formats or65 for audiences, size29, width340. Two detail lines begin y72/112, size18, line26, opacity.7, width345. Count text starts x24, y=tileHeight−37, size13, opacity.65. Original counts are fixture copy, not queried results. Audience tiles also have a two-digit index at(24,22), size12.

At(349,20), draw a28×28 circle/check affordance. Circle center(14,14), radius12.5; unchecked plus path(8,14)→(20,14) and(14,8)→(14,20). Checked path(8,14)→(12,18) →(20,9), stroke1.8 with rounded ends. Check flags and fills have separate gates. Unselected hover adds the tile's rule color at.07 opacity only when the authored screen pointer lies inside its transformed bounds. No hover commits a choice.

Context bar and gallery

Gallery background is(0,1700,1920,1780), fill#f3f6f0. The context bar is a separate1200×61 white rounded group at x360 and Y=max(132,1730+PageY). Radius38, padding23, 18px gaps; preserve this sticky ownership instead of scrolling it behind the gallery. Its28px original mark and14px650 collection label precede the current audience/format labels at13px. Show8 ideas only when both are active. Search and Copy view link controls are inactive specimens, not executed actions.

Gallery eyebrow begins(360,1860), size13px600, tracking1.4. The two-line title begins(360,1900), size70,line76,tracking−2,width750: audience plus a middle dot, then format. Supporting two-line copy begins(1140,1967), size18,line26,width400.

Result cards are380×292 at x=360+410×column, y=2090+308×row; eight cards total. The viewport eventually shows six full cards and part of two more. Use a1px

d7ded5 border, radius16, white fill. First card shadow is a subtle authored

0/5/14px black-green at5% opacity. Audience tag(24,24), size12; format tag (207,21,150,26), pale yellow fill, radius5, size11. Four title lines start(24,78), size29,line34,tracking−.45,width335. Footer starts(24,246), width330, 1px top rule, padding-top11, size12. These remain live Text+ and shapes, not screenshots.

Drawer and full-field selection

Drawer is762×964 at Y116. X=1920−762×drawerProgress; progress is.78 at978, smoothsteps to1 at990 and holds. It is not a fade-in from an invented zero-width state. Fill#f6f8f3,1px left border#d4ddd2. The first12-frame entrance is authored from the sampled source bracket. Backdrop alpha is.22 at978→.42 at990; blur0→5.

Fixed drawer header is762×106 with a bottom rule. Eyebrow(48,24), size12, tracking.8; context labels(48,56), size13,20px gap. Close circle(688,29,34,34) contains an X stroke; it is not clicked. It must not scroll with the body.

Body viewport is drawer-local(0,106,762,858), independently clipped. Body content origin is(48,116+drawerContentY) inside that viewport. drawerContentY stays0 through1038 and reaches−84 at1060. Title is five lines, size67,line72, tracking−1.9,width650. Its words exactly match the first card's four title lines. Two-line helper copy starts body-local(0,389), size18,line26.

Prompt box is body-local(0,480,666,304), white, radius14,1px border#d6dcd4, 2px top border#c2cadc. Label(25,23), size11,tracking.8. Seven body lines start (25,62), size18,line25,width615. At1085 apply#b5d7fa behind each line's actual text width in one step. Preserve the text; do not animate a drag or retype it. Footer begins(25,251), width617, height52, top rule, padding-top13; center its pills vertically. Open draft and Copy prompt pills are visible but never clicked. No copied toast or generated result.

Art, pointer and verification

scripts/build-art.py recreates two64×64 SVG marks from original polygon/path geometry. Rebuild these as editable Polygon/BSpline masks and fills, preserving their viewBox ratio; or use a locally verified vector workflow without claiming tested native SVG import. No source photography or brand mark is included.

Pointer X/Y/scale/mode come from the CSV. The supplied code draws an original white hand with dark outline; mode1 from1030 uses an I-beam. Scale=.88+.04×distance within two frames of the nearest event, else1. Its path is authored, not recovered mouse telemetry. Keep it in screen coordinates above both page and drawer.

Validate the ZIP, regenerate controls/art, run the20 shipped tests and verify both actual Remotion manifests. Inspect event neighbors, first and last included frames, text bounds and clipping. A scoped rendered check can show that later drawer scrolling leaves the gallery registered; it cannot certify the whole animation, source fidelity or native Resolve behavior. Keep all such approvals0.