Candidate construction guide · native Resolve not tested
Mode selection to a quiet activity dot
Unrendered dual-tool candidate. This worker made no new render, movie encode, deployment or native Resolve run. Completion credit, moving-source blind wins and native Resolve proofs are all 0. Independent source-first critique is pending the parent's source-only freeze and subsequent output inspection. Do not give a source-first critic this builder-informed guide before that freeze.
Source binding and inspection
Source: You can just use your voice | ChatGPT Work, https://www.youtube.com/watch?v=ceBruD6v5Bk.
Native source interval [90,210),
120 frames at 30/1 fps, 4.000000 seconds.
Source-frame/rate arithmetic gives nominal interval
[3.000000,7.000000) seconds;
these values are not independently measured decoder PTS.
Retained excerpt SHA-256: 3af39b374b72e2e921fdcdd5d764a9b79173f66e0b5c4d1a9111bf7bb90287db.
Source master SHA-256 (inherited, not rehashed): d75296d6561d87dcda171c5a8cfe68c330ad8f4bacfe78f51e8933f84c82f1b8.
Active recipe SHA-256: 7884dfcb2d81262da3a792ac96ab1a95b377300933c3ba2958347c6bf35f20d0.
The actual retained excerpt was rehashed and all 120 consecutive frames were
decoded and viewed as ordered 240x135 stills. This is static inspection, not
moving viewing. Voice additionally has sixteen 480x270 still inspections listed
in source-inspection.json. The builder read the queue's prior observations;
neither this guide nor its source notes are a blind critic report. No whole-film
inspection is claimed. Historical source paths are provenance, not prerequisites
or editable assets. Source movies are deliberately absent from the kit.
Biggest remaining adaptation gap: The original control labels/glyphs and authored composer withdrawal are a visual approximation. The dot geometry is fitted from half-resolution stills, not recovered easing or an audio algorithm; temporal feel and native Fusion shadow/Text+ matches await real renders.
Public kit and installation
Use a fresh directory containing core-publication-v08.zip, active-assets.zip,
guide.json, README.md, handoff.py, controls.csv, overlay-manifest.json,
provenance.json, source-inspection.json, test_guide.py, and
verify_runtime.mjs. validation-results.json records builder tests, not a
runtime prerequisite. The parent supplies the pinned core alongside this kit;
it is not copied into each candidate's source directory.
Python 3.11+, Node 22.18+, npm and unzip suffice for installation and mechanical
checks. Rendering later also needs FFmpeg/FFprobe and an existing supported
Chromium. REMOTION_BROWSER_EXECUTABLE can select that browser. No command below
depends on a private script, source movie, unpublished asset archive, repository
checkout, prewritten missing input file or a restored historical project.
Both ZIPs begin at project/. Extract core first, overlay second at the kit
root, not inside another project/. The overlay replaces the selected recipe
and installs all active SVGs and both input variants. Reversing this order would
restore the legacy video/raster fields in the two inherited recipes.
set -eu
test ! -e project
python3 -c "import hashlib,pathlib; assert hashlib.sha256(pathlib.Path('core-publication-v08.zip').read_bytes()).hexdigest() == '307fb6b927e35e6d73779652873d994f5c3e36cb7deba65f22fa64748057a0de', 'Core checksum mismatch'"
python3 -c "import hashlib,pathlib; assert hashlib.sha256(pathlib.Path('active-assets.zip').read_bytes()).hexdigest() == '48b5a9d9be2cc22755f8bd83744001aeef39a70e365446ff69d0441b81e59905', 'Overlay checksum mismatch'"
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
cmp controls.csv controls-regenerated.csv
PYTHONDONTWRITEBYTECODE=1 python3 test_guide.py
node verify_runtime.mjs --project project
(cd project && npm ci)
The core's other recipe definitions and old examples/ files are not this
adapter's active inputs. Use only the selected recipe variants or the new
project/inputs/voice-toggle-to-orb/ files. Do not run full-library asset tests with
only this selected SVG whitelist installed. The builder did not run npm ci;
schema and timing checks use the hash-pinned public core TypeScript without
installing or copying node_modules.
Render later, under the owner's authority
These commands are provided for the parent/recipient. They were not run by this worker. Both examples are silent and use the source cadence without holds.
cd project
npm run render -- --recipe voice-toggle-to-orb --variant default --out out/voice-toggle-to-orb-default.mp4
npm run render -- --recipe voice-toggle-to-orb --variant adaptation --out out/voice-toggle-to-orb-adaptation.mp4
For a custom edit, copy the supplied input file to an unused local filename, edit only declared content fields, then use that file:
cp inputs/voice-toggle-to-orb/adaptation.json inputs/voice-toggle-to-orb/custom.json
npm run render -- --recipe voice-toggle-to-orb --content inputs/voice-toggle-to-orb/custom.json --out out/voice-toggle-to-orb-custom.mp4
Inspect the manifest emitted beside each later render. It must bind the active
recipe, code, complete content and used SVG bytes, with the exact rational fps,
120 frames, 1920x1080 and no audio. A prior video or stale manifest cannot
verify changed inputs. verify_runtime.mjs does not load Chromium or measure
the actual browser font. Remotion's loaded-Geist FontGate must pass before any
render can qualify for visual review. Never silently shrink replacement copy.
This adapter
The source contains three hard state changes and an overlap: statement to toggle at10, toggle to enlarged composer at39, activation feedback at58, and dot entry at81 before the composer branch ends84. The dot moves downward before pulsing. Its name is historical; there is no colored orb inside this interval.
project/inputs/voice-toggle-to-orb/default.json and adaptation.json are complete
Content objects, not a separate design DSL. They change original copy/art while
keeping event count, gate frames and native duration. guide.json includes the
whole field contract, both inputs, every layer, every parent connection, local
domain, path/viewBox, mask, gate, text reveal and animated control.
Resolve / Fusion construction
This is a native construction specification, not a tested .drp or .setting.
Use the supplied SVG source as editable geometry, not Loader images of flattened
frames. Keep node branches for independently animated objects and Text+ for
runtime copy. fusionNodes provides a complete back-to-front Merge graph with
exact parent IDs and recipe pointers; controls.csv supplies native integer-frame
numeric controls. They are not an automatic Fusion import.
-
Create 1920x1080 at 30/1, local [0,120), source [90,210), silent on white. Preserve the opening statement tail [0,10); this four-second excerpt is not only the toggle.
-
Build opening-statement as centered Geist100/600 in box(230,477,1460,112), [0,10). Use original supplied wording. At10 cut to mode-control; do not dissolve the words into the control.
-
Construct mode-control at (440,430), 1040x220. mode-track has radius110 and neutral fill; selection-thumb is 502x190 at y15 with radius96 and a2px border. Animate only the thumb x using all supplied keys20..32. Labels remain centered in their fixed 405px boxes. This is a sliding selection, not a stepped label swap.
-
At39 disable the entire mode-control and enable composer-exit. Its 2220x1240 domain starts at(-420,-280), pivot(2220,0); the left and top extend offscreen. Build the rounded shell, label, speaker, microphone, activation circle, bars and close path as separate branches in the documented order. Do not resize the full composer to fit onscreen.
-
Use supplied original microphone/speaker SVG paths, not source glyph images. The activation circle is 342x342 at(1790,814). Four individual rounded rect bars live inside voice-bars at(1884,920). At58 hard-disable voice-bars and composer-label, then enable speaker-feedback and close-action. Do not crossfade the voice bars into the X.
-
Keep activation-pointer canvas-local above composer-exit. It holds until57, descends on58..60, then hard-disables at61. Its fill is black and outline white; its oversized entry is deliberate because this shot is a tight crop.
-
Animate composer-exit y and scale independently about its upper-right origin, following the local-frame table. The parent scale affects all chrome, not the dot. Keep its final sliver through83, then hard-disable at84. These are authored fit tracks, not recovered source springs.
-
Build quiet-activity-dot as its own Ellipse/Background branch above the composer. Start81; source171. Its x,y,width,height each have one key per frame81..119. The center first descends then settles near the lower canvas while its diameter varies. Preserve the small overlap with departing chrome; do not delay the dot until84.
-
Use the same near-black ink for the button and dot. The later colored voice orb is outside [90,210), despite this historical recipe id. No sound, transcript, synthesized speech, audio-reactive link or continuous transition from the X into the dot is part of this recipe.
-
Swap default Write/Speak/Field Studio specimen for adaptation Notes/Listen/River Lab with its own statement. Geometry and event gates stay fixed. The labels describe an original motion specimen, not verified Poe product behavior.
-
Compare 9/10,38/39,57/58,60/61,80/81 and83/84 first. Review the thumb glide, composer withdrawal and dot settling at normal speed later. Boundaries were inspected as ordered stills; source-quality eligibility and native Resolve playback remain unproven.
Coordinate, text and compositing calibration
Recipe positions use a top-left, downward-positive parent pixel domain. All
tracks use the same local frame number even inside groups. For box width/height
w,h, origin ox,oy, and sampled properties, use this local mapping:
M = T(x+ox, y+oy) * R_CSS(rotation) * S(scale*scaleX, scale*scaleY) * T(-ox,-oy)
world = M_parent * M_child * ... * localPoint
Fusion point for domain W,H: (worldX/W, 1-worldY/H)
unrotated/unscaled center: ((x+w/2)/W, 1-(y+h/2)/H)
unrotated/unscaled pivot: ((x+ox)/W, 1-(y+oy)/H)
The last two formulas are calibration cases, not replacements for the matrix under a transformed parent. Test a known asymmetric corner to establish Fusion's rotation sign and normalized pivot. Missing width/height inherit the containing domain; missing origin is (0,0). Never assume image center. Preserve overflow until the explicitly declared mask or the final canvas; pad group domains when needed rather than clipping children to their nominal width/height.
Keys use left-key easing: linear by default, smooth=t*t*(3-2*t), hold until
the right key and then take its exact value. Clamp outside keys. Gates are Step
at start and end; Resolve's displayed inclusive end is 119. Do not add
end-frame 120. Sampled one-frame path states and numeric rows must not gain
automatic Bezier smoothing or retiming. These are implementation controls, not
source-time PTS or a recovered physical model.
SVG path viewBoxes stretch independently into the declared path layer width and height; image SVGs preserve their supplied aspect/fit. Import compound paths, gradient stops and outlined monoline glyphs, not just a screenshot of the SVG. CSS shape borders are inside the border box; path strokes are centered on their curves. Match eight-digit color alpha, premultiplication and node alpha once. Parent opacity applies after child compositing. Blur/shadow radii are not numerically portable between CSS and Fusion and require a rendered fit.
Core public/fonts/Geist.ttf and its OFL license supply runtime text. Geist is
a declared substitute, not a recovered source font. Align Text+ to actual glyph
bounds within each prescribed box, including tracking, weight, line height,
right/center alignment and complete-word reveal. A raw Fusion Size parameter
or matching character count does not establish the same baseline or fit.
Native checkpoints
| Local frame | Source frame | Check |
|---|---|---|
| 0 | 90 | Original centered statement. |
| 9 | 99 | Final statement frame. |
| 10 | 100 | Hard cut to segmented mode control. |
| 20 | 110 | Thumb still at the first selection. |
| 23 | 113 | Thumb crossing; both labels remain stationary. |
| 32 | 122 | Second mode settled. |
| 38 | 128 | Final mode-control frame. |
| 39 | 129 | Hard cut to enlarged composer/button/pointer. |
| 57 | 147 | Last voice-bars state. |
| 58 | 148 | Voice bars become close; speaker appears; composer label disappears. |
| 60 | 150 | Pointer is leaving the lower edge. |
| 61 | 151 | Pointer off; composer remains. |
| 68 | 158 | Composer starts withdrawing. |
| 75 | 165 | Composer reduced and descending. |
| 80 | 170 | No dot yet; tiny composer sliver. |
| 81 | 171 | Dot enters while a lower composer sliver can remain. |
| 84 | 174 | Composer hard-disabled; dot only. |
| 94 | 184 | Dot has settled near its lower position. |
| 104 | 194 | Larger dot pulse, still monochrome. |
| 112 | 202 | Smaller pulse. |
| 119 | 209 | Final active dot frame, no added freeze. |
Verification and unresolved eligibility
test_guide.py checks hashes, SVG-only closure, exact overlay members, both
inputs, the full node hierarchy, every exported native control, source bounds,
specific gates and rejected invalid inputs. verify_runtime.mjs loads the pinned
v08 validators and sampler to check both variants and every CSV row. These tests
do not render, establish font/blur equivalence, or prove native Resolve behavior.
Fresh critics must inspect the actual future default/adaptation outputs after their source-first freeze, checking motion, holds, layers, typography, density, overlap and boundary frames. Their findings must bind output and recipe hashes. Keep this candidate outside completed counts until those checks resolve its material gaps. Final all-hands production and talking-head synchronization are not authorized by these standalone motion specimens.
Exact project overlay manifest
overlay-manifest.json is the machine-readable byte/size ledger. No runtime
source, dependencies, fonts, source media or unrelated recipe is overlaid.
Active ZIP SHA-256: 48b5a9d9be2cc22755f8bd83744001aeef39a70e365446ff69d0441b81e59905.
project/inputs/voice-toggle-to-orb/adaptation.json—91e0a580dbeb2bb16fe64f225ee7008883a39361b86a4d9accd4d12e674e6c14project/inputs/voice-toggle-to-orb/default.json—4d68b3a3e1afa2b5812b55e60c9956582e2b53c713a265997dfcd5572810cf93project/public/art/voice-toggle-to-orb/microphone.svg—d532dae6f22e95c6683f8608615f4a6712e7e6ed54e63a68c56387acafb351d1project/public/art/voice-toggle-to-orb/speaker.svg—9f56a5603be15fe1b47937c714c318dd1bf0a8e5fd9faddf9d8370ebdaf94f82project/recipes/voice-toggle-to-orb.json—7884dfcb2d81262da3a792ac96ab1a95b377300933c3ba2958347c6bf35f20d0