Remotion with Claude Code: add AI video, voice and music
Set up Remotion's Agent Skills for Claude Code, then load generated clips, narration and music as files, with TTS word timings as captions.

Remotion works with Claude Code by writing the video as React code: you create a Remotion project, install Remotion's Agent Skills, and start Claude Code in the project folder to prompt the composition. Remotion's <Video> and <Audio> components play files, so AI footage, narration and music have to be generated first and loaded by URL or from the project's public/ folder.
Remotion facts are quoted from its docs on coding agents, Agent Skills, <Video>, <Audio> and Caption; Sume facts come from the Sume API reference and its Media inputs and MCP quickstart docs. All were read on 2026-09-28. Sume has no official Remotion connector; this is plain HTTPS calls plus files.
How do I set up Remotion with Claude Code?
You need Node.js and a coding agent such as Claude Code; Remotion notes that most coding agents require a paid subscription. Then, per Remotion's guide:
npx create-video --yes --blank my-videocreates a blank project;cd my-videoandnpm install.npx remotion skills addinstalls the Remotion Agent Skills. The Skills page givesnpx skills add remotion-dev/skillsas another way.npm run devstarts the preview; in a separate terminal, runclaudein the same folder and prompt the video.- Remotion has its own license and terms for commercial use, including pricing; read them before you ship.
| Skill | What Remotion says it covers |
|---|---|
/remotion-best-practices | Encompasses all other skills; use it if you're not sure which one to use |
/remotion-markup | Compositions, animations, layout, typography, media elements, audio, timing |
/remotion-captions | Captions and subtitles |
/remotion-render | Invokes a render into a video or a still |
/remotion-docs | Searches the Remotion docs and fetches any page as Markdown |
Where do the AI clips, voiceover and music come from?
From a generation API, one job per asset. On Sume, each finished job's output is a Sume-owned media URL, and the docs say integrations should store that Sume URL (Media inputs):
- Footage:
POST /v1/videosfor a generated clip; read themedia.sume.comartifact fromGET /v1/jobs/{id}/resultonce the job iscompleted(Jobs and results). - Narration:
POST /v1/tts-1.0/generatewithtimestamps.words: true; the completed result includeswords[]with start and end seconds (Sume API reference). - Music:
POST /v1/music-router/generate, with the length and "instrumental" in theprompt(Music Router).
How do I load those files in the composition?
Remotion's docs say src on <Video> and <Audio> from @remotion/media can be a remote URL or a local file referenced with staticFile(), which turns a file in your public/ folder into a URL. Downloading the three files into public/ keeps the project self-contained. muted drops a clip's own audio, volume sets a level, and loop repeats the bed:
import { AbsoluteFill, staticFile } from "remotion";
import { Audio, Video } from "@remotion/media";
export const Promo: React.FC = () => (
<AbsoluteFill>
<Video src={staticFile("clip-1.mp4")} muted />
<Audio src={staticFile("narration.mp3")} />
<Audio src={staticFile("music.mp3")} volume={0.2} loop />
</AbsoluteFill>
);How do I turn TTS word timings into Remotion captions?
Map each word to Remotion's Caption type from @remotion/captions: text, startMs, endMs, timestampMs and confidence. Remotion says text is whitespace sensitive and should include a space, ideally before each word. In Sume's current code each TTS word carries word, start and end in seconds. From there, Remotion's createTikTokStyleCaptions() groups captions into pages:
import type { Caption } from "@remotion/captions";
type SumeWord = { word: string; start: number; end: number };
export const toCaptions = (words: SumeWord[]): Caption[] =>
words.map((w) => ({
text: ` ${w.word}`,
startMs: Math.round(w.start * 1000),
endMs: Math.round(w.end * 1000),
timestampMs: null,
confidence: null,
}));Can Claude Code call Sume directly while it builds?
Yes, two ways. Claude Code can write and run a script against the REST API, with SUME_API_KEY kept in the environment; that is Sume's primary path. Or it can connect to Sume's hosted MCP with claude mcp add --transport http sume https://mcp.sume.com/mcp (MCP quickstart). Sume's docs say MCP and the CLI still work but are not part of the primary path today (Sume basics).
Two MCP details matter here: default OAuth access is read-only until you turn Write on at consent, and one jobs_wait call holds at most 55 seconds; on wait_slice_expired, call jobs_wait again with the same ids rather than resubmitting the paid job. Sume MCP in Claude Code, Cursor and Codex covers the connection.
Sources
- Remotion: Prompting videos with coding agents (read 2026-09-28)
- Remotion: Agent Skills (read 2026-09-28)
- Remotion: <Video> from @remotion/media (read 2026-09-28)
- Remotion: <Audio> from @remotion/media (read 2026-09-28)
- Remotion: staticFile() (read 2026-09-28)
- Remotion: Caption (read 2026-09-28)
- Remotion: License and terms (read 2026-09-28)
- Sume API reference
- API reference
- Media inputs
- Music Router
- Jobs and results
- MCP quickstart
- Sume basics
- Authentication
Related posts
More in Integrations
- Replicate MCP server: remote and local setup for Claude
Replicate's MCP server is hosted at mcp.replicate.com or runs locally with npx replicate-mcp. Both use a Replicate API token. Setup per client.
- Runway MCP: connect Runway to Claude, Cursor, and ChatGPT
Runway MCP runs at mcp.runwayml.com/mcp. Add it as a connector or plugin, sign in with Runway, no API key; generations use your Runway credits.
- Rust HMAC-SHA256: verify a webhook signature in axum
Compute HMAC-SHA256 in Rust with the hmac and sha2 crates, then verify a webhook in axum: take Bytes, MAC timestamp.body, verify_slice each entry.
- Schedule by Zapier: run a Zap every day to make a video
Schedule by Zapier starts a Zap every hour, day, week, or month. Add a Custom Request keyed on the date to start one video run per day.
Written by Sume