# Leave the editor through an action, dim and viewer handoff **Draft manual construction guide. Moving-source fidelity and native Resolve execution remain unverified.** Two original content variants form one example. ## Source and composition Official film `jC0i_0wnly8`, selected native interval [3000,3300), 60/1 fps. Use a silent 1920×1080 square-pixel composition containing local frames 0–299. Exact duration: 300/60 seconds (5.000000 s). Source ordinal = 3000 + local frame. No frame-rate rounding, extra opening pause, closing hold or narration belongs to this study. The comparison is a retained, hash-bound 960×540 research excerpt. Preserved native metadata and PTS ledgers bind its clock; the historical full master is absent, so this is not a fresh full-master decode. Samples informed the build. Intermediate paths and measured-looking coordinates below are authored reconstruction controls, not official product timing, latency or design tokens. ## Setup and common coordinate rules Verify the unmodified kit with `python3 verify_package.py`, then follow `project/README.md`. Choose either input JSON content set. Install the bundled licensed Geist font for Text+, and calibrate pixels, weight, tracking and baselines against the supplied MP4; a font name alone does not guarantee parity. Regenerate `docs/controls.csv` with `node --experimental-strip-types scripts/controls.mjs`. Each row includes the local frame, source ordinal and exact sampled controls. Fusion global frame = composition start + CSV frame. Coordinates here use pixels from top-left, Y down. For a point in normalized Fusion image coordinates, X=pixelX/1920 and Y=1−pixelY/1080; convert top-left rectangles through their centers. Check the installed tool's coordinate direction instead of assuming CSS and Fusion match. Parent transforms apply after local transforms. A uniform pivoted transform is pivot + scale×(point−pivot), followed by the stated translation. Convert angles to your tool's convention. CSS rotations are clockwise in this Y-down space. Continuous controls use the CSV per-frame values, not an unspecified default spline. Held gates, text prefixes, colors and row indexes use stepped keys. Smoothstep is t²(3−2t), with t clamped to [0,1]; linear progress is clamped t. Rectangle masks need pixel-correct width and height; normalized X/Y values are not interchangeable on a non-square raster. Match opacity, clipping and layer order before attempting a moving comparison. ## Editor pullback, action push and viewer cut Create the original editor as editable layers: a dark window at (32,20), 1856×1000, a portrait preview panel at window-local (608,50), 610×745, the landscape study at panel-local (0,190), 610×344, and a bottom filmstrip at window-local (22,814), 1810×123. The footer tool strip sits at window-local (400,937), 888×63. Keep the Create affordance at the right of that strip. The original landscape is vector artwork: layered hills, sun and an articulated small traveller. `src/Scene.tsx` contains its complete SVG geometry in a 960×540 coordinate system. Rebuild those filled/stroked paths with Fusion shapes or individual SVG layers. There is no licensed source robot/movie input. The filmstrip is repeated original geometry, not recovered timeline thumbnails. ### Camera and action - Apply the later push first: pivot (1230,984), uniform `pushScale`, then screen translation (`pushX`,`pushY`). Put the result inside an early camera group scaled by `introScale` around (960,540). That early scale falls 1.2→1 over 0–36, then holds. These nested transform orders are not interchangeable. - The original pointer moves (950,840)→(1230,984) over 30–60, then holds over the action region. This is an authored path, not a measured click coordinate. - The action push runs 110–168: scale 1→1.9, X 0→−270, Y 0→−100. Use the CSV per-frame values. `cameraBlur` is a 0→5→0-pixel Gaussian approximation, not reconstructed shutter/motion blur; calibrate Fusion's blur units. - At 218, set editorDim to .47 with a held key. Merge a black overlay inside the editor, then the spinner at window-local (893,507), size 54. Rotate its incomplete circle by `spinnerAngle`. Do not interpolate the dim gate. - At 278, hard-switch `outputMode` to a separate dark CLIP VIEWER. Keep the viewer's header, title and lower playback controls; the source does not become a clean, chrome-free movie. Stop showing the old editor. ### Moving result The viewer is at (40,24), 1840×1032. Its landscape viewport is viewer-local (220,130), 1400×788; fit the 960×540 geometry with a centered cover crop. Use `viewerScale` 1.18→1 and `viewerX` −160→0 over 278–299, with the local pivot (960,540). The footer stays part of this reframing viewer. For the traveller, let phase=`walkPhase` radians and stride=28×sin(phase) degrees. The body group translates to (480+22×sin(phase/2), 337−6×abs(sin(phase))) in landscape pixels. Rotate the two leg paths by stride and −stride around that group origin. Rotate arms by −.65×stride around (−41,−43) and +.65×stride around (41,−43). Other body parts remain with the body transform. The shadow X follows the body's X. The editor preview holds phase zero; only the viewer advances phase. Stop after 299, with no invented completion banner, export confirmation or further action. This preserves an editor→action→dim→viewer structure. Exact product chrome, source imagery, optical blur, pointer behavior and camera tracking differ. The short original animated subject is not a recreation of the source film. ## Verification boundary Inspect both actual exports at their native cadence, including entry/exit, hard gates, layering, width, masks and holds. Shipped code checks font loading and selected text-width budgets before rendering; it rejects oversized copy instead of silently shrinking it. This is not arbitrary-input readability approval or a guarantee that an independent Text+ rebuild fits. The kit contains editable original geometry, fixtures, controls and tests; source screenshots/movies are not renderer inputs. Native .drp execution, tested Resolve import, independent moving-source review and source-quality approval are not included. Existing matching pinned dependencies were used, not a clean dependency install. A modified input needs a new render and review.