About product-recording
product-recording is an internal Remotion workflow skill for preparing a browser recording and importing the user's original take into packages/brand. It preserves capture metadata and describes validation and hosted-asset offloading.
Key features
- 01Prepare Remotion Studio and Chrome
- 02Frame and verify an optional shot
- 03Hand recording control to the user
- 04Import original capture with metadata
- 05Offload asset after hash verification
Use cases
- 01Prepare a browser demonstration recording
- 02Import an MP4 or WebM take into brand
- 03Replace a local media asset with a hosted URL
MCP support
The workflow can use the Canvas Capture extension's WebMCP tools, setup_shot and get_shot, when available.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ remotion-dev/ remotion --skill product-recordingAfter installing, type/product-recordingin Claude Code to confirm it loaded.
Details
From the project READMEProduct recording
Prepare the browser and shot, let the user perform and record the interaction,
then bring the original capture into packages/brand. This is an internal
Remotion workflow; keep this skill in .agents/skills.
Prepare Studio and Chrome
-
Use canvas-capture-extension to build and install the extension in its durable directory. Reload the installed extension through
chrome://extensionsafter rebuilding; a successful build alone does not refresh Chrome's loaded extension. -
Use an existing compatible Chrome with Canvas Draw Element enabled. Preserve unrelated browser tabs and unfinished recordings.
-
Find the requested composition's registration and owning package. Follow studio for dependency/build preparation and server startup, but start in the owning package and open the recording in compatible Chrome. Use
bunx remotion studio --no-openand the exact URL printed by that invocation, including when it reports an existing server. Do not assume port 3000 belongs to this checkout. -
Open the composition with
studioPixelRatio=4in the query string, preserving any other URL parameters. For example, if Studio reports port 3001:http://localhost:3001/RollerSkiRoughCut?studioPixelRatio=4The parameter increases Studio's canvas backing resolution for sharp timeline captures. It does not set the extension's output resolution.
RollerSkiRoughCutlives inpackages/jonnys-videos; locate other requested compositions rather than assuming they live inpackages/example. -
Verify the requested composition and current timeline are visible. Activate Canvas Capture through its toolbar icon or Extensions menu.
Prepare an optional shot and hand off
- Arrange the viewport, timeline height/zoom, playhead, and sidebars as needed for the requested demonstration. Do this before framing the shot.
- Use the extension's
setup_shotandget_shotWebMCP tools when available. They are exposed after activating the extension. Choose the viewport, one visible element, or a rectangle; inspect a still withget_shotandpreview: true. The crop stays fixed in viewport CSS pixels, so reframe after changing the window or layout. - If those tools are unavailable, use the extension's Entire page or
Select area controls and visually verify the selection. Output zoom and
dimensions are separate from
studioPixelRatio; set them for the intended shot and check the displayed dimensions. - Before handing off, note existing capture files and their modification times in the user's Downloads folder so the new take can be identified later.
- Leave the shot ready without starting recording. Tell the user to click Record, perform their interaction, stop, and choose Download recording. The user controls the cursor and recording start/stop. Pause here until they have recorded; do not substitute an older download or claim an import is done.
Import the downloaded take
-
After the user finishes, identify the new, fully downloaded capture in
~/Downloadsby filename and modification time relative to the handoff. Exclude incomplete.crdownloadfiles. If several takes are plausible, ask which one to use. -
Keep the original MP4 or WebM with embedded
REMOTION_CAPTURE_DATAmetadata. Do not transcode it before import; the metadata carries editable cursor data. -
Use import-canvas-capture, targeting
packages/brandand its composition registration file (currentlysrc/Root.tsx). Choose an unused, descriptive composition ID. Frompackages/brand, the local built CLI can be invoked as:node ../cli/remotion-cli.js experimental-codemod add-canvas-capture \ /absolute/path/to/downloaded-capture.mp4 \ --composition-file src/Root.tsx --id TimelineRecordingFollow that skill's dimension, dependency, and conflict guidance. Inspect the capture dimensions and pass
--widthand--heightto match them when importing the full shot: the default 1920×1080 composition can crop a larger recording because the generated component retains native video dimensions. Preserve the download and existing compositions/assets. -
Review the generated component, registration, copied public asset, and any dependency changes. Run the relevant brand validation before offloading.
Offload the recording
Finish with offload-r2: upload the imported recording
to remotion.media, verify that the public object's SHA-256 matches the local
file, and replace the composition's local asset reference with the hosted URL.
Remove the repository-local media copy only after verification; preserve the
original download. Follow that skill's focused validation, then report the
composition ID, hosted URL, and changed files. Distinguish a browser ready for
recording from a completed, imported, and offloaded take.