Candidate construction guide · native Resolve not tested
Historical builder snapshot: 2026-09-15. Earlier README and handoff statements about being unrendered or unpublished describe that authoring stage. The current selected report verifies both content exports at 2026-09-15T03:21:33.990593+00:00; those earlier statements do not describe their current availability. Native Resolve execution and source-quality approval remain unverified.
Gallery To Device
r02 placement repair
Start with REPAIR.md. This is an unrendered builder correction, not a replacement source-quality approval. The installation commands below apply to the revised active-assets.zip, recipe.json, guide.json and controls.csv; their current hashes are in the guide and overlay manifest. The retained source clock, artwork, core and content are unchanged.
The additional files test_guide.py, verify_runtime.mjs, original-recipe.json and original-controls.csv provide a focused placement regression and unchanged-input comparison. After installing the core and overlay, run python3 test_guide.py. It executes the installed core's actual sampler and validation for both contents. test_kit.py remains the original21-test verifier and also runs the actual archived no-render preparation helpers. Neither command encodes video. REPAIR.json binds this correction to its original recipe and sealed review.
The historical source inspection and allocation documents below retain their original scope. They do not inspect or certify this correction. core-members.json inventories only the unchanged core ZIP; overlay-manifest.json inventories only the current active-assets ZIP. Neither certifies any outer kit ZIP. Parent-generated start/readme bindings and render-verification documents are separate from this builder's full-kit bytes.
Only the six Y tracks named in REPAIR.md differ, and only their native integer samples54–99 change. Their samples are baked with linear interpolation between native frames. Use the current guide's tracks, resolveNodes and byte-exact CSV for reconstruction, not old intermediate-position prose. Final frame100 and the entire remaining ending are unchanged. No subframe, motion-blur, text-raster, moving-source or Resolve execution equivalence is claimed.
Original construction contract
Original editable reference-study kit. Unrendered, not quality-approved. This is one of four source/novelty-eligible queue-wave04 relationships; this lane supplies two kits. Two content sets are one example. No accepted count, moving-source win, native Resolve result, or live Poe feature is implied.
Files and installation
Required portable files are guide.json, README.md, handoff.py, controls.csv, overlay-manifest.json, core-publication-v08.zip, and active-assets.zip. The independent verifier is test_kit.py. This kit also includes recipe.json, source-packet.json, source-clock.json, inspection.json, allocation-provenance.json, and core-members.json. Editable SVGs are inside active-assets.zip and install under project/public/art/gallery-to-device/; an authoring-only assets/ directory is optional. There are no private runtime prerequisites. Keep the top-level documents when packaging.
The accepted core is pinned to SHA-256 307fb6b927e35e6d73779652873d994f5c3e36cb7deba65f22fa64748057a0de. Use only that core. Do not restore deleted repository runtime trees. The overlay adds only project/recipes/gallery-to-device.json and project/public/art/gallery-to-device/*.svg; every regular member is pinned in overlay-manifest.json.
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 > actual-controls.csv
cmp controls.csv actual-controls.csv
python3 test_kit.py --project project --scratch .
Python 3.11+ and Node 22.18+ are required for those checks. The tests run archived validation/preparation helpers, not rendering. controls.csv is byte-exact UTF-8 ASCII-compatible CRLF, including its final line terminator. Preserve raw subprocess stdout; do not use universal-newline conversion or spreadsheet re-export. Its numeric values and decimal seconds are implementation controls, not source PTS or measured source motion.
Source clock and inspection
Retained source frames are [1410, 1545), at 30/1, giving 135 local frames and 9/2 seconds. Local zero maps to source frame 1410. Start-inclusive/end-exclusive bounds, the retained average-like study rate, all rounded retained PTS, and their limitations are copied unchanged into source-clock.json and the source-only packet. The source master SHA is inherited, not freshly rehashed. The available excerpt is 960×540; the retained master header says 1920×1080. The original master is unavailable.
inspection.json binds the source-first frozen observations and decode receipt. All 135 excerpt frames were displayed as 320×180 static thumbnails. One native-resolution excerpt still was individually inspected (45). Decoding every excerpt frame is not watching the original at native resolution or continuous speed. No moving playback, audio, full-film review or fresh integer source PTS is credited. Local visibility changes informed the authoring breakpoints; geometry, curves, tile routes and pose handling remain implementation choices.
allocation-provenance.json binds the parent allocation, critic decisions, allocation-time r09 publication and separate r09 delta audit. R10 was published while this builder was working on September 15, 2026; exact r09 archived bytes are used for the unchanged allocation pins, and the observed r10 state is recorded separately. This builder does not extend the r09 delta audit to r10 or grant new eligibility. The frozen queue's old r08 PUBLICATION pin remains failed. The additive receipt does not waive or repair that test. Kit tests passing do not relabel upstream frozen checks as green.
Native-frame choreography
| Local interval, half-open | Action |
|---|---|
| 0–2 | Opening original artwork. |
| 2–45 | Fifteen original image layers consolidate. The positions and curves are authored, not recovered tile paths. |
| 45–54 | Establish the library around the same collection. Do not replace it with a screenshot. |
| 54–100 | Notes and study samples build above the collection as it moves lower. |
| 100–135 | Keep the library and collection registered. The phone bottom remains outside the canvas. |
Resolve construction
Create one 1920×1080 Fusion composition on V1, at exactly 30 fps, duration 135 frames. Display timeline origin 01:00:00:00 is optional; it is not source time. No audio, retime, dissolve, extra handles, or added final hold. This is a construction guide, not an importable .setting file or a tested native Resolve project.
Each table entry maps to Source_<layerId> → Transform_<layerId> → Merge_<layerId>. A rect uses a colored Background through a Rectangle mask; recreate corner radii numerically. A text layer uses Text+ with the accepted core's public/fonts/Geist.ttf; use its literal slot value, font size, weight and line-height in guide.json. Do not shrink long text. An image uses the editable SVG subtree described next, not a PNG/video Loader. For a group, build and merge its children in listed order, then transform the combined group exactly once. Later siblings are above earlier siblings. Gate each node by both its own and all ancestor half-open ranges. Merge the final canvas stack into MediaOut1.
| Layer / node suffix | Parent | Construction kind | Local active interval |
|---|---|---|---|
paper |
canvas |
rect | 0–135 |
opening-artwork |
canvas |
image | 0–2 |
device-shadow |
canvas |
rect | 45–135 |
device-surface |
canvas |
image | 45–135 |
retained-collection |
canvas |
group | 2–135 |
collection-image-00 |
retained-collection |
image | 2–135 |
collection-image-01 |
retained-collection |
image | 2–135 |
collection-image-02 |
retained-collection |
image | 2–135 |
collection-image-03 |
retained-collection |
image | 2–135 |
collection-image-04 |
retained-collection |
image | 2–135 |
collection-image-05 |
retained-collection |
image | 2–135 |
collection-image-06 |
retained-collection |
image | 2–135 |
collection-image-07 |
retained-collection |
image | 2–135 |
collection-image-08 |
retained-collection |
image | 2–135 |
collection-image-09 |
retained-collection |
image | 2–135 |
collection-image-10 |
retained-collection |
image | 2–135 |
collection-image-11 |
retained-collection |
image | 2–135 |
collection-image-12 |
retained-collection |
image | 2–135 |
collection-image-13 |
retained-collection |
image | 2–135 |
collection-image-14 |
retained-collection |
image | 2–135 |
library-interface |
canvas |
group | 45–135 |
earpiece |
library-interface |
rect | 45–135 |
menu-line-one |
library-interface |
rect | 45–135 |
menu-line-two |
library-interface |
rect | 45–135 |
album-title |
library-interface |
text | 45–135 |
library-heading |
library-interface |
text | 45–135 |
notes-title |
library-interface |
text | 60–135 |
styles-title |
library-interface |
text | 76–135 |
note-row-0 |
library-interface |
group | 54–135 |
note-image-0 |
note-row-0 |
image | 54–135 |
note-copy-0 |
note-row-0 |
text | 54–135 |
note-row-1 |
library-interface |
group | 59–135 |
note-image-1 |
note-row-1 |
image | 59–135 |
note-copy-1 |
note-row-1 |
text | 59–135 |
note-row-2 |
library-interface |
group | 64–135 |
note-image-2 |
note-row-2 |
image | 64–135 |
note-copy-2 |
note-row-2 |
text | 64–135 |
style-sample-0 |
library-interface |
image | 74–135 |
style-sample-1 |
library-interface |
image | 74–135 |
style-sample-2 |
library-interface |
image | 74–135 |
style-sample-3 |
library-interface |
image | 74–135 |
guide.json.resolveNodes carries all source/transform/merge names, child order, origin, paint, text and numeric tracks. tracks gives raw keyframes. controls.csv gives every explicit property on every local frame, including inactive rows. active=0 means skip that layer, not show it at zero opacity by accident. Every track uses the global local frame, not time since that node's start.
For coordinates in a parent of W×H pixels, the recipe rule is p_parent=(x,y)+origin+R_clockwise(rotation)*diag(scale*scaleX,scale*scaleY)*(p_local-origin). Map final parent pixels to Fusion (x/W,1-y/H). Width/height define the local domain and are not extra translation. A nested composition keeps its own domain before its group transform; do not normalize all children directly against 1920×1080. For retained-collection, assemble its 1200×2000 local domain, retain pixels outside it unless clipped by the final canvas, then apply its scale and translation once. For the pose cohort and joined strip, preserve negative/off-domain positions until the final canvas crop. No group in this recipe adds a local clip.
Left-key interpolation is exact: hold keeps the left value until the right key, linear uses u, smooth uses u*u*(3-2*u). Never use Auto or substitute a spring. For unambiguous reproduction, bake implementationValue at every integer frame and use linear interpolation between those baked samples. Calibrate Fusion's rotation sign before using any new rotated content. Group opacity is applied after merging children. Use premultiplied transparent Normal Over. The gallery's small outer device shadow is a soft-mask approximation in Resolve; it requires native calibration and is not claimed pixel-equivalent.
Editable SVG subtrees
guide.json.svgConstruction contains the complete parsed element/attribute hierarchy for every shipped SVG, and svgAssets pins its bytes. Preserve each SVG's viewBox domain. Convert rectangles to rectangle masks over Background nodes, circles to ellipse masks, and paths to closed filled Bezier/Polygon masks (open stroked paths to Paint strokes). Keep SVG node order, per-node opacity, stroke widths, joins and transforms. A path's Q quadratic segment from P0 via Q to P1 converts to cubic controls P0+2/3*(Q-P0) and P1+2/3*(Q-P1); preserve cubic C controls directly. Expand shorthand H/V/T coordinates before entering points. Apply SVG translate/scale groups locally before the outer recipe transform. No opaque prerender or automatic image segmentation is needed. SVG title nodes are metadata, not on-screen type.
Illustrations deliberately stand in for photographic material. Do not pretend a vector mask reconstructs the source's people, skin, lens, lighting or generative process. These native Resolve nodes, text metrics, strokes, alpha and shadow have not been run in Resolve; parent/native review must calibrate them and retain any differences.
Adaptation and custom content
Default is a sky-conservatory collection with balloons, moths, terrariums, telescopes and greenhouses. Adaptation is a harbor-workshop collection with boats, ceramic fish, lanterns, woven panels and waterfront buildings. These are original drawings, not source output artwork. Each of art00 through art14 must keep its identity before and inside the phone. The single retained-collection group is the continuity object; small note/style thumbnails reuse these slots. To substitute art, edit the SVG geometry or replace each 400×400 SVG with another original, editable, self-contained illustration. Keep phoneSurface at 510×1100 and the declared image dimensions/rights accurate. Do not swap the library to an unrelated composite.
Create a complete custom content map from installed defaults; a patch object is not accepted. From the extracted project:
cd project
node --input-type=module -e "import {readFileSync,mkdirSync,writeFileSync} from 'node:fs'; const recipe=JSON.parse(readFileSync('recipes/gallery-to-device.json','utf8')); mkdirSync('inputs',{recursive:true}); writeFileSync('inputs/gallery-to-device-custom.json',JSON.stringify(recipe.defaults,null,2)+'\n',{flag:'wx'});"
Edit documented slots in that JSON. Set accurate local SVG path, dimensions and rights. Keep its location inside project/inputs/. Missing/extra fields, remote/escaping paths, unsupported aspect ratios, blank rights and non-SVG imagery fail. Built-in default/adaptation change content without changing timing. SVG authorship is declared and structurally inspected, not a legal-rights certification. Custom semantic identity is the editor's responsibility; a mechanical content validator cannot recognize subjects.
Parent rendering and assembly
No render or encode was run in this builder lane. The parent owns the one encoder, combined runtime and any acceptance/publication/count changes. For a combined project, extract the accepted core once and apply both disjoint active-assets overlays. Never overwrite a changed shared engine with an unpinned runtime. Run each kit's own verifier against that combined project before rendering. The parent can install the core's locked dependencies and run its unchanged documented CLI:
cd project
npm ci
node --experimental-strip-types scripts/catalog.mjs show gallery-to-device --contract
node --experimental-strip-types scripts/render.mjs --recipe gallery-to-device --variant default --out out/gallery-to-device-default.mp4
node --experimental-strip-types scripts/render.mjs --recipe gallery-to-device --variant adaptation --out out/gallery-to-device-adaptation.mp4
node --experimental-strip-types scripts/render.mjs --recipe gallery-to-device --content inputs/gallery-to-device-custom.json --out out/gallery-to-device-custom.mp4
node --experimental-strip-types scripts/verify.mjs out/gallery-to-device-default.mp4
node --experimental-strip-types scripts/verify.mjs out/gallery-to-device-adaptation.mp4
node --experimental-strip-types scripts/verify.mjs out/gallery-to-device-custom.mp4
Those are parent instructions, not builder-executed commands. Compare native 30/1 outputs with the pinned source excerpt at local zero; preserve silence and each video/manifest pair. Inspect all joins, subject continuity, crop, holds and text at normal speed. Verify the browser's actual full-string FontGate before crediting text fit. Do not infer a quality win from preflight or encoding. Source quality, native Resolve execution and moving comparison remain separate gates.
Biggest remaining gap
Exact per-tile source correspondence and travel are not recovered. This adaptation keeps fifteen explicit image identities continuously, but its vector drawings, authored compaction and simplified library do not establish the source's image richness or moving finish. Normal-speed source/candidate review is still required.
No talking-head recording is paired here. These are library reference studies, not an approved presentation or live feature demonstration.