# Build an active capture panel, occlude it, then reveal it

Manual Resolve/Fusion construction guide. This package contains no `.drp` or
automated Fusion importer, and has not been opened or rendered in Resolve.
The two page previews are actual silent Remotion exports. They are original
adaptations, not source-quality approvals or demonstrations of current product
behavior. Source people, character art, branding and audio are not render inputs.

## Clock and scope

Use a 1920×1080 composition with 129 frames at 24000/1001 fps, ordinarily displayed
as 23.976. Set the Fusion range to 0..128 inclusive; do not use24 fps. The retained
source interval is [1695,1824),5.380375 seconds. Source ordinal=local+1695;
source PTS=(local+1695)×1001 on a 1/24000 clock. The research excerpt and output
start at zero. Frame1824 is a new shot and is excluded.

The selected relationship is panel assembly, foreground occlusion while activity
continues, and panel recovery. It is not a wipe, a send action or a completed
transcription. The panel has recovered by local 112. A small foreground remnant
may remain at the extreme right in the last frame; do not force a clean exit.

## Editable node construction

Create four independent groups and merge in this order: Room, ContextLabel,
CapturePanel, Courier. Courier must be the final foreground merge. The panel
does not travel with the courier. Do not freeze, hide or reset the panel group
when the courier crosses it; normal alpha occlusion is the mechanism.

The six SVG files are original room, courier-body and foot geometry in two
palettes. For an editable native Fusion build, recreate their rect, ellipse and
path elements using Background nodes with Rectangle/Ellipse/Polygon masks.
Each SVG records its coordinate system, colors and path vertices. Treat it as
construction reference, not a claim that Resolve imported editable vectors.
Using a flattened Loader instead is a separate, less editable shortcut.
Use the bundled Geist font and keep its license with the project.

Coordinates below use the1920×1080 canvas, origin at top-left. For a mask center,
convert pixel(x,y) to Fusion(x/1920,1-y/1080); divide widths by 1920 and heights
by 1080. A panel-local point is offset by the panel left/top before conversion.
Check the resulting rendered bounds; Text+ sizing is not asserted to equal CSS
pixel font sizing automatically.

### Room and context

Room fills1932×1080 and drifts from X0 to-12 over the full interval. Recreate
the supplied room SVG with its shapes. Place ContextLabel at(355+drift,731),
within a 460×42 box. Use Geist medium, matching the32 px Remotion reference.
Use `Studio notes` or `Field journal`; replacement copy must remain within the
box. The downloaded content validator allows1..30 characters and actual font
width must fit460 px. Do not scale down overflowing copy.

### Capture panel

The panel left is 1308, width 520 and vertical center350. Height changes below;
top=350-height/2. Use a transparent fill and a 3 px white rounded outline with
46 px corner radius, matching the rendered reference. Its final top is 248 and
height 204. The radius and boxes are authored approximations of the source.
Keep these build properties stepped, not eased:

| Local frame | Height | Waveform bars | New content |
| --- | --- | --- | --- |
|0..1|0|0|No panel|
|2|70|0|Outline|
|3|100|8|Rightmost flat bars|
|4|130|17|More bars extend left|
|5|154|26|Continue build|
|6|172|35|Plus and00:00|
|7|188|43|Dark send circle|
|8|194|50|Continue build|
|9|198|54|White Stop circle|
|10|202|54|Waveform becomes active|
|11..128|204|54|Fixed panel size|

Create 54 thin waveform masks, index 0..53, with panel-local X=27+8.6×index,
width 2.5. Their vertical center is min(72,height/2). Before local 10 each bar
is 6 px tall. Reveal bars right-to-left: display an index only when
index≥54-waveBars. The per-frame controls CSV supplies waveBars and wavePhase.
For active bars, reproduce the deliberately authored waveform from model.ts:

```text
position = index - wavePhase * 0.27
height = round(7 + 39 * max(0, cos(position*pi/9))^2
                    * (0.7 + 0.3*abs(sin(index*2.1))))
wavePhase = max(0, localFrame - 10) modulo 28
```

This expression is a construction recipe, not a paste-ready Fusion expression;
map localFrame to the composition's zero-based time and use the application's
expression equivalents. Keep time evaluation running through the occlusion.
The waveform is decorative and does not analyze an audio track.

At panel-local(53,height-49), make a white plus from two20 px strokes. At
(395,height-49), put a white29 px-radius circle with a 14 px dark square. At
(474,height-49), put a dark29 px-radius circle with a white upward arrow.
Reveal these at 6,9,7 respectively; no click or completed action follows.
The counter occupies local(260,height-67),92×36,27 px-equivalent Geist regular
with tabular figures. All controls are separate editable shapes/text.

### Timer: edited graphic, not elapsed recording time

Set stepped text keys, holding each value until the next key:

| Local frame | Text | Evidence |
| --- | --- | --- |
|6|00:00|First readable counter|
|18|00:01|Observed onset|
|28|00:02|Observed onset|
|39|00:03|Observed onset|
|50|00:04|Observed onset|
|60|00:05|Observed onset|
|70|00:06|Observed onset|
|81|00:07|Observed onset|
|92|00:08|Authored hidden onset; not readable in source crops|
|103|00:09|Authored hidden onset; source first fully readable at 105|
|113|00:10|Observed onset|
|123|00:11|Observed onset|

The129 frame excerpt lasts5.380375 seconds, yet the graphic reaches11. Never
use these keys to infer speech duration or real capture duration. The CSV field
timerMeasuredOnset=0 identifies values 8 and9. Their hidden implementation is
necessary for continuous activity but does not recover unobserved source gates.

### Courier foreground

Build the courier in a 960×1140 group. Body art is 960×1020; its main head starts
near localX220. Two180×190 foot groups sit below it. Translate the whole group
to(figureX,figureY-30). Use linear interpolation only between these X keys:

```text
frame:  0,   28,   29,   44,   59,  69,  74,  84,  91,  93, 101, 104, 105, 112, 128
X:  -1030,-1030, -958, -500, -120, 185, 360, 710, 965,1100,1360,1408,1490,1610,1898
```

Before29, step=0 and figureY=0. Thereafter step=sin((frame-29)×pi/8) and
figureY=round(step×9). Foot1 has X350+26×step, Y890-38×max(0,step), rotation
8×step degrees. Foot2 has X640-26×step, Y890-38×max(0,-step), rotation-8×step.
Feet merge behind the body. Fusion and CSS rotation-center conventions differ;
set the foot pivot to the center of its180×190 box, then match the reference.

These vector silhouettes and the bob/step cycle are original. They do not
reproduce the source pixel-art animal, its exact gait, photography or performance.
The key relationship is fixed active panel below foreground, with reappearance
before the cut. Do not promote authored X/Y keys to measured source coordinates.

## Inspection and export

Compare the supplied controls.csv with every keyed state, then inspect at least
local 0,2,6,7,9,10,29,74,89,93,105,112,123,128. Check that the outline builds
without moving its center, controls appear separately, the figure actually
covers panel pixels, waveform/counter advance while hidden, and the recovered
panel retains its state. Check readable copy and clipped edges at full size.

Export a silent1920×1080 H.264 MP4 at 24000/1001 with 129 frames, yuv420p and no
audio stream. Do not pad to 6 seconds or append a new shot. Inspect the final
encoded file's frame count and PTS; a correct project rate alone is insufficient.
The supplied Remotion verifier binds its own implementation/manifests and is not
a verifier for an independently built Resolve render. Native Resolve execution,
independent moving review and source-quality approval all remain unverified.
