Candidate construction guide · native Resolve not tested
Prerequisite: Python 3.11+ for handoff.py and kit tests.
Three topic rows build, hold, then release
One editable treatment, two original SVG/code content variants. Authored2026-09-14. Concrete original SVG/code kit. Authoring-time mechanical checks only; parent production and independent source-first review are separate. No source-quality win or native Resolve execution claim.
Download and install
Start from the downloaded kit root. Required files are all of:
guide.jsonREADME.mdhandoff.pycontrols.csvoverlay-manifest.jsoncore-publication-v08.zipactive-assets.zip
Optional: test_kit.py is a self-contained source/preflight test. No authoring generator, private preparation script, worker directory, inspection PNG, source movie, or external helper document is required. The complete manual is this README plus the downloaded guide.json.
Core SHA-256: 307fb6b927e35e6d73779652873d994f5c3e36cb7deba65f22fa64748057a0de. Active overlay SHA-256: c2530f9c3fe2dfa93e052eaa0e4173fd9b42cebd46f2c80b881e42040c13c881.
The active overlay is mandatory. Core alone does not supply this recipe. Use a fresh directory; install core before the selected override. Do not substitute a historical assets-001.zip.
test ! -e project
unzip core-publication-v08.zip
unzip -o active-assets.zip
python3 handoff.py verify --guide guide.json --project project
python3 handoff.py frames --guide guide.json --project project > controls-regenerated.csv
cd project
npm ci
The commands above intentionally verify from the kit root before entering project/. npm ci is a reader/parent action, not an action performed by this source-only builder. Node22.18+ and Python3 are required; follow the accepted lockfile, not an upgraded dependency set.
Remotion: edit and run
The installed recipe is project/recipes/overlay-topic-stack-release.json with SHA-256 672244cd440381e59fb7b4244b01cd54d5009982594bc26d6e6a5b1fefa4c337. It embeds both defaults and adaptation. Edit full content through a new content JSON, not a partial override. The active SVG files stay editable as XML. To alter geometry or choreography, edit a working copy and regenerate its guide/pins before calling it verified.
From project/, inspect the actual contract and CLI, then run the selected variant:
node --experimental-strip-types scripts/catalog.mjs show overlay-topic-stack-release --contract
node --experimental-strip-types scripts/render.mjs --help
node --experimental-strip-types scripts/verify.mjs --help
node --experimental-strip-types scripts/render.mjs --recipe overlay-topic-stack-release --variant default --out out/overlay-topic-stack-release-default.mp4
node --experimental-strip-types scripts/render.mjs --recipe overlay-topic-stack-release --variant adaptation --out out/overlay-topic-stack-release-adaptation.mp4
node --experimental-strip-types scripts/verify.mjs out/overlay-topic-stack-release-default.mp4
node --experimental-strip-types scripts/verify.mjs out/overlay-topic-stack-release-adaptation.mp4
For custom content, create the file from the installed recipe, then edit that complete object. flag:wx deliberately refuses to overwrite an existing custom file:
node --input-type=module -e "import {readFileSync,mkdirSync,writeFileSync} from 'node:fs'; const recipe=JSON.parse(readFileSync('recipes/overlay-topic-stack-release.json','utf8')); mkdirSync('inputs',{recursive:true}); writeFileSync('inputs/overlay-topic-stack-release-custom.json',JSON.stringify(recipe.defaults,null,2)+'\n',{flag:'wx'});"
node --experimental-strip-types scripts/render.mjs --recipe overlay-topic-stack-release --content inputs/overlay-topic-stack-release-custom.json --out out/overlay-topic-stack-release-custom.mp4
Use --out, not --output; do not add --fps, --duration, or hold flags. Do not combine --content with --variant. Existing output paths are not overwritten. The archived script creates a sibling output manifest. Rendering and any resulting output review belong to the parent/reader, not this authoring receipt.
Optional, from the kit root:
python3 test_kit.py --project project
Exact source and clocks
Source: Scheduled Tasks, official source ID urXc4xxixVU. Published 2026-08-28 (timestamp 2026-08-28T13:51:45-07:00); metadata retrieved 2026-09-05T17:14:51+00:00. Full watch URL, official channel and metadata response SHA are pinned in guide.json → queueSelection.sourceMetadata.
Source half-open frames [419,495); target 76 native frames at 24000/1001. Retained excerpt context is [419,495) (76 frames); select excerpt [0,76). First/last selected unrebased excerpt PTS are 0 / 75075 at 1/24000.
Official metadata and master hashes are inherited from the pinned records, not newly fetched. Nominal frame/rate seconds are not recovered absolute master PTS. sourceClock keeps raw source-relative PTS where supplied, actual decoded excerpt clocks, inherited rounded samples, and the nominal composition rational distinct.
The retained excerpt already matches all76 target frames. No index trimming is needed.
Source research media are not active inputs and are not needed to render this kit. Retained context inspection is private evidence. This builder decoded and inspected all retained indices as static cells, with selected full-resolution stills; sheets are not moving review. See inspection.method for the exact viewed indices and resolution.
Original content and limits
| Field | Kind and limits | Default | Adaptation |
|---|---|---|---|
paper |
color | #ffffff |
#ffffff |
ink |
color | #ffffff |
#ffffff |
topicFirst |
text; 1–8 chars, 1 line | Gather |
Survey |
topicSecond |
text; 1–8 chars, 1 line | Shape |
Trace |
topicThird |
text; 6–8 chars, 1 line | Finish |
Publish |
contextArt |
image | art/overlay-topic-stack-release/context-default.svg |
art/overlay-topic-stack-release/context-adaptation.svg |
- The literal source uses live-action performance. Default replaces it with an original ceramics workbench; adaptation uses a cartographic workbench. Both are non-human vector still-lifes, a material substitution with no live-action motion claim.
- Default process: Gather / Shape / Finish. Adaptation: Survey / Trace / Publish. These are different original content workflows, not source words or two examples.
- Source gates observed near10/15/20 and63/66/69 inform chosen exact implementation gates.136px Geist650,142px row pitch, x116, parent offsets12/30/14px and smoothstep settling are authored approximations, not recovered film controls.
- The third prefix schedule preserves the observed6-character source progression through frame26; frame29 reveals the remaining characters up to the8-character cap, so longer permitted replacement words finish together. Full textbox width remains850 at every frame.
Active SVG hashes
| Installed path under public/ | SHA-256 |
|---|---|
art/overlay-topic-stack-release/context-adaptation.svg |
69dedf9ea67241e3caa026f51c7f6bb434d3ee9a495323f575318613d7cb2667 |
art/overlay-topic-stack-release/context-default.svg |
f15e1be6d42801acc5cf1a3e520ef279bc81ec4453417e5f6f07bec25eb745e8 |
The only active imagery is the selected SVG closure. The accepted core also supplies its licensed Geist font. Prior raster-backed partial guides and checkpoint media do not count as this SVG kit.
DaVinci Resolve / Fusion: manual construction
Application-unverified manual. No .drp, .dra, imported Fusion setup or native render is promised. Rebuild the hierarchy with native tools; the recipe and controls are numerical references, not a Resolve import format.
Set the exact clock
Create1920x1080 square-pixel composition,24000/1001 (23.976 label),76frames indexed0..75. Do not use24fps or add transition handles. Whole-source frame is419+f. Source-relative integer clock uses f*1001 ticks at24000; keep the provided actual PTS record separate from nominal calculations.
Build original context on V1
Use canvas-paper, then original-context as ordered Over merges. Reconstruct the selected context SVG from svgConstruction: wall gradient, angled light, dark workbench, tabletop, shelf, frame, contact shadow, and variant-specific objects. Preserve element IDs, exact paths/stops/opacities. Default has ceramic vessels; adaptation has map, roll, ruler and compass. No MediaIn of a source frame, person or laptop.
Make three editable text groups on V2–V4
For each topic-parent use transparent local domain850x170, then Text+ topic-text. Geist650 at136px, line height142.8px, tracking-2px, white, left aligned; row y549/691/833 and settled x116. Full-string850px box is constant. Calibrate Text+ Size/baseline against these pixel values; a Resolve font substitution is not accepted.
Gate and settle independent parents
Rows activate[10,63),[15,66),[20,69). Give each entire parent a held0/1 gate. Do not fade the backdrop or change row positions on release. Animate parent x128→116 over10..16;146→116 over15..22;130→116 over20..29, with left-key smoothstep. These offsets/easing are chosen values, not recovered official settings.
Type only the third row
Rows1/2 start as complete words. For row3 use held StyledText prefixes at20/22/23/24/26/29 with character counts1/2/3/4/5/8, clamped to content length. Do not animate textbox width or use a wipe that reveals half glyphs. Longer allowed words finish their remaining characters at29. This is an explicit content adaptation.
Hold, release, check
Common complete stack29..62. Cut row1 at63, row2 at66, row3 at69; no vertical reflow. V1 continues through75. Compare all checkpoint indices and native CSV values before parent movie review. Do not infer motion quality from this static/source-only inspection.
Coordinate, alpha and spline rules
- All keys are global zero-based recipe-local frames, not layer-relative time. Activation is half-open start<=f<end. A node outside its gate contributes transparent alpha. Gate and reveal controls are distinct from numeric CSV tracks.
- Use x-right/y-down local pixel coordinates. For zero rotation and origin(ox,oy), sx=scalescaleX, sy=scalescaleY; bx=x+ox-sxox, by=y+oy-syoy. Mapped point=(bx+sxinputX,by+syinputY). For a full-domain centered Fusion Pivot, CenterX=bx/domainWidth+sx/2, CenterY=1-by/domainHeight-sy/2. Use actual domain dimensions, not automatically1920. Positive CSS clockwise rotation would use negative Fusion Angle; these recipes do not rotate.
- Rectangle center=((x+w/2)/domainWidth,1-(y+h/2)/domainHeight), Width=w/domainWidth, Height=h/domainHeight. Rounded radius is specified in pixels; construct matching Bezier geometry rather than assuming a native radius slider is pixel-valued.
- Preserve the carousel4180x1080 strip and all offscreen material until translation and camera scale are applied. Do not flatten to a1920-wide intermediate before cards3/4 enter. Parent scale pivot is output pixel960,540, not strip center2090,540. The step guide gives the composed per-card pixel transform as a cross-check.
- Left-key hold persists strictly before the next key; the next key becomes active exactly at its frame. Smooth is uu(3-2*u), linear is u. Do not substitute Auto splines or the inherited helper cubic Bezier. Native values in controls.csv can be baked directly.
- Apply image blur before its white-veil Over merge and rounded-card alpha mask. Inset clip always affects alpha even when overflow is visible; rounded descendant clipping requires overflow:hidden. New-image masks are local to that card. Use transparent RGBA outside masks, not black or Screen blending. Group opacity applies once after child composition.
- Text uses bundled Geist, fixed full-string boxes, explicit newlines and held character prefixes. Calibrate Text+ font size and baseline in the actual application. SVG gradient appearance and blur units also require native validation; scalar agreement does not imply identical rasterization.
- No retiming, optical flow, transition handles, added terminal hold, synthesized audio or native Resolve execution is part of this handoff.
Complete layer and merge hierarchy
Each row names a local content tree, its parent and its ordered Over connection. guide.json.fusionNodes includes exact tool types, content, alpha, fitting and every static control. Rebuild SVG internals from guide.json.svgConstruction, retaining element IDs; those trees are part of the downloaded guide.
| Layer / kind | Parent | Active [in,out) | Foreground → background |
|---|---|---|---|
canvas-paper / rect |
canvas |
[0, 76] |
Processed_canvas-paper Over Background_Canvas → Merge_canvas-paper |
original-context / image |
canvas |
[0, 76] |
Processed_original-context Over Merge_canvas-paper → Merge_original-context |
topic-parent-1 / group |
canvas |
[10, 63] |
Processed_topic-parent-1 Over Merge_original-context → Merge_topic-parent-1 |
topic-text-1 / text |
topic-parent-1 |
[10, 63] |
Processed_topic-text-1 Over Transparent_topic-parent-1 → Merge_topic-text-1 |
topic-parent-2 / group |
canvas |
[15, 66] |
Processed_topic-parent-2 Over Merge_topic-parent-1 → Merge_topic-parent-2 |
topic-text-2 / text |
topic-parent-2 |
[15, 66] |
Processed_topic-text-2 Over Transparent_topic-parent-2 → Merge_topic-text-2 |
topic-parent-3 / group |
canvas |
[20, 69] |
Processed_topic-parent-3 Over Merge_topic-parent-2 → Merge_topic-parent-3 |
topic-text-3 / text |
topic-parent-3 |
[20, 69] |
Processed_topic-text-3 Over Transparent_topic-parent-3 → Merge_topic-text-3 |
Final Merge_topic-parent-3 → final viewport Crop → MediaOut1. Activation/reveal are discrete controls listed in the recipe and node tree; the CSV reports every numerical transform/mask sample.
Exact numerical controls
All values below are chosen adaptation controls, not measured OpenAI parameters. Key notation is frame:value easing; the easing belongs to the left key. Values after the final key hold. All times use the same global local frame clock.
| Layer | Property | Constant or native-frame keys |
|---|---|---|
canvas-paper |
x |
0 |
canvas-paper |
y |
0 |
canvas-paper |
width |
1920 |
canvas-paper |
height |
1080 |
original-context |
x |
0 |
original-context |
y |
0 |
original-context |
width |
1920 |
original-context |
height |
1080 |
topic-parent-1 |
x |
10:128 smooth; 16:116 hold |
topic-parent-1 |
y |
549 |
topic-parent-1 |
width |
850 |
topic-parent-1 |
height |
170 |
topic-text-1 |
x |
0 |
topic-text-1 |
y |
0 |
topic-text-1 |
width |
850 |
topic-text-1 |
height |
170 |
topic-parent-2 |
x |
15:146 smooth; 22:116 hold |
topic-parent-2 |
y |
691 |
topic-parent-2 |
width |
850 |
topic-parent-2 |
height |
170 |
topic-text-2 |
x |
0 |
topic-text-2 |
y |
0 |
topic-text-2 |
width |
850 |
topic-text-2 |
height |
170 |
topic-parent-3 |
x |
20:130 smooth; 29:116 hold |
topic-parent-3 |
y |
833 |
topic-parent-3 |
width |
850 |
topic-parent-3 |
height |
170 |
topic-text-3 |
x |
0 |
topic-text-3 |
y |
0 |
topic-text-3 |
width |
850 |
topic-text-3 |
height |
170 |
Checkpoints and regression tests
| Local / source frame | Expected authored state |
|---|---|
| 0 / 419 | Original vector context only. |
| 9 / 428 | Last clean lead frame. |
| 10 / 429 | First whole word appears; parent x128, textbox850. |
| 14 / 433 | First word settling; no second row. |
| 15 / 434 | Second whole word appears at parent x146. |
| 16 / 435 | First parent settled x116. |
| 19 / 438 | Third row still absent. |
| 20 / 439 | Third row appears with one character; parent x130. |
| 22 / 441 | Two third-row characters; second parent settled. |
| 23 / 442 | Three third-row characters. |
| 24 / 443 | Four third-row characters. |
| 26 / 445 | Five third-row characters. |
| 28 / 447 | Five-character hold persists. |
| 29 / 448 | All content through cap8 visible; third parent settled. |
| 32 / 451 | Complete stack, fixed row baselines. |
| 40 / 459 | Common reading hold. |
| 48 / 467 | All glyphs remain intact; no hidden letter masks. |
| 56 / 475 | All rows held; context unchanged. |
| 62 / 481 | Last complete stack frame. |
| 63 / 482 | Top row absent; lower rows do not reflow. |
| 64 / 483 | Only rows2 and3. |
| 65 / 484 | Last row2 frame. |
| 66 / 485 | Only row3. |
| 68 / 487 | Last row3 frame. |
| 69 / 488 | All words absent. |
| 75 / 494 | Last clean context frame; no extra hold. |
handoff.py verify checks pinned recipe/source/assets and native/quarter-frame control agreement. handoff.py frames regenerates the native CSV. Optional test_kit.py checks exact overlay membership, full core file pins, real default/adaptation/custom prepareInput and binding, CLI options, discrete gates, mask ownership, native timing and public download completeness. These are source/preflight checks, not image/motion acceptance.
The loaded-font scalar check uses the actual archived gate and includes full replacement strings even while they are unrevealed. Overlay Text boxes remain850px wide at every frame; parent motion handles settling. The carousel has no text layers, so a no-text font-gate success adds no typography evidence.
Remaining gaps
- Replacing a continuously moving live-action presenter/room with original non-human vector context loses the performance, photographic depth, and exact contrast modulation. Text gates are source-index observations; font, exact bounds and easing are chosen implementation values, not official measurements.
- All source-quality status remains unresolved; no motion win, blind comparison, source-master inspection or native Resolve execution.
- No composition render, encode, npm installation or dependency copy was performed by this builder. Parent production is separate.
- Every retained index was viewed in a static480x270 cell; only the explicitly listed frames were additionally viewed at native excerpt resolution. This is not a moving review.
- Nominal cadence is inherited and explicit; absolute master PTS remain unknown. Carousel raw source clock is absent and excerpt PTS are not a substitute.
- This is one treatment per kit; two content variants and historical resolving states are not extra examples.
- A full-string text cap does not guarantee fit for every glyph combination. The actual font gate must run; no automatic shrinking is allowed.
Parent rendering and a separate source-first/output critique remain necessary. Native Fusion alpha, fonts, masks, blur and timing still require execution in Resolve.