Candidate construction guide · native Resolve not tested
Allocate a pane before revealing the result
Source-bound original SVG/code kit: editable Remotion recipe, two built-in
content variants, and a complete manual DaVinci Resolve/Fusion node handoff.
This is a candidate, not source-fidelity acceptance or a tested native .setting.
No animation was rendered by this worker. Parent exports, if made later, require
their own output hashes, moving comparison and review; authoring checks do not
describe the current state of the parent's render queue.
Run from the public download
The kit root contains README.md, guide.json, handoff.py, controls.csv,
core-publication-v08.zip and active-assets.zip. Only the new recipe and
active original SVGs belong in the override archive. Both variants are embedded
in the recipe. No inputs/, generator, private worker, source-media ZIP or
repository checkout is required. Do not restore historical benchmark folders.
Use Python 3.11+ and unzip for the handoff; rendering additionally needs Node
22.18+, npm, FFmpeg/FFprobe and an installed Chromium executable. Set
REMOTION_BROWSER_EXECUTABLE if Chromium is not discoverable on PATH. Preserve
core's README, package lock, public/fonts/Geist.ttf and public/fonts/OFL.txt.
The renderer does not fetch source media or download a browser.
From a fresh kit root, unpack core first:
unzip core-publication-v08.zip -d .
unzip -l active-assets.zip
The supplied overlay manifest uses project/-prefixed archive members; apply it
at kit root:
unzip -o active-assets.zip -d .
test -f project/recipes/split-result-pane-allocation.json
python3 handoff.py verify --guide guide.json --project project
python3 handoff.py frames --guide guide.json --project project > controls-regenerated.csv
If a distributor instead uses project-relative recipes/ and public/ members,
unpack that archive with unzip -o active-assets.zip -d project instead of
-d .. Never create project/project/, and never unpack both ways. Inspect paths
before extraction. An archive with source video/raster media is not this kit.
handoff.py verifies recipe/SVG hashes, source identity and numeric tracks. It
does not execute Fusion, shape text, compare pixels or certify source fidelity.
The bundled controls.csv is a native-frame numeric table, not a Fusion import.
You may stop here for the manual Resolve construction; npm is not needed for it.
For Remotion, run the actual archived CLI from project/:
cd project
npm ci
node --experimental-strip-types scripts/render.mjs --recipe split-result-pane-allocation --variant default --out out/split-result-pane-allocation-default.mp4
node --experimental-strip-types scripts/render.mjs --recipe split-result-pane-allocation --variant adaptation --out out/split-result-pane-allocation-adaptation.mp4
node --experimental-strip-types scripts/verify.mjs out/split-result-pane-allocation-default.mp4
node --experimental-strip-types scripts/verify.mjs out/split-result-pane-allocation-adaptation.mp4
Use new --out names on reruns; the renderer refuses an existing movie or
adjacent manifest. Retain each .manifest.json. These instructions were checked
against the archived scripts, not executed as exports by the author.
For custom content, copy recipe defaults or adaptation into your own JSON,
then use --content your-content.json instead of --variant. Keep every
field, SVG dimensions and rights statement. No helper script is needed.
Source and clock
Film: Build and share interactive prototypes in Codex — retained publication date 2026-06-04. Metadata agrees with the pinned queue; this is not a current online channel verification.
- Native unit: [1530,1680), 30/1 fps, 150 frames.
- Nominal source interval: 51.000000–56.000000 s; these are ordinal/rate values, not decoder PTS.
- Available excerpt: [1530, 1680], 960×540. Recipe canvas: 1280×720.
- Mapping:
sourceFrame = 1530 + localFrame;excerptFrame = localFrame + 0. Composition starts at local 0, never at the film ordinal. source.sha256pins the retained derivative excerpt, not the absent/full master.source.localMediais research metadata, not an active input.- Excerpt SHA-256:
df647f4a66dae03df4e860feeea006bd2c092a3b313fa631eb927be1183e3dfa.
The available excerpt and unit start together; no leading trim is needed for this clock.
All source frames were decoded and opened in static native-cadence order: 150 frames for this excerpt, at 480×270 thumbnail resolution, plus selected native 960×540 stills. Static all-frame inspection is not moving review and does not establish exact easing, subpixel onset, source fonts or a camera model. A separate fresh critic received the original clips' frame sheets and original implementations before any candidate files. Its source-first findings are incorporated in the differences below; it did not approve candidate footage.
Choreography
Local 0–17: wide request. Local 18–30: request width 800→300; preview width 0→500; 26px gutter and common right edge are preserved. This is chosen geometric allocation, not source CSS recovery.
Local 30–63: fully allocated blank preview. Local 64: result branch starts at alpha .12 and 14px below its final location; by 76 alpha is 1 and the rise is complete.
Local 64–149: an independent parent scale 1→1.035 reframes the entire window. This is a creative control: the source-first critic could not verify the inherited outer-camera claim.
Inherited Collapse / Icon / SplitResult implementations are timing and
structure scaffolds, not recovered OpenAI specifications. Recipe observations
separate visible source states from chosen output controls. The two variants are
one candidate, not two distinct treatments.
Resolve/Fusion construction
- Make a Fusion Composition at 1280×720, square pixels, 30/1 fps, local range 0–149 inclusive. If the application starts the comp at a nonzero frame, subtract that start for CSV lookups. Disable motion blur and automatic retiming; use no optical flow.
- Build
RootPaper, then everyfusionNodesentry inguide.jsonrecursively. Each sibling array is back-to-front and gives exact background/foreground connections, named transform chain, parent, active interval and full static controls. A group assembles its children before its own transform and alpha. - For each image node, select its default/adaptation asset and instantiate the
corresponding
svgSubgraphsdefinition: every original rectangle, circle, polygon, fill, alpha and Merge connection is enumerated. Build editable vector masks and Backgrounds; do not load a rendered source screenshot. Multiple uses of an SVG retain independent layer transforms and namespaced nodes. - Live text uses core's Geist. Install the provided font locally for Text+, retain its OFL notice, and match the listed pixel box, line height, tracking, weight and baseline. Do not substitute source-brand fonts or assume Text+ Size equals CSS pixels. Inspect both variants for actual shaping and fit.
- Apply each node's local mask, AnchorShift, ScaleRotate, Position, then alpha
gate. Geometry dimensions precede transforms; they are not a second scale.
End-frame gates are stepped and exclusive. All descendants sample the same
localFrame; never subtract their own start. Keep hero phase instances mutually exclusive and text reveal counts stepped. - Populate numeric controls from the recipe's exact key arrays or CSV per-frame
samples.
tracksmaps every present numeric property to a recipe pointer;staticControlsincludes non-track geometry, fonts, fills, viewBox and gates. No extra easing: linear is linear, smooth ist*t*(3-2*t), hold stays at the left value until the exact right key. Values clamp outside their key range. - Crop only the final padded composite to the output canvas; send to
MediaOut. Compare every checkpoint and both content variants before accepting a Fusion export. This manual handoff has not been executed in native Resolve.
Coordinate convention and overscan
Recipe coordinates are pixels, top-left origin, +X right, +Y down. Width/height
are local untransformed geometry; group dimensions do not clip overflow-visible
children. Recipe origin defaults to [0,0], not the element center.
Use the padded working domain in fusionSetup.workingDomain: 4096×4096,
with design (0,0) at padded pixel [1024, 1024]. This preserves
negative/off-canvas card positions until parent collapse brings them into view.
Every internal branch uses this same domain; the final crop selects the canvas
rectangle beginning at that padded origin. Never clip each branch to 1920×1080
before assembly. Local rounded masks still clip at their declared boundaries.
For domain (Dw,Dh), padding (Px,Py), normalize a design point as
((x+Px)/Dw, 1-(y+Py)/Dh). Rectangle widths/heights normalize by Dw/Dh.
For a layer with translation t=(x,y) and origin o, the exact design-space map is
p_parent = t + o + R_clockwise(rotation) * scale * (p_local-o).
Compose this through all ancestors; CSV is local, not flattened world space.
To avoid ambiguous Pivot edits, keep each Transform Pivot at (0.5,0.5) and use
three explicit nodes. Let c=(Dw/2-Px,Dh/2-Py) be the domain center in design
pixels. AnchorShift translates by c-o, ScaleRotate applies Size=scale
and Angle=-rotation around the domain center, Position translates by
t+o-c. A translation (dx,dy) means Center=(.5+dx/Dw,.5-dy/Dh). With identity
scale/rotation the first and last translations cancel to (x,y). Check this
identity and an off-center rotated point before wiring animated branches.
Use the native Fusion Transform node, not the Edit-page Transform effect.
For image layout, map each SVG viewBox into the local layer box using contain:
s=min(width/viewBoxWidth,height/viewBoxHeight) and centered letterbox offsets;
then apply the layer chain. CSS shape borders sit inside the box. SVG primitives
here have no strokes or text. Apply group alpha after merging, or overlaps will
darken incorrectly. Antialiasing, rounded corners and type baselines remain
native-application comparison items rather than asserted pixel parity.
Key controls
The complete table is controls.csv (99 numeric controls;
8 animated). The following highlights do not replace the full hierarchy:
| Layer.property | Keys | Numeric min → max | Exact recipe pointer |
|---|---|---|---|
outer-camera.scale |
3 | 1 → 1.035 | /layers/1/scale |
request-pane.width |
3 | 300 → 800 | /layers/1/children/5/width |
request-paper.width |
3 | 300 → 800 | /layers/1/children/5/children/0/width |
preview-pane.x |
2 | 638 → 1138 | /layers/1/children/6/x |
preview-pane.width |
2 | 0 → 500 | /layers/1/children/6/width |
preview-paper.width |
2 | 0 → 500 | /layers/1/children/6/children/0/width |
result-content.y |
2 | 20 → 34 | /layers/1/children/6/children/1/y |
result-content.opacity |
2 | 0.12 → 1 | /layers/1/children/6/children/1/opacity |
Checkpoints
| Local | Source | Available excerpt | Nominal source seconds | Expected original-kit state |
|---|---|---|---|---|
| 0 | 1530 | 0 | 51.000000 | Wide continuous request, no preview. |
| 18 | 1548 | 18 | 51.600000 | Allocation starts; zero-width preview stays invisible. |
| 24 | 1554 | 24 | 51.800000 | Request and preview widths remain linked without overlap. |
| 30 | 1560 | 30 | 52.000000 | Blank preview fully allocated. |
| 63 | 1593 | 63 | 53.100000 | Still no result content. |
| 64 | 1594 | 64 | 53.133333 | First softly visible result, not application latency. |
| 76 | 1606 | 76 | 53.533333 | Result fully opaque and at rest; footer appears. |
| 119 | 1649 | 119 | 54.966667 | Result held while independent parent framing evolves. |
| 149 | 1679 | 149 | 55.966667 | Final bounded frame at scale 1.035. |
Editable substitutions and differences
- Default and adaptation replace both copy and geometric artworks/identity, not source film frames. Every active SVG is geometric and self-contained.
- Edit recipe fields within their declared limits. Text count limits are not proof of font fit; the archived renderer measures loaded Geist and rejects overflow rather than silently shrinking. Shorten text or reauthor geometry.
- If recipe or SVG bytes change, re-pin
recipeSha256/svgAssets, regenerate controls, and repeat review. A failed hash check is not permission to bypass it. - Largest source difference: Source content arrives more abruptly and its later pane-width excursion is omitted. Request text is a chosen fixed-width column rather than recovered browser reflow; the optional-style outer zoom is authored, not measured.
- No moving source/candidate comparison, fidelity acceptance, whole-film review, native Resolve verification or separate content-variant render is credited to this authoring pass. Parent rendering and independent review are separate.
Packaging and optional historical audit
The active override contains 9 files, 41282 bytes:
one recipe plus 8 original SVGs. No inputs, generators,
font copies, source movies, raster art or dependencies belong in that archive.
Core SHA-256: 307fb6b927e35e6d73779652873d994f5c3e36cb7deba65f22fa64748057a0de.
Recipe SHA-256: 8206882976dfd0a131a5143255be746b8b80c0687a882041eeb3d5c859d7cc13.
overlay-manifest.json pins each local source file, project-relative destination
and recommended project/ archive member. The parent creates the ZIP; this
worker did not invent a ZIP hash or encode exports.
If present, provenance.json records the exact queue record, archived source
code members and accepted core hashes. They are historical audit inputs, not
downloads needed by an end user. Source references remain research-only.
Repository-only optional regression command:
PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s benchmarks/motion-atom-loop/expansion-200/dual-toolkit-200/guides/constructive/split-result-pane-allocation -p 'test_*.py' -v
Run that only from the source checkout with retained audit inputs available.
Public users should use the standalone kit-root handoff.py commands instead.