# 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.