# GPT-5.4 caret reset: public-safe Resolve construction kit

**One guide gap only. Native Resolve: UNVERIFIED, 0 renders.** No `.drp`,
`.dra`, Fusion setup, validated SVG import, new motion, or new mechanism credit
is supplied. The v05 Remotion recipe, its styling, and its two movies are
unchanged. This derivative changes distribution references and documentation,
not the treatment. The reported original-guide critic found no concrete defect
using66 native static frames: a tie, not a blind review. This is not native
execution or moving-quality verification, and the derivative is not published.

The source is *Interrupting and Adding Details in GPT-5.4 Thinking*, video
`qSHMlduU6Lw`, published March 5, 2026, native **[263,285)**. This is a quiet
empty-field state change, not typing: a caret returns for one frame, the hint
and plus replace together on the next frame, the caret stays absent for nine
frames, then returns at the same position. No pointer, selection, camera move,
keypress, submit, narration, or causal application behavior is established.

## What the kit provides

- [`recipe.json`](recipe.json): 16 ordered Resolve layers (canvas plus every
  original recipe layer), exact geometry, PNG preparation frames, trims,
  Inspector controls, crop limits, and blocked gates.
- [`timing.json`](timing.json): all 22 frames, rational CFR times, source frame
  identities, retained source PTS, and per-frame layer/state membership.
- [`original/project/`](original/project/): unchanged recipe, direct Content
  examples, five original renderer/support files, original SVGs, original
  content preflight, and license notices. This is a **source subset, not a
  separately installed complete Remotion runtime**.
- [`plate-prep.tsx`](plate-prep.tsx): an unrendered preparation entry that calls
  the original `FontGate` and `MotionLayer`. It isolates one whole-canvas static
  layer without changing its CSS, typography, path, palette, shadow, or position.
- [`controls.py`](controls.py): read-only CSV/JSON Inspector references, not a
  Resolve import format. [`test_recipe.py`](test_recipe.py) checks arithmetic,
  replacement exclusivity, layer coverage, crop, original bytes, and claims.
- [`bindings.json`](bindings.json) and [`RIGHTS.md`](RIGHTS.md): exact existing
  file/archive bindings, probe results, provenance, and license limits.

This construction uses **editable original code/SVG → separate static PNG
layers → native Resolve clip boundaries**. It deliberately does not substitute
Text+ font metrics or a hand-drawn icon for the existing renderer. It is not a
pure native-vector/Fusion rebuild. Resolve performs the temporal construction;
no source screenshot, existing movie, or four flattened whole-frame state
images are used as production inputs. Plate preparation is still unexecuted.

## Exact existing subset, not a new download

The following are real artifact URLs on the original Fieldnotes Pages site.
Their HTTP bodies were checked against the retained accepted artifacts; hashes
and the check timestamp are in `bindings.json`. Local source directories and
private logs are not distributed. This derivative has not been uploaded.

| Purpose | Existing exact artifact |
| --- | --- |
| Runtime/code ZIP | [core-publication-v08.zip](https://openai-film-fieldnotes-100.pages.dev/videos/editing/benchmark/library/downloads/core-publication-v08.zip) |
| Two original gradient SVGs | [gpt54-caret-reset/v05/inherited-assets-001.zip](https://openai-film-fieldnotes-100.pages.dev/videos/editing/benchmark/library/downloads/assets/gpt54-caret-reset/v05/inherited-assets-001.zip) |
| Actual recipe | [v05/recipes/gpt54-caret-reset.json](https://openai-film-fieldnotes-100.pages.dev/videos/editing/benchmark/library/project/revisions/gpt54-caret-reset/v05/recipes/gpt54-caret-reset.json) |
| Existing Original movie | [v05/original.mp4](https://openai-film-fieldnotes-100.pages.dev/videos/editing/benchmark/library/renders/gpt54-caret-reset/v05/original.mp4) |
| Existing Adaptation movie | [v05/adaptation.mp4](https://openai-film-fieldnotes-100.pages.dev/videos/editing/benchmark/library/renders/gpt54-caret-reset/v05/adaptation.mp4) |
| Audit-listed source preview | [v05/source-crop/source.mp4](https://openai-film-fieldnotes-100.pages.dev/videos/editing/benchmark/library/evidence/gpt54-caret-reset/v05/source-crop/source.mp4) |
| Native source geometry reference | [independent-review-05/source/native-window.mp4](https://openai-film-fieldnotes-100.pages.dev/videos/editing/benchmark/library/evidence/gpt54-caret-reset/independent-review-05/source/native-window.mp4) |
| Native source frame/PTS mapping | [independent-review-05/source/native-index.json](https://openai-film-fieldnotes-100.pages.dev/videos/editing/benchmark/library/evidence/gpt54-caret-reset/independent-review-05/source/native-index.json) |

The core member `project/recipes/gpt54-caret-reset.json` equals the selected v05
recipe byte-for-byte: SHA-256
`5678ece7f3d5d8a6ea6a1d9a6750cd5d7ee8d08a9db8d8831e74a0e7e7597077`.
Both SVG members and all included original code/examples are checked against
their existing ZIP members. The only normalized byte is a terminal newline on
the retained OFL text. No full-site copy or source-master download is needed.
The historical v05 toolkit manifest mentions older `core.zip`/addon names;
do not substitute them for this audit-selected pair.

**Crop trap:** actual probing shows the audit-listed `source-crop/source.mp4`
is **960×540, letterboxed**, despite its directory name. It is a presentation
preview, not a 900×280 measuring raster. The separately retained native source
window and both existing Remotion movies are **900×280**. Each of these four
files decodes to 22 frames at 30000/1001 and has no audio stream. Use the native
window for pixel geometry; do not stretch, crop-to-fill, or reverse-engineer
coordinates from the preview's black bars. No new master decode is claimed.

## Native clock and crop

Create a dedicated **900×280**, square-pixel, progressive timeline. Choose the
Resolve UI's **29.97** frame-rate option and verify the eventual file reports
**30000/1001**, not `30/1` or the decimal fraction `2997/100`. Disable automatic
timeline changes when adding media. Use non-drop-frame display and timeline
start **01:00:00:00**; timecode labels do not change the cadence.

```text
local frame n       = source frame - 263, n in [0,22)
frame duration      = 1001/30000 s = 0.0333666666667 s
duration            = 22*1001/30000 = 11011/15000 s = 0.7340666666667 s
nominal source span = [8.7754333333333, 9.5095) s
last included       = local21 / source284 / 01:00:00:21
exclusive end       = local22 / source285 / 01:00:00:22
```

The inherited source-container PTS start is **8.775000**, its exclusive end is
**9.509000**, and its individual steps are quantized to 33/34 ms. These are not
the nominal CFR arithmetic above. The retained map's maximum relative
source-PTS/CFR difference is **0.0007 s**; its 0.734-second interval is shorter
than the CFR duration by 1/15000 second. We re-probed the existing CFR movies,
not the master. Keep frame identity; do not duplicate/drop frames to chase PTS.

The original 1920×1080 source viewport is **[540,740,1440,1020)**, equivalently
`x=540, y=740, width=900, height=280`. Output is 1:1, not a responsive layout:
`sourceX = outputX + 540`, `sourceY = outputY + 740`. The complete output clips
to **[0,0,900,280)**. Do not crop individual plates to their drawing bounds:
transparent margins, stroke fringes and field shadow are part of registration.
The card is not a clipping mask for the other layers. No 16:9 enlargement,
overscan, hold extension, optical flow, frame blending, or motion blur is part
of this treatment. A differently shaped presentation needs a separate decision.

## Prepare separate still layers, not a motion prerender

**Blocked here: 0 preparatory PNGs rendered.** This section is an executable
preparation recipe for a separately authorized machine with the exact runtime
already available; it is not a report that preparation or native import worked.
No dependency installation/copy, font installation, or browser download was
performed for this task. If the runtime is missing, stop at that prerequisite.

1. Use a mutable, separately provisioned project from the exact existing core
   and caret asset ZIPs. Its dependencies must match the selected package:
   Remotion **4.0.520**, React/React DOM **19.2.8**, Node **22.18+**. Do not run
   in an immutable archive or published source directory. Place this kit as `project/caret/`
   using `apply_patch`, with no dependency copies. The parent runtime supplies
   module resolution. Its `public/` must contain the bound Geist font and both
   bound SVGs. This kit intentionally does not contain font binary bytes.
2. Run the original content preflight on each complete Content JSON, then the
   tests here. The additional luma checks are in `validate-content.mjs`; the
   plate's original `FontGate` separately checks actual loaded-font advances.
   Passing a character-count check alone does not establish text fit.
3. Use `plate-prep.tsx`, composition `CaretPlate`. For every table row below,
   pass `variant=original` or `adaptation`, its exact `layerId`, and render the
   indicated **Prep frame** as one PNG. Do not render the composition as a
   movie. `stage` is opaque; all other plates have transparent surroundings.
   Keep **900×280**, scale **1**, and the whole page, not content bounds.
4. Render **16 separate plates per variant**, 32 total. The wrapper uses the
   original layer at an included native frame; an inactive-frame request
   fails instead of silently exporting an empty plate. The two caret plates
   have identical geometry and ink. Text and plus state plates are separate.
5. Check every image for expected RGBA dimensions, alpha edges, font loading,
   fixed coordinates, and no unselected layer. Sum/composite the plates at
   locals 0, 6, 7, 16, and 21 before native work. If a transparent export has
   an opaque background, stop; do not key out white, redraw, or change styling.

Example **future** still command, run inside that provisioned `project/` with
the complete derivative folder renamed `caret/` beneath it. Use an existing
Chromium executable through `REMOTION_BROWSER_EXECUTABLE`; choose a fresh local
output directory through `OUT`. These are explicit caller-supplied settings,
not bundled paths or a request to download software. Create `OUT`'s
`preparatory-png/original/` directory first. This command was **not executed**:

```bash
test -x "$REMOTION_BROWSER_EXECUTABLE" &&
test -d "$OUT/preparatory-png/original" &&
./node_modules/.bin/remotion still caret/plate-prep.tsx CaretPlate \
  "$OUT/preparatory-png/original/single-frame-caret.png" \
  --frame=6 --props='{"variant":"original","layerId":"single-frame-caret"}' \
  --image-format=png --scale=1 --overwrite=false --bundle-cache=false \
  --public-dir=public --browser-executable="$REMOTION_BROWSER_EXECUTABLE"
```

For other layers, use the table's Prep frame and filename; use `adaptation` for
the second copy/palette. Configure a suitable writable temporary directory and
storage limit on the preparation machine. Run serially and use that machine's
encoder lock if FFmpeg is used. This is a preparation recipe, not a claim that
the stills, SVG import, native assembly, or output have been executed.

**No SVG-import promise:** both SVGs are ordinary original gradient inputs to
the original browser renderer. This guide imports the resulting separate PNGs
into Resolve. Direct SVG-to-Fusion import and manual/native Text+ reconstruction
are unverified alternative paths, not quiet substitutes for this construction.

## Native Resolve: tracks, trims, and state replacement

Import the prepared PNGs as individual still images, not one inferred image
sequence. Keep variant bins separate. Confirm image interpretation and full
RGB levels before compositing; verify straight alpha against a colored backing
and an opaque reference. Do not accept black fringes or washout as a palette
change. Record Resolve version, color-management mode and output transform.
Their visual equivalence is a native verification gate, not an assumed match
between browser sRGB and a Resolve project.

Use the Edit page. The bottom-to-top order below is the original recipe's paint
order. Filename stem is **exactly the layer ID** under
`preparatory-png/<variant>/`. All intervals are half-open local timeline frames.
Set duration in frames, not rounded seconds. Dragging to a track does not
automatically create the specified duration: trim each clip explicitly.

| Track | Layer ID / PNG stem | [In,Out) | Frames | Prep frame |
| --- | --- | --- | --- | --- |
| V1 | `stage` | [0,22) | 22 | 0 |
| V2 | `original-stage-band` | [0,22) | 22 | 0 |
| V3 | `persistent-field` | [0,22) | 22 | 0 |
| V4 | `first-hint` | [0,7) | 7 | 0 |
| V5 | `replacement-hint` | [7,22) | 15 | 7 |
| V6 | `single-frame-caret` | [6,7) | **1** | **6** |
| V7 | `returned-caret` | [16,22) | 6 | 16 |
| V8 | `plus-active` | [0,7) | 7 | 0 |
| V9 | `plus-muted` | [7,22) | 15 | 7 |
| V10 | `stationary-mode-icon` | [0,22) | 22 | 0 |
| V11 | `stationary-mode-label` | [0,22) | 22 | 0 |
| V12 | `stationary-mode-chevron` | [0,22) | 22 | 0 |
| V13 | `stationary-microphone` | [0,22) | 22 | 0 |
| V14 | `stationary-stop-well` | [0,22) | 22 | 0 |
| V15 | `stationary-stop-square` | [0,22) | 22 | 0 |
| V16 | `original-specimen-disclosure` | [0,22) | 22 | 0 |

For **every clip**, Inspector controls stay constant: Position X/Y **0/0**,
Zoom X/Y **1/1**, Anchor X/Y **0/0**, Rotation **0**, all four Crop values **0**,
Opacity **100%**, Composite mode **Normal**, Speed **100%**. Disable Dynamic
Zoom, stabilization, transitions and retiming effects. There are **no animated
transform, color, opacity, or Write On controls**. All coordinates below are
already baked into full-canvas plates; entering them again in Position would
double the offset. This avoids translating CSS baselines or SVG subpixels into
untested native geometry controls.

The original layer intervals, not fades, implement visibility. Native clip-local
frame 0 on V6 is **recipe6/source269**, while clip-local 0 on V7 is
**recipe16/source279**. V6's last included frame is also clip-local 0. Do not
shift either event to local 0 or extend the one-frame clip to two frames.
V4/V8 end at **01:00:00:07 exclusive**; V5/V9 begin at exactly that timecode.
V6 also ends there. Use overwrite placement without rippling other tracks.
Keep V6 empty before6/after7 and V7 empty before16; the union is the caret gate.

| Local frames | Source frames | Hint | Plus | Caret |
| --- | --- | --- | --- | --- |
| 0–5 | 263–268 | Before | Dark | Off |
| **6** | **269** | Before | Dark | **On for one frame** |
| **7–15** | **270–278** | After | Muted | **Off for nine frames** |
| **16–21** | **279–284** | After | Muted | **On, stationary** |

No ordinary periodic blink reproduces this table. At frame7 the whole hint and
whole plus state replace simultaneously while the caret disappears. The plus
gets lighter, **not smaller**. Neither hint reveals letters. The mode icon,
mode label, chevron, mic, stop well/square, field, disclosure, band, and stage
remain registered for all22 frames.

Equivalent control truth table, if an editor later elects a separately checked
Fusion implementation: before-hint/dark-plus Blend is 1 iff `0 <= n < 7`;
after-hint/muted-plus Blend is 1 iff `7 <= n < 22`; single-caret Blend is 1 iff
`n == 6`; returned-caret Blend is 1 iff `16 <= n < 22`. Use Boolean/step values,
never linear interpolation. Here `n = FusionTime - compositionStartFrame`, not
the project timecode or source frame number. This is a mathematical control
specification, **not tested Fusion expression syntax or a supplied graph**.

## Exact geometry and paint targets

These values come from the actual v05 recipe and SVG paths, not a generic
composer mockup. All coordinates are top-left output pixels. The original
`MotionLayer` uses border-box CSS, no type reveal, `white-space: pre`, and
unmodified SVG path defaults. Source geometry was fitted; the kit preserves
that fit rather than claiming recovered source vectors.

| Layer | Target already baked into the plate |
| --- | --- |
| Stage band | `(0,218)`, `900×62`, contain; exact original lagoon/clay SVG |
| Field | `(14,71)`, `871×117`, radius30; `$paper`, 1px `$border` |
| Before hint | `(39,92)`, `124×24`; Geist400, 18px, line-height1.25, left/top |
| After hint | `(39,92)`, `100×24`; same font/size/line-height/ink |
| Both carets | `(37,92)`, viewport`2×22`, filled path`M0 0H1.75V22H0Z`, `$caretInk` |
| Both pluses | `(38,147)`, `17×17`; `M8.5 0.5V16.5M0.5 8.5H16.5`, stroke1.4, no fill |
| Mode icon | `(78,144)`, `18×21`, stroke1.5, no fill; exact arc/path in recipe |
| Mode label | `(105,144)`, `69×25`; Geist400, 17.5px, line-height1.375, left/top |
| Chevron | `(178,152)`, `10×6`, stroke1.4; `M0.5 0.75L5 5.25L9.5 0.75` |
| Microphone | `(798,146)`, `14×19`, stroke1.4, no fill; exact cubic/path in recipe |
| Stop well | `(832,135)`, `41×41` ellipse, `$stopWell` |
| Stop square | `(846,149)`, `13×13`, radius1.5, `$controlInk` |
| Disclosure | `(148,197)`, `604×20`; Geist400, 14px, line-height1.25, centered/top |

Field shadows are exactly
`0 3px 6px rgba(0,0,0,0.06), 0 6px 64px rgba(0,0,0,0.035)`.
Do not convert them into an arbitrary native Drop Shadow or crop their spread
at the field edge. The 1.75px caret fill must not become an opaque 2px bar;
its fractional edge matters. Its source origin is `(577,832)`. Both plus paths
and all other controls retain their stroke widths and shapes across states.

The two unchanged band SVGs are not interchangeable with the source's warm
artwork. Lagoon uses endpoints `(0,0)→(1,0.65)` and stops `#68b8b0`,
`#b9d3a1` at0.48, `#98b9ce`; clay uses `(0,0.7)→(1,0)` and stops `#c2967a`,
`#dfc794` at0.5, `#b3b799`. These are SVG object-bounding-box gradient coordinates,
not a guessed screen-space angle. Reuse the original SVG bytes and their
rightsholder statements; do not redraw the gradient in Resolve by eye.

## Content replacement limits

Use the full original direct Content object, not a partial override or design
builder input. **Change fields only, never recipe tracks or shared code.** The
supplied examples are fixed and remain unchanged in this handoff:

| Slot | Original | Adaptation | Required limits |
| --- | --- | --- | --- |
| `placeholderBefore` | Start a note | Open a brief | 2–3 ASCII words; 5–16 chars; one line; 50–124px at18px Geist400 |
| `placeholderAfter` | Add detail | Refine it | 2–3 ASCII words; 5–13 chars; one line; 40–100px at18px Geist400; differs from before |
| `modeLabel` | Drafting | Working | 5–8 ASCII letters, one word/line; 45–69px at17.5px Geist400 |
| `disclosure` | Illustrated editor. Original content, not a product recording. | Original planning specimen. No live product behavior is represented. | 25–82 ASCII chars; one line; 250–604px at14px Geist400; identifies original/illustrated content truthfully |
| `stageArt` | lagoon.svg | clay.svg | Local original/permitted still band; 900×62 or proportional larger; 450:31; contain; no text, branding, UI, source pixels, or animation |

Hint regex: `^[A-Za-z]+(?: [A-Za-z]+){1,2}$`; mode: `^[A-Za-z]+$`;
disclosure: `^[A-Za-z0-9 .,:;()/-]+$`. Character counts include spaces. No
wrapping, shrinking, retracking, swapping fonts, moving the caret, responsive
re-layout, or replacing the hints with entered text. The field is still empty.
All image paths stay local under `public/` and carry truthful rights statements.

Palette slots and their existing values:

| Slot | Original | Adaptation |
| --- | --- | --- |
| stage | #fcfcfc | #fcfaf7 |
| paper | #ffffff | #fffdfa |
| border | #dedede | #ddd7ce |
| placeholderInk | #929292 | #92877d |
| caretInk | #686868 | #6d6056 |
| controlInk | #171717 | #342c26 |
| mutedPlus | #b9b9b9 | #bdb2a6 |
| modeInk | #337f83 | #997343 |
| stopWell | #ededed | #eee8df |
| footerInk | #717171 | #7b6f65 |

All ten colors must be opaque six-digit hex. The original preflight uses
`L = 0.2126R + 0.7152G + 0.0722B` on **0–255 encoded channels** (not linearized
WCAG luminance). It requires `L(paper)>240`, `L(stage)>240`, `L(controlInk)<85`,
and these strict differences:

```text
mutedPlus - controlInk > 100     paper - mutedPlus > 35
paper - caretInk > 110          placeholderInk - controlInk > 45
paper - placeholderInk > 65     stage - footerInk > 90
paper - border > 10             stopWell - controlInk > 130
paper - modeInk > 70
```

Those are the existing recipe's contrast contract, not recovered source
settings or proof of accessible/semantically truthful content. Source rights,
band meaning, disclosure truth and visual fit still need review.

For a future authorized new Content object, run the unchanged preflight, pass
that complete object as the plate wrapper's `content` prop, then regenerate
the affected plates for **both hint states** and every affected color slot.
The unchanged base validator alone is weaker than the recipe's contrast
preflight. Never change only the after hint in Resolve while leaving stale
input JSON or invent a third variant in this handoff. This construction does
not promise native Text+ editing: changing text means regenerating its plate.

## Verification and named differences

Run the supplied non-rendering checks from this folder:

```bash
python3 -B -m unittest -v test_recipe.py
node --experimental-strip-types original/project/examples/gpt54-caret-reset/validate-content.mjs --self-test
python3 -B controls.py --variant original
python3 -B controls.py --variant adaptation
python3 -B controls.py --frames
```

The original builder recorded88 decoded existing-video frames, of which66 were
native source/Original/Adaptation frames. A later, non-blind original-guide
critic reported no concrete defect from66 native static frames and recorded a
tie. Those observations are historical context, not tests rerun by this
derivative. No private frame images, local evidence paths, logs, or handoff
documents are packaged. The public native source window and existing movie
links above remain the geometry/state references.

This derivative runs offline arithmetic/layer/content tests from its extracted
archive and verifies public artifact bytes. It does **not** perform a new
moving-source review, native execution, preparatory PNG export, or source-quality
pass. `provenance.json` records the original guide and render hashes;
`CHANGES.md` distinguishes distribution edits from unchanged mechanics.

Named differences visible or disclosed in the existing material:

1. **Copy/disclosure:** the source hints are “Ask anything” and “Follow up” with
   “Thinking” and a ChatGPT disclaimer. Both renders deliberately use the
   original specimen copy above. Neither is live ChatGPT or Poe behavior.
2. **Typography:** the renders use licensed Geist400; the source font is not
   recovered. Hint/footer advances and glyph shapes differ. Do not fix this
   by changing font, size, tracking, crop, or the existing render.
3. **Accent and artwork:** the source's blue mode accent and warm orange/pink
   lower artwork are replaced by teal/lagoon or brown/clay. The adaptation also
   warms paper, text and control inks. These are explicit content variants.
4. **Fitted shapes:** the rounded field, CSS border/shadow, icon contours and
   fractional caret edge are fitted original-code geometry, not recovered
   source vectors. The thin caret/plus edges are especially sensitive to
   rasterization. The smaller light-plus threshold footprint is not a shrink.
5. **Spatial/clock scope:** the 900×280 crop omits the rest of the source scene;
   the audit preview adds a different letterboxed raster; the renderer uses
   rational CFR instead of irregular millisecond source PTS.
6. **Possible native round-trip differences, unmeasured:** PNG alpha handling,
   Resolve color transforms, pixel filtering, subpixel edges and H.264 chroma
   sampling may change pixels. These are verification risks, not observed
   Resolve defects or permission to alter the styling.

For native verification, step **every frame** and compare source identity and
state; scrutinize 5→6→7 and 15→16, not just beginning/end. Confirm 7 visible
caret frames total, a one-frame first appearance, no caret at7–15, both hint
and plus switching at7, and no persistent-control drift. Compare field/shadow,
thin strokes, text and lower art at 1:1 against each actual existing movie.
Then independently watch native outputs and references at 1×; stills and
decoding callbacks alone do not establish perceived motion quality.

Native export target: a silent progressive **900×280, 30000/1001, 22-frame**
MP4/H.264 comparison, with no end freeze or audio. If Deliver's Out is inclusive,
use local21, not local22. Verify its actual codec, pixel format, streams, frame
count and cadence with FFprobe; a decimal “29.97” UI label is insufficient.
Record the color settings, exact plate/input hashes, Resolve version, and both
native outputs before claiming equivalence. A preset that cannot export this
crop exactly is a blocker, not permission to upscale it.

## Remaining gates and distribution limits

This is a public-safe derivative, not another treatment. Preparation is still
unexecuted. Native Resolve import, alpha/color round-trip, both native renders,
visual equivalence, and1× moving review remain unverified. Direct SVG import is
also unverified and is not part of the prescribed PNG route. Native execution,
native renders, new moving-quality/source-quality passes, and new mechanism
credits all remain0. The original-guide critic's static tie does not close
these gates or count as a blind review of the derivative.

The original examples retain upstream relative provenance labels in their
unchanged recipe/README. Those labels describe historical research locations;
they are not extra runtime dependencies, packaged evidence, or promised public
URLs. For available artifacts use the verified public URLs in `bindings.json`.
Offline tests require only this extracted kit and Python; the original content
preflight additionally requires an existing Node22.18+ installation. Optional
reference-byte validation is documented in `README.md` and takes an explicit
local artifact root or explicit network opt-in. No test silently reads a
builder workspace or downloads a dependency.

Private handoff documents and logs are excluded. `RIGHTS.md` retains the
upstream license limits; public-safe packaging does not invent a new license
or authorize publication of source footage or native outputs. No upload,
deployment, other treatment, or final all-hands production is performed.

Technical method references: the official
[Remotion still CLI documentation](https://www.remotion.dev/docs/cli/still)
documents frame/props/PNG/scale controls; Blackmagic's
[Editor’s Guide to Resolve 18](https://documents.blackmagicdesign.com/UserManuals/DaVinci-Resolve-18-Editors-Guide.pdf)
and [Visual Effects Guide to Resolve 18](https://documents.blackmagicdesign.com/UserManuals/DaVinci-Resolve-18-Fusion-Visual-Effects.pdf)
describe project settings, timeline editing and Fusion concepts. These are
documentation references, not an installed-version assertion, evidence that
OpenAI used Resolve, or proof that this construction has run. Reconcile the
eventual installed app's controls before the native check.
