# Retime one marker, retain both cards

This manual Resolve/Fusion construction accompanies an editable Remotion
project. It is not a tested Fusion import, native Resolve project or
source-quality approval. Default and adaptation demonstrate one treatment.

## Source and clock

The retained official Sora storyboard film supplies native frames[4460,4800)
at60/1:340 frames,5.666667 seconds. Local0 is source4460. The original file
is research-only and is not an active scene asset. `source-timing.json` binds
the exact retained-master PTS at time base1/15360 with256 ticks per frame.
No historical rendition equivalence is implied.

Use a1920×1080,60fps timeline and340-frame composition. Do not retime to24/30fps,
add easing between timestamp labels, append a release, or extend the ending.
Set the timeline rate before editing. Keep this study silent. Native Resolve
setup, playback and export still require verification in that application.

## Content and artwork

Choose `inputs/default.json` or `inputs/adaptation.json`. Exact keys are `theme`,
`firstDescription` and `secondDescription`. Theme is meadow or harbor. The
first description is exactly three trimmed ASCII lines, each at most86
characters; the second is one trimmed ASCII line of at most70. Markup, unknown
keys, outer whitespace and implicit wrapping are rejected.

Descriptions use the bundled licensed Geist variable font at the Remotion
equivalent of24px/weight400 with35px leading and a788px width budget. The
browser measures actual glyph widths before rendering. Resolve Text+ has its
own size/alignment controls: calibrate against the1920×1080 output, measure
the same text width and retain the35px baseline separation. Do not equate its
normalized font size numerically to CSS pixels or shrink text to pass.

The two original desktop SVGs and `scripts/build-art.py` are included. Rebuild
their simple gradient, ellipse and path layers from `asset-construction.json`,
or use a supported SVG preparation workflow and inspect the resulting raster.
No native SVG import result is claimed. Do not substitute source screenshots,
source branding or the reference movie. UI geometry, text and pointers remain
editable layers; they are not baked into the desktop image.

## Layer construction

Coordinates here are1920×1080 top-left pixels. For a rectangular mask use
center=((left+width/2)/1920,1-(top+height/2)/1080), normalized width=width/1920
and height=height/1080. Keep text anchors separate and calibrate them visually.

Build back to front:

1. Full-frame original desktop field. Place the workspace shell at(24,-180),
   size1930×1230,15px border,35px corner radius, clipped by the composition.
2. Two dark rounded cards at(82,-300) and(979,-300), each869×950 with40px
   radii. Their top edges are intentionally outside the image. They never
   move, change count or appear as newly inserted cards.
3. First description at(123,75), three35px-spaced lines; second at(1020,92).
   First time label at(123,568), second at(1020,568),32px equivalent/weight600.
   The first is always00.00. Only the second label changes. The original
   edit/delete symbols are separate paths at(774,570) and(1670,570).
4. Timeline panel(40,684),1880×247. Its colored track starts(103,742),1817×132.
   Vertical rules startx103 every117.4px. Number labels00–07 start(116,692)
   every234.8px. This ruler does not scroll or change scale.
5. First marker(103,742),125×132, radius11, index1 and three short line strokes.
   Its position, content and unselected border remain fixed. Second marker
   uses `markerX` and `markerWidth` from `controls.csv`, withy742, height132,
   radius11 and3px light border, index2 and one line stroke. Do not parent the
   large second card to this marker.
6. Toolbar panel(40,931),1880×105. Six cells startx1038 every115px aty950;
   labels are1:1,480p,10s,4v,None,Help. Create is at(1706,947),106×74. Keep10s
   throughout; this is interior-item retiming, not endpoint trimming.
7. Pointer at `pointerX`,`pointerY`. Use the separate original arrow and hand
   paths in `src/Scene.tsx`,46×52 local bounds, above the marker. Preserve
   their different positions; changing opacity does not move the marker.

For the primitive paths, the JSX `viewBox` is the local coordinate basis.
Reconstruct the curves/segments in equivalent Fusion shape layers and check
the actual output. Their supplied SVG-style path data is not a claim that a
Fusion Polygon node accepts those strings directly. Keep the toolbar, card
tools, pointer and selected outline independently editable.

## Native controls and holds

`controls.csv` contains all340 local/native-frame rows. It is a reference table,
not a promised universal Resolve importer. `timestamp-keys.csv` contains31
explicit label states. For the marker x/width, enter every frame's values as
stepped keys, or use an independently tested importer. Do not smooth the
measured plateaus into a constant-speed drag. Convert pixel positions only
once; the camera is fixed and there is no additional scene transform.

For each label, use a Text+ layer with a held string and exact non-overlapping
visibility interval through the frame preceding its next key. Alternatively
use a tested text keyframe workflow. There is no crossfade or typewriter text
between timestamps. `labelIndex` in the controls refers to this ordered list.
These are observed strings; their fractional part is not interpreted as the
film's60fps frame number or as decimal hundredths.

| Local frame | Expected state |
| ---: | --- |
|0–51| Already-selected second marker, arrow,05.02. |
|52–57| Hand replaces arrow; marker label still05.02. |
|58| First changed label04.28 and changed marker support. |
|100–123| Marker and02.00 hold for24 frames. |
|124| Movement resumes with01.26. |
|150–166|01.06 holds for17 frames. |
|167–339|01.02 holds; both cards and10s remain. Hand remains visible. |

Marker geometry is derived from observed half-raster white-edge support:
left=2×leftEdge−1; width=2×(rightEdge−leftEdge)+3. The half-raster measurements
and label runs are included in `src/retiming.json`. The1px inset/3px border
mapping and pointer geometry are authored implementation choices, not
recovered Sora design values. The reference does not establish mouse release.

## Verification and limits

Render both supplied variants first. Check340 frames at60fps,1920×1080 and no
audio. Compare frame51/52,57/58,99/100,123/124,149/150,166/167 and339. Confirm
both large cards and the first marker stay fixed, while the second marker
and its own timestamp remain linked. No third item, new card, duration change,
generated result or explicit release belongs in this interval.

The packaged Remotion verifier binds bytes, code, content, cadence and silence;
it does not execute Resolve or approve visual fidelity. The original artwork,
shorter fictional copy, type metrics, palette, hand shape and pointer placement
remain different from the source. Source inspection and output still checks
must not be described as independent moving review. Before using this recipe
in production, inspect moving source/output and a real Resolve render.
