Candidate construction guide · native Resolve not tested
Composer context reveal: Resolve / Remotion guide
Biggest gap: the retained result panel skips the source's short bottom-edge settle over local 92–108. Reproducing these controls does not repair that mismatch.
Post-review customization warning: the query caret uses fixed x positions. Changing the query can place it inside the text even when the new text passes general box-fit validation. The custom-Content command below is not a verified arbitrary-query workflow. Keep the supplied query while studying other controls, or derive and verify every caret position from the actual loaded-font prefix width before exporting changed query text. The supplied default itself retains excess prefix spacing; neither this warning nor the guide repairs that output.
This extends an existing illustrated example. It is not a new unique mechanism, accepted render, packaged kit, or native Resolve validation. Original and Adaptation are both Remotion outputs; neither is the OpenAI source.
Source and clock
Introducing ChatGPT Atlas, source frames [253,390) at 30/1 fps,
1920×1080: 137 native frames, local 0–136. Nominal source seconds are
8.433333…–13; duration is 137/30 seconds. These are arithmetic conversions of
retained frame bounds, not newly measured PTS or timings. guide.json retains
the complete recipe source object and byte hash; its localMedia is provenance,
not a required runtime input or a claim that the full master remains accessible.
Library-relative evidence is evidence/atlas-composer-context-reveal/review01/;
the two actual movies are under renders/atlas-composer-context-reveal/review01/.
The comparison metadata maps 95 retained PNG frames per variant, not all137.
Look up frameHashes[variant] by localFrame, then use archive.member;
the sparse PNG filename number is not the frame number. Native archive members,
existing contact sheets, actual movie hashes and decoded stream properties
ground this guide. Selected stills were inspected, not continuous moving footage.
Every exact control value below and in the mapping is a retained implementation value, not a newly measured source value. Earlier source-present-by summaries do not override the revised recipe: results begin at local92.
Fusion construction
- Create a silent 1920×1080, 30/1 composition with local frames0–136. Set the local clock deliberately if the timeline begins at another frame. Keep the
ILLUSTRATED UI · NOT POEdisclosure. - Build
outer-desktopbeneathanchored-camera; mergedisclosure-backanddisclosureafter that camera, in frame space. Inside the camera followfusionNodessibling order: browser plane/edge, spatial chrome, mark, input/results, symbols. Do not animate the desktop or disclosure with the camera. - Register
anchored-camerato pixel pivot[960.5,534]. Preserve every x/y/scale key, including scale1.429732868757259 at8, 1.0801393728222997 at9 and1 at34. Its keys use hold interpolation; do not smooth the8→9 reset or replace its measured-frame fit with a generic zoom. - Put
spatial-browser-chromeat[211,39], with a1498×97 local clipping box. The chrome artwork is1500×96. Merge structure, three traffic controls, translating2800×96 white feather and early contour in that order. Keep the controls' opacity tracks independent. The feather is an occluding SVG gradient, not a whole-browser opacity fade or Gaussian blur. - Rebuild the input shell at[530,503,861,62], with31px radius. At92 replace it with the full joined-results shell and all five rows together; do not animate a height wipe. The retained shell is already at its final height, which is the documented source discrepancy, not an instruction to claim a match.
- Couple
typed-query,first-result-queryandquery-caret: counts2/3/4/5/6 at92/109/112/131/134. Switch the four lower result rows at112, rotate the submit arrow to45 degrees at121, and swap both input/result badges at122. Do not infer these illustrated results from real product behavior. - Keep SVG artwork as separate editable vector branches and text as separate Text+ branches. Confirm native-size vector registration before any camera transform. An SVG import/rebuild route must be checked in the installed Resolve version; this guide does not promise a Loader can ingest arbitrary SVGs. Use masked Background shapes for shells and separate shadow branches where needed.
- End after136 with an explicit cut. Additional still holds or new text are editorial adaptations. Do not silently fix the source discrepancies by changing the pinned recipe or importing source-film screenshots.
Coordinates, cuts, crop and easing
The recipe uses parent-local top-left pixels, positive y downward. For a layer
without rotation, a local point maps to its parent as
position + origin + scaleXY * (point - origin). Apply this recursively; do not
add the camera twice. If using full-frame Fusion branches, convert a resulting
pixel point to normalized coordinates only after establishing the branch domain
and axis convention. Verify two landmarks; a CSS left/top is not a Fusion Center.
src/timing.ts uses the left key's easing: hold until the exact right key,
linear interpolation, or progress² * (3 - 2 * progress) for smooth. Preserve
these semantics rather than selecting an arbitrary spline preset. Start/end
gates are inclusive/exclusive and children share the same local clock; they do
not restart when their parent becomes visible.
Keep the chrome crop local to its group before the anchored transform. The final canvas crops off-frame content. CSS radius, SVG feather, outline alpha and shadow strings are not numerically interchangeable with Fusion softness or corner controls; compare them at native scale. No extra motion blur is specified for this camera. Do not add it across the discontinuous reset.
Checkpoints
- 0: Large input and mark; no query, result rows or submit control.
- 8: Last pre-reset scale; centered composer identity retained.
- 9: Immediate smaller composer, not a dissolve.
- 34: Camera reaches scale1 and input shell settles at the implementation box.
- 37: Early chrome controls remain too faint in the inherited review.
- 73: Spatial chrome/feather progression, not a uniform opacity change.
- 91: Still no result panel, typed query or submit control.
- 92: Complete five-row panel and two query characters; missing panel-bottom settle remains open.
- 109: Three query characters and matching first result/caret.
- 112: Four characters and all four lower suggestions refresh together.
- 121: Submit arrow changes to45 degrees.
- 122: Input and first-row local-index badges appear together.
- 134: Six characters and matched caret position.
- 136: Last native state; preserve the established context.
Executable references
svgAssets pins each image-layer SVG referenced by defaults or adaptation from
the hash-checked accepted asset ZIP; per-SVG verification must compare the whole
referenced-asset map against these pins, not merely report current file hashes.
From the shared dual-toolkit root, with FIELDNOTES_PROJECT set to an already
prepared project containing these recipe/SVG assets:
python3 handoff.py verify --guide guides/interface/atlas-composer-context-reveal/guide.json --project "$FIELDNOTES_PROJECT"
python3 handoff.py frames --guide guides/interface/atlas-composer-context-reveal/guide.json --project "$FIELDNOTES_PROJECT" > atlas-composer-context-reveal-controls.csv
The CSV contains raw local implementation controls and ancestor-aware activity,
not world coordinates, glyph shapes, gradients, decoded PTS or a Resolve render.
fusionNodes gives the complete ordered hierarchy; tracks binds each numeric
control to a recipe JSON pointer and a semantic operation. Static path/paint/font
properties remain at each node's recipe pointer; discreteEvents covers gates
and text reveal steps. This is an operational map, not a Resolve API schema.
From an already provisioned writable toolkit project/, these archived CLI
forms are useful for a later authorized render; no such render ran here:
npm --silent run catalog -- show atlas-composer-context-reveal --contract
npm run render -- --recipe atlas-composer-context-reveal --variant default --out out/composer-original-v01.mp4
npm run render -- --recipe atlas-composer-context-reveal --variant adaptation --out out/composer-adaptation-v01.mp4
npm run verify -- --out out/composer-original-v01.mp4
npm run verify -- --out out/composer-adaptation-v01.mp4
Use the full Content object in examples/atlas-composer-context-reveal/default.json
for custom inputs; --content inputs/composer/content.json replaces --variant.
Keep assets public-relative, retain rights declarations, and choose new filenames.
The project needs its pinned dependencies, Node22.18+, FFmpeg/FFprobe, bundled
Geist and an existing Chromium. REMOTION_BROWSER_EXECUTABLE selects a local
browser; no download/install is part of this guide-authoring pass. The retained
project projection lacks public SVGs: the original files are in the named asset
ZIP. A recipe-only projection is insufficient for handoff.py verify.
Source versus adaptation and remaining limits
- Retained review01 reports AC-01, omitted92–108 panel-bottom settle, and AC-03, early navigation/caption too faint around37 and46–48. Both remain minor, partially resolved findings. The guide does not accept them.
- Original marks, text, colors, desktop geometry and disclosure deliberately differ from the film. Never insert source branding or demo data to close an optical finding; never describe this illustration as authentic Poe UI.
- Chrome alpha/feather progression, font optics and caret widths remain fits. No geometry solver handles arbitrary browser plates or reflow; new query text must keep caret/result semantics and pass loaded-font checks.
- Source contacts/headless playback had limitations. Selected still/byte checks are not a new moving review. No new timing measurements, native Resolve run, fresh render, package validation or deployment is claimed.
- The source comparison is research-only. All-hands use still requires real Poe behavior checks, the recording-derived storyboard review, and separate playback timing calibration.