Independent visual research / Public editionReviewed 05 Sep 2026
Motion fieldnotesOpenAI film study
About this study

Editing with DaVinci Resolve

Documentation preview. Resolve application verification is incomplete. This download is a preparation kit, not a Resolve project. It contains original layered stills, reproducible asset code, recipe specifications and offline timing helpers. It does not contain a .drp, a .dra, application-exported Fusion setups, or Resolve-rendered examples. Do not infer those deliverables from the existence of this ZIP.

The accompanying website supplies bounded official-source evidence. This kit contains no source-film pixels, OpenAI branding, copied demonstration data, private application code or talking-head recordings. A neutral fixture is not proof of a real product capability.

Environment gate

The research workstation is Ubuntu 24.04.4 LTS, Linux x86_64, with no Resolve installation, no attached desktop session and no verified GPU render environment. No accessible remote Resolve installation was found. Tested Resolve version, edition, operating system and output codecs: none. ACCEPTANCE.json records each missing application check separately.

The construction reference is Blackmagic Design's Resolve 21 Reference Manual, published July 10, 2026. The official software catalog inspected September 5 lists 21.0.4 Free and Studio updates dated August 5, 2026. This is a documentation/release observation, not an installed-version claim or a request to upgrade an existing project library. Before executing, record Help/About (or the application About menu on macOS), edition, OS, GPU, driver, attached display and the manual supplied with that installation. Reconcile any different controls before continuing.

Needed access: an authorized interactive GPU workstation with Resolve, a disposable local project library, permission to export and render the neutral fixtures, and a desktop-control channel or a human editor. Use Free where possible. No recipe deliberately selects Studio effects, third-party plugins, Magic Mask, Speed Warp, AI tools or external-script access. Free compatibility and actual codec availability still require testing. Do not purchase Studio just to complete this guide without separate authorization.

First ten minutes in the UI

These are manual-checked construction instructions, not an executed test. Names and values must be confirmed in the chosen application.

  1. Unzip into a short neutral folder such as ResolveStudies. Install the two bundled DejaVu fonts using the OS font manager, then reopen Resolve. If font installation is unavailable, document an installed sans-serif substitute and re-check every title's line break, baseline and width. The fixture PNG text is already rasterized; only native Text titles need installed fonts.
  2. In Project Manager, show Project Libraries. Add Project Library → Create and create a new Local library, not a production library. Create a project named ResolveStudies_DocumentationPreview. No supplied .drp is available to import in this release.
  3. Before importing media, open File → Project Settings. Master Settings: 1920×1080, square pixels, timeline and playback rate 30, progressive. Color Management: DaVinci YRGB, not color-managed; Timeline color space Rec.709 Gamma 2.4. Do not apply grades, LUTs, output transforms, HDR or automatic color management. These are chosen baseline settings, not source production settings. Record what the actual UI permits.
  4. Media page: import the complete media/ directory. PNGs are 1920×1080; preserve their raster and alpha. Clip Attributes → Data Levels: Full for these RGB fixtures. Inspect transparent overlays over shell.png; do not mistake a black viewer background for opaque black pixels. Any alpha correction must be recorded and checked at the edge, not guessed from the file extension.
  5. Create bins 01_OriginalMedia, 02_Recipes, 03_Sequence. Edit page → Media Pool right-click → Create New Timeline. Name each timeline exactly as listed in recipes.json; set start timecode 01:00:00:00. Use the project frame rate and raster. The twelve recipe timelines and S01_Original_Study_52s are specifications to construct, not timelines already present in this kit.
  6. Follow the selected recipe's track table. Intervals are half-open. Set clip durations numerically with Change Clip Duration; enable snapping and ensure adjacent endpoints have no one-frame gap or overlap. Native stills and generators have no temporal handle requirement. Real captures need actual recorded handles, not repeated frames masquerading as source footage.
  7. Scrub each listed boundary, then play at normal speed. Wait for cache if necessary. A cached or proxy preview does not prove final export fidelity. Make the first test at full raster before using reduced preview resolution.

Source, timeline and local frame coordinates

For Fusion, establish a new Fusion Composition with local range 0 through duration−1. Confirm the current-time field. If the actual comp begins at a different frame number, add that offset to every listed key. Timeline timecode, MediaIn source time and Fusion current time are different controls. Do not reset a source clip's frame range blindly.

For stills dragged from the Media Pool into a Fusion Composition, inspect MediaIn's Global In/Out. Set them to the composition's first and last included frame (normally 0 and duration−1). The manual explains that extending this range adjusts Hold First/Last Frame. Holding an original still is appropriate; holding a real application capture or presenter can misrepresent events and is not authorized by these fixture instructions. Check the final comp frame for missing media after every duration change. Reference: manual PDF p. 1386.

Geometry and spline contract

All stills are 1920×1080, square pixels, even when most of the image is transparent. Asset design coordinates are top-left pixels, x right and y down. The outer window is [192,108,1536,864]. The scroll viewport is [336,210,1248,620]. Do not crop the transparent canvas during asset replacement.

Fusion normalized image coordinates use x right, y up, with (0.5,0.5) at the center. A pixel rectangle [left,top,width,height] becomes:

Center.X = (left + width/2) / 1920
Center.Y = 1 - (top + height/2) / 1080
Width = width / 1920
Height = height / 1080

The fixed viewport therefore uses Center (.5,.518518519), Width .65, Height .574074074. Rectangle Soft Edge and Corner Radius are zero; Solid on, Invert off. Transform Pivot is (.5,.5), Size 1 and Angle 0 unless stated. Leave Reference Size normalized. A 240-pixel upward content move adds 240/1080 to Transform Center.Y. The effect mask belongs on the Merge after the content transform; the shell is the stationary background. The blue Transform mask is an effect mask, not a replacement for this compositing order.

Edit Transform uses linked Zoom and pixel translations around the centered anchor. With source/timeline raster matched, bring source focus (x,y) to the output center using Position.X = zoom*(960-x) and Position.Y = zoom*(y-540). Anchor Point remains 0,0; positive translation Y is upward. The text generator's layout Position is a different control from the clip's Video → Transform Position. Do not enter text-layout coordinates into Transform.

For basic Text generators, explicitly set both Alignment and Anchor; a centered paragraph does not by itself define the anchor of its bounding box. This kit keeps Title-panel Position at (960,540) and uses Settings → Transform for offset placement. With a Left/Center anchor, Transform (-576,-60) places the block's left center at top-left output pixel (384,600). A Center/Center anchor with Transform (0,0) centers a title. Set Drop Shadow Opacity 0, Stroke Size 0 and Background Opacity 0; leave text Zoom 1 and Rotation 0. Reference: manual PDF pp. 1220–1222. Four successive input states use duplicates of the same native title, avoiding a switch from native font metrics to a raster text plate.

For a different focus, rectangle or frame, use the offline helper rather than rounding by eye (all examples assume the full 1920×1080 canvas):

python3 tools.py focus --x 1180 --y 600 --zoom 1.8
python3 tools.py rectangle --left 336 --top 210 --width 1248 --height 620
python3 tools.py timecode --frame 100

The focus command returns a coverage check and exits nonzero when centering the target would uncover an edge. For a fully opaque full-frame source at zoom ≥1, legal translations satisfy abs(Position.X) <= (zoom−1)*960 and abs(Position.Y) <= (zoom−1)*540. This check does not inspect transparent content, product chrome or text sharpness. A focus at (1700,900) with zoom 1.8 would uncover 564 pixels on the right and 216 below. Do not apply it as a safe crop. Choose a legal translation and accept an off-center target, choose a different crop/technique, or recapture with more surrounding content. If changing zoom, recompute both translations and verify readability. Do not auto-clamp silently while continuing to claim the target is centered.

Continuous animations use explicitly selected Linear interpolation as a simple unfitted default; hard cuts are adjacent clips, not splines. In Edit, show the Keyframe/Curves Editor and the exact parameter channels. In Fusion, show Spline, select the animated channel and its endpoint keys, then choose Linear. Center animation may expose a Path modifier and displacement spline: check the spatial path as well as its timing. No overshoot, extra path points, looping, motion blur or default auto-easing is intended. A later fidelity pass may choose a different curve and must record the deliberate change.

The inspected manual's Text+ Write On paragraph has direction wording that needs an application check. This release does not guess that API/control's behavior. The input recipe uses discrete editable word states instead.

Assemble the 52-second study

sequence.json specifies 1560 frames and the exact portion of each recipe used. This is a silent original editing study, not a product demo or an approved all-hands presentation. Build the sequence by copying the underlying clips and Fusion compositions from recipe timelines, not their flattened renders. Place each group at its listed start frame. Preserve local keyframe timing when copying; recheck all trimmed excerpts. Recipe markers are not guaranteed to copy with clips. Add sequence markers independently.

The sequence moves through premise, context, focus, input, a new chapter, selection, navigation, result arrival, reading, a request recap in a new container, a label and a quiet end. The result reveal's final state continues unchanged into the reading hold. Other context changes are intentional cuts, not falsely advertised geometric handoffs.

Generate a marker reference with:

python3 tools.py self-test
python3 tools.py verify-kit
python3 tools.py markers --output marker-reference.csv

The CSV is not an assumed Resolve import format. In the Edit page, deselect all clips, move the playhead to the listed timeline timecode and press M to add a timeline marker, then M again to edit its name, color, duration and note. With a clip selected you can create a clip marker instead; confirm placement. Use Blue for chapters, Yellow for actions, Green for reading, Red for the playback cue and Purple for the ending. Colors are chosen semantics, not source conventions. Markers are editorial notes and should not be burned in.

Choose Edit for sequencing, hard cuts, simple transform keys, titles, independent overlay tracks and holds. Choose Fusion for a fixed viewport around moving content, selection/content registration under an outer transform, or layered result masks. Do not create a Fusion composition merely to make a hard cut.

Adapt without destroying the edit

Replace Media Pool assets or the specific MediaIn nodes while preserving the full-frame canvas, pixel aspect, alpha and known landmark. MediaIn names are labels, not guaranteed asset bindings. Check each node's actual input image. Change the last static interval when changing shot duration. Do not apply Change Clip Speed to an entire title/action/hold sequence: that changes typing, travel and reading time together. If a shorter shot cannot fit its action and complete-result hold, change the editorial choice or source selection.

For real captures: verify the actual interaction, retain an uncut capture, record its source-time In/Out and any omitted interval, and preserve state order. A jump in footage alone does not tell you the application's original wait duration. Compressed waits are a coverage gap in this chapter, not a validated recipe. Do not infer a speed factor or put a fake spinner into the fixture to suggest a performance measurement.

Pair with an actual recording later

The recording—not script length—supplies speech anchors, pauses and ending performance. Obtain a transcript with timestamps derived from that recording. This kit has no paired recording, so all actual speech-anchor, manual-delay, wave and pause fields remain unset.

Keep two files: the supplied talking head plays through OBS, with its audio routed through the virtual microphone; the separate silent presentation plays through Google Slides. Do not composite the talking head into these studies, duplicate narration, or add music. Future real product demos require inspecting the product's current local instructions, exports and runtime before planning or capturing the demo. A historical catalog is not runtime verification.

Let the presentation start at shared time 0. Its recognizable content cue is C; measured reaction plus startup delay is R; the recording starts at S = C+R. Recording timestamp h belongs at presentation time S+h. Record C, rehearsed R, and intended S explicitly. Never assume R=0.

Let H be actual recording duration, T the onset of its recorded ending wave/pause, E<=H the observed end of usable performance, Q its last required speech anchor (OBS calls it L), P presentation end, and B>0 the required operator buffer. Reuse the OBS worksheet and its observed reaction range:

C + Rmax + max(T,Q) <= P <= C + Rmin + E - B
presentation: [0, P)
talking head: [S, S+H)

Use the actual final visual proof completion as an additional lower bound if it occurs after S+Q. Opening lead-in and ending buffer are separate. File duration alone cannot decide which playback ends first.

The helper can check known values, but cannot derive them from nonexistent footage. Unknown reaction/usable-tail values block readiness; file duration is not usable performance. For an invented arithmetic example only, C=3, R=.7, H=E=60, T=57, Q=56, B=2 permits presentation end from 60.7 through 61.7 seconds:

python3 tools.py playback --cue 3 --delay .7 --head-duration 60 \
  --tail-start 57 --tail-end 60 --proof-end 56 --presentation-end 61 --buffer 2 \
  --reaction-samples .7 .7 .7

If the recorded tail is absent or the interval is empty, raise it in the single consolidated storyboard/demo review. Do not invent a wave, freeze a face or cut speech to fit. Review also establishes the actual export format and Slides, OBS and meeting playback behavior. Get approval before final presentation production; these research fixtures do not grant that approval.

The three identical example delays are invented. Actual cold/warm starts and attendee-side lip-sync/presentation checks follow the OBS runbook; three trials are a proposed practice, not a guaranteed bound. --post-wave-start and --post-wave-end add a whole-wave-after-presentation requirement when needed. H=786.133333, T=773.7, E=780.6, Q=773.14, B=2 rejects a source-equivalent end at 784; an end at 774 retains 6.6 usable seconds, not 12.13.

Export the editable work from Resolve

These steps are pending, not evidence that exports already exist.

Once actual exports exist, switch to a second disposable Local library. Project Manager → Import imports ResolveStudies.drp; the media may need relinking. Alternatively right-click an empty Project Manager area → Restore Project Archive and select the .dra. Keep this test separate from the authoring library. Temporarily make the authoring media location unavailable to expose accidental absolute-path dependencies; do not delete the originals.

For offline media, select the relevant Media Pool clips and use Relink Selected Clips to point to the restored media root. Inspect matching filename, raster, frame rate and duration. Do not accept a similarly named wrong file. Confirm all twelve editable timelines and the assembly, named nodes, text fonts, transparent overlays, clip lengths, keyframes and timeline markers. Preview each recipe at 1× and inspect the exact key boundaries.

Deliver-page export contract

Choose the actual environment first. The official July 2025 Resolve 20 codec table is an older OS/edition reference, not proof of Resolve 21 capability. It lists H.264/H.265 restrictions on Linux; do not assume a Free Linux MP4 path. Record the codec options in the installed Deliver page before selecting them.

For an environment that actually offers MP4/H.264: Deliver → Custom Export, Single Clip, Export Video on, format MP4, codec H.264, 1920×1080, 30 fps, progressive, automatic keyframes, profile High if available, quality restricted to 20,000 Kb/s as a chosen starting value. Export Audio off, not merely a muted track. Advanced: no proxy, optimized-media or render-cache substitution; Data Levels Auto with verified output; Color Space Tag Rec.709 and Gamma Tag Gamma 2.4 if available. Record the exact encoder and options actually used.

If that codec is unavailable, use a supported native intermediate such as QuickTime DNxHR HQ, if offered, with the same raster/rate and no audio. Keep the Resolve-exported master. A separately documented FFmpeg transcode of that master for web playback is acceptable as a derivative, never as a substitute for a Resolve render. No codec or export is yet tested here.

For each recipe select its timeline, choose Entire Timeline and confirm the duration equals the recipe frame count. For the assembly confirm 1560 frames, 52 seconds, last visible frame 01:00:51:29. Add to Render Queue, then Render All. Queue submission is not completion: check every job and open the actual output. Render every recipe, not only the assembly. An export success does not prove visual fidelity.

Required acceptance before calling this complete

VERIFICATION.md separates preparation checks from missing application tests. The final release needs clean-library imports, non-flattened editable timelines, portable media and fonts, reusable exported/imported Fusion setups, twelve Resolve-rendered recipe examples and the silent 52-second assembly.

Compare exported playback and adjacent boundary frames with the cited source moments. Log source-measured values, implementation defaults, actual exported values, deliberate fixture differences and defects separately. Check no black frames, frame-count errors, content/mask drift, moving chrome, text changes, cropped evidence, duplicated pointers or audio streams. Fix defects and rerender.

Give a fresh-context editor/agent only this guide, the resulting exports and the documented workstation. Have them adapt context-detail to a new original 1920×1080 image with a different focus point, then masked-scroll to a new document and a 180-pixel scroll. They must retain at least 60 complete-result reading frames in each adapted recipe's final settled state—not in every transitional/context state—render a new 10–15-second sequence from Resolve, and record every human intervention. If they need missing context, fix the guide and repeat. That exercise is not run while Resolve access is absent.

Official documentation map

Links below use one-based PDF page numbers, matching the printed numbering in the inspected Resolve 21 manual. No claim is made about OpenAI's editing tool.

Helpers and dependencies

tools.py uses Python 3.11+ standard library only. Run it in a normal terminal, not the Resolve console. It checks frame math, marker references, file hashes and supplied playback numbers. It calls zero Resolve/Fusion APIs and does not control the application. build_assets.py optionally regenerates the PNGs with the bundled fonts and pinned Pillow version; it produces stills, not reference animations. Install its dependency in a virtual environment:

python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python build_assets.py

No external Python/Lua Resolve helper is promised until every API is checked against Developer/Scripting documentation shipped with the tested version. Do not substitute a web gist, assume Free accepts external scripting, or assume unattended rendering. Core construction remains UI-driven.

dependency-manifest.json inventories the download with hashes, licensing and explicit missing deliverables. Verify the supplied kit before editing it; changed assets should produce expected hash differences. No fonts or media are fetched at runtime. See LICENSE.txt and fonts/LICENSE.txt.

Reference frame

Enlarged reference frame

Watch this moment on the official channel ↗