Import Canvas Capture

SkillFiles & storage

This is a skill that guides an AI agent through importing a recorded Remotion Canvas Capture into a project as an editable composition. It uses Remotion's internal experimental-codemod command, so the capture becomes a component with cursor keyframes without any Studio interactions. The skill is meant to stay in .agents/skills and is an internal, unstable workflow rather than a stable API.

Then ask your AI: use the Import Canvas Capture skill

Details

Instructions available. Your AI can read the instructions. Execution depends on the setup they require.

Have a recorded capture file that still contains embedded REMOTION_CAPTURE_DATA metadata and a target Remotion project.

What your AI can do with it

  • Runs remotion experimental-codemod add-canvas-capture on a capture file
  • Generates a component beside the composition registration file
  • Registers a new composition with cursor keyframes
  • Copies the recorded video to the project's public directory
  • Installs missing @remotion/media and @remotion/mac-cursors dependencies
  • Supports a dry-run mode that previews changes without writing files

Getting started

  1. Have a recorded capture file that still contains embedded REMOTION_CAPTURE_DATA metadata and a target Remotion project.
  2. Inspect the project to find the TypeScript file with its composition registrations, usually src/Root.tsx, and choose an unused composition ID.
  3. From the target project's root, run bunx remotion experimental-codemod add-canvas-capture with the absolute capture path, --composition-file, and --id.
  4. Review the reported source files and public asset, then report the composition ID and changed files to the user.

What this skill tells your AI

The instructions your AI receives, as published by remotion-dev/remotion in .agents/skills/import-canvas-capture/SKILL.md and read by Ahel’s review.

This is an internal, unstable workflow. Keep this skill in .agents/skills; do not distribute it through packages/skills or document the command as a stable API.

Workflow

  1. Locate the recorded capture file and the target Remotion project. The original recording must contain embedded REMOTION_CAPTURE_DATA metadata; a converted video that has lost this metadata cannot be imported.

  2. Inspect the project to find the TypeScript file containing its composition registrations (usually src/Root.tsx). Choose an unused composition ID.

  3. From the target project's root, run:

    bunx remotion experimental-codemod add-canvas-capture /absolute/path/capture.webm \
      --composition-file src/Root.tsx \
      --id MyCapture
    

    When developing this command in the monorepo, build the CLI first with bun run build, then invoke the local CLI from the target project's root:

    node /absolute/path/to/remotion/packages/cli/remotion-cli.js \
      experimental-codemod add-canvas-capture /absolute/path/capture.webm \
      --composition-file src/Root.tsx --id MyCapture
    
  4. Review the reported source files and public asset. The importer generates a component beside the registration file, registers it, copies the video to the public directory, and installs missing @remotion/media and @remotion/mac-cursors dependencies at the project's Remotion version. Studio does not need to be running. Existing Studio sessions pick up source changes through their file watchers; this operation does not enter Studio's undo stack.

  5. Report the composition ID and changed files to the user.

Options and conflicts

  • Defaults match Studio's capture import: 1920×1080, 60 fps, and duration rounded up from the recording. Pass --width, --height, or --fps to override them. Recorded video dimensions remain independent from composition dimensions.
  • --public-dir overrides the configured public directory. --package-manager selects the dependency installer.
  • --dry-run parses the recording and generates source changes without installing dependencies or writing project files. The programmatic result includes the proposed source changes.
  • The registration file is resolved relative to the project root; the CLI capture path is resolved relative to the current working directory.
  • Existing component files and conflicting public assets are rejected. If the recording is already in the public directory, pass that file as the input to reuse it. Otherwise rename the input or select another composition ID; do not overwrite an existing asset or component to bypass an error.

Programmatic access

Use CliInternals.importCanvasCapture from @remotion/cli. It is internal and unstable. Its inputs are captureFile, compositionFile, compositionId, remotionRoot, publicDir, fps, width, height, packageManager, logLevel, and dryRun. Supply null for default directory, dimensions, frame rate, and package manager. File paths are resolved relative to remotionRoot.

The result contains the composition ID, source and asset paths, composition metadata, and codemod changes. Pass dryRun: true to inspect changes in memory.

Signals

GitHub stars
63k
Forks
5k
Last commit
Oct 2026

Questions

Can it import a converted video that lost its metadata?
No. The original recording must contain embedded REMOTION_CAPTURE_DATA metadata. A converted video that has lost this metadata cannot be imported.
Does Studio need to be running?
No. Studio does not need to be running. Existing Studio sessions pick up source changes through their file watchers, and this operation does not enter Studio's undo stack.
Advanced
Item type
skill
Key
import-canvas-capture
Source
github.com/remotion-dev/remotion