# Bridge two eras through a held aperture, then widen the view

**Status: source-grounded candidate; review open.** This is manual DaVinci Resolve
construction guidance, not a tested `.drp`, `.setting` import or claim of native
Resolve execution. The supplied TypeScript/Remotion project is the executable
implementation. Source-quality and independent moving approval remain absent.

## Whole contract

The first vector room occupies a narrow aperture. Its fictional year opens
from a horizontal center band, holds, then closes. A small geometric result
appears afterward. A hard cut changes rooms while preserving that aperture.
The later year repeats the same mask in screen space while the underlying room
pulls back and the outer aperture widens. After the second date leaves, the
small result repeats. Neither date is visible across the cut.

Do not turn this into a date morph, dissolve, room-only zoom, standalone year
card or a third example for each fixture. Harbor and Meadow are two original
content sets for the same edit.

## Timeline and source

- Output: 1920×1080 square pixels, 24000/1001 fps, 457 frames, local 0–456.
- Exact source interval: [15,472), from the retained official rendition of
  `1QNsdr-Qx_I`, published September 3, 2026. The source title and URL are in
  `source-timing.json`; source photography is separate research media.
- Source PTS use time base 1/24000 and 1001 ticks per frame. Local frame `f`
  maps to source frame `f+15`, absolute PTS `(f+15)*1001`, excerpt PTS `f*1001`.
- Duration is 457457/24000 seconds. Do not use a 24-fps timeline and retime it.
- No audio, frame interpolation, motion blur, optical flow or added end fade.
- Source 219 is an adjacent-frame-verified hard cut: local 204. Source 472 begins
  an interview and is excluded. The initial source fade is also excluded.

Use the exact frame-index controls below rather than Resolve default Auto
interpolation. Internal curves are authored from sampled source observations,
not claimed measurements of the original production project.

## Editable node ownership

Build these branches with transparent full-frame domains, in this order:

1. `ArchiveRoom`: import the original archive SVG paths and gradients, then add
   its editable studio label, small mark and cursor. Gate to local [0,204).
2. `ModernRoom`: import the matching original modern SVG paths and gradients,
   then add its editable label, mark and cursor. Gate to local [204,457).
3. `RoomCamera`: select exactly one room and apply the room transform to its
   complete branch. No crossfade or simultaneous room visibility.
4. `Date`: a separate Text+ branch in screen coordinates, above `RoomCamera`.
   Use the fixture year, Geist 700 and the center-band mask. This is a sibling,
   never a child of the room transform.
5. `OuterAperture`: after merging room and date, mask the composite with a
   full-height rectangle. Merge that result over opaque black, then MediaOut.

The archive SVGs and modern SVGs are original code-built geometry, not flattened
reference frames. Rebuild/import their paths as editable vector groups. A Loader
of a rasterized SVG may be useful as a comparison but is not the editable
equivalent. Keep the SVG generator and original files. Gradients, Text+ shaping
and the pixel-to-Fusion match still need calibration in the actual application.

## Coordinates, masks and curves

All source code uses top-left pixel coordinates. A point `(x,y)` becomes Fusion
Center `(x/1920, 1-y/1080)` in a full-frame domain. A rectangle of width `w` and
height `h` becomes normalized Width `w/1920`, Height `h/1080`; its Center is its
pixel midpoint converted as above. Keep alpha premultiplied for Over, with no
extra black backing inside a branch and no opacity compensation.

Define `ramp(f,a,b)` as `u*u*(3-2*u)` for `u=clamp((f-a)/(b-a),0,1)`. All table
bounds use the shared local frame, not a branch-relative reset.

| Control | Native local construction |
| --- | --- |
| Room cut | Archive through 203; modern starts 204 with no blend. |
| First date opening | `ramp(f,31,51)*(1-ramp(f,96,110))`. |
| Second date opening | `ramp(f,227,247)*(1-ramp(f,291,307))`. |
| Outer side inset | 240px through 260; then `240*(1-ramp(f,260,363))`. |
| Modern room scale | `1.16-0.16*ramp(f,204,415)`; archive is 1. |
| Modern translation | `x=960*(1-scale)`, `y=540*(1-scale)`. |
| First result scale | `ramp(f,158,165)`; hard reset on room cut. |
| Second result scale | `ramp(f,394,399)`; hold through 456. |

For `OuterAperture`, use Center `(0.5,0.5)`, Height 1 and
Width `(1920-2*inset)/1920`. The modern room changes scale before the aperture
starts widening. The aperture is still partly closed when the second date
disappears at 307; it reaches full width at 363. Do not merge those two tracks.

The date occupies pixel box `(510,280,900,340)`, with 300px Geist 700, 340px
line height, centered alignment and -16px letter spacing. It stays fixed while
the room moves. The clip center is `(960,450)`, width 900 and height
`340*dateOpen`. Mask alpha before merging; do not vertically scale the glyphs.
Text+ size/baseline are not assumed numerically equal to CSS font size: match
the actual rendered full-date reference, then bake the same mask samples.

The room camera is a uniform scale about `(960,540)`. A full-frame Fusion
Transform can use Pivot and Center `(0.5,0.5)`, Size from the table; this equals
the code transform `translate(roomX,roomY) scale(roomScale)` about top-left.
Do not also add the code translation to a centered-pivot Transform.

The archive mark center is `(1118,183)`; the modern one is `(805,365)`. Both
are 46×46 editable motifs whose own scale comes from the result track. Choose
the same disc/diamond within a fixture. Cursor positions are separately baked
in `controls.csv`; they are illustrative motion, not measured input actions.
The studio label uses 18px Geist 500, 1px tracking, a 230×24px box and 68% opacity.
Its archive origin is `(408,823)`; modern origin is `(1516,805)`. It belongs to
the room, unlike the date. Full paths and palettes are in the SVGs/generator.

## Source comparison and review

The seven bound comparisons in `source-timing.json` distinguish this complete
relationship from a same-interface crop cut, page-to-outline montage, keyboard
excursion, single-room pullback, portrait stack, gallery-device handoff and
staggered studio identity. A different year, palette or name alone adds no unit.

The source uses photographed rooms, performers, archival texture and subtle
camera motion. These original vector rooms deliberately do not reproduce them.
The first original room is locked; the later camera path, mask easing, mark
appearance and fixture dates are adaptations. The source has no year-to-year
morph, visible approval workflow or demonstrated backend latency. Do not claim
the vector specimen establishes any of those behaviors.

Before claiming fidelity, compare both moving exports with the moving source,
including the mask slice geometry, narrow cut, independent date ownership,
aperture release and final repeated result. Static samples and playback
telemetry are not that review. Before calling this a native Resolve build,
construct it there, inspect Text+/SVG material behavior, render both fixtures
and compare the actual exports. Those acceptance steps remain open.
