A Remotion acaba de lançar as Agent Skills, e isso muda tudo para a criação de vídeos com IA.
npx skills add remotion-dev/skills
É isso. Um comando, e o Claude Code se torna um especialista em criação de vídeo que entende o framework de vídeo baseado em React do Remotion por dentro e por fora.
O Que São as Remotion Agent Skills?
Agent Skills são "manuais de instrução" que ensinam agentes de IA como o Claude Code a usar corretamente ferramentas e frameworks específicos. As skills oficiais do Remotion dão ao Claude conhecimento profundo de:
- Arquitetura de componentes do Remotion (
<Composition>,<Sequence>,<AbsoluteFill>) - APIs de Animação (
interpolate,spring,useCurrentFrame) - Melhores práticas para tempo, performance e renderização
- Padrões comuns para intros, transições e efeitos
Sem as skills, o Claude pode gerar código Remotion com bugs ou incorreto. Com as skills, ele escreve componentes de vídeo com qualidade de produção na primeira tentativa.
O Que Você Vai Construir
Neste tutorial, você irá:
- Instalar as Remotion Agent Skills em um único comando
- Gerar um vídeo de introdução completo usando linguagem natural
- Refinar animações através de conversas
- Renderizar seu vídeo para MP4
- Escalar com Remotion Lambda (opcional)
TL;DR
# 1. Crie um projeto Remotion
npx create-video@latest my-video && cd my-video
# 2. Instale as Agent Skills (o passo chave!)
npx skills add remotion-dev/skills
# 3. Inicie o Claude Code e descreva seu vídeo
claude
# 4. Renderize
npx remotion render <composition-name> out/video.mp4
Esse é todo o fluxo de trabalho. As Agent Skills ensinam o Claude a escrever código Remotion adequado, para que você possa focar em descrever o que você quer em vez de depurar componentes React.
Pré-requisitos
Antes de começar, certifique-se de ter:
| Requisito | Versão | Comando de Verificação |
|---|---|---|
| Node.js | 18+ | node --version |
| npm ou yarn | Mais recente | npm --version |
| Claude Code | Mais recente | claude --version |
| Editor de Código | VS Code recomendado | - |
Você também deve ter:
- Familiaridade básica com a linha de comando
- Compreensão básica de React (útil, mas não obrigatória)
Passo 1: Instale o Remotion e Crie Seu Projeto
Primeiro, crie um novo projeto Remotion usando a CLI oficial.
1.1 Abra seu terminal e execute:
npx create-video@latest my-first-video

1.2 Quando solicitado, selecione estas opções:
? Qual nome você gostaria de dar ao seu projeto? my-first-video
? Escolha um template: blank
? Usar TypeScript? Sim
? Instalar dependências? Sim
1.3 Navegue até seu projeto:
cd my-first-video
1.4 Verifique a instalação:
npm run dev
Isso abre o Remotion Studio em seu navegador em http://localhost:3000. Você deve ver uma tela em branco com uma linha do tempo na parte inferior.
Resultado esperado: Uma janela do navegador com a interface do Remotion Studio.

Passo 2: Instale as Remotion Agent Skills
É aqui que a mágica acontece. Um único comando dá ao Claude Code conhecimento de nível especialista em Remotion.
2.1 Em seu diretório de projeto, execute:
npx skills add remotion-dev/skills
Quando você vir Added skill: remotion exibido, a instalação foi bem-sucedida.

2.2 O que acabou de acontecer?
O comando adicionou uma skill em .claude/skills/remotion/ em seu projeto. Esta pasta contém SKILL.md — o manual de instruções que ensina o Claude a escrever código Remotion adequado.
2.3 Verifique a instalação:
Verifique se o arquivo da skill existe:
ls .claude/skills/remotion/
Saída esperada:
SKILL.md
2.4 A estrutura do seu projeto agora se parece com:
my-first-video/
├── .claude/
│ └── skills/
│ └── remotion/
│ └── SKILL.md # O "cérebro" que ensina Remotion ao Claude
├── src/
│ ├── Root.tsx
│ ├── Composition.tsx
│ └── index.ts
├── public/
├── remotion.config.ts
├── package.json
└── tsconfig.json
Dica profissional: Se a skill não estiver sendo reconhecida, execute npx skills add remotion-dev/skills novamente ou reinicie o Claude Code.
Passo 3: Crie Seu Primeiro Vídeo com Claude Code
Agora vamos usar o Claude Code para gerar um vídeo completo. Abra seu terminal no diretório do projeto.
3.1 Inicie o Claude Code:
claude
3.2 Descreva seu vídeo:
Digite este prompt para o Claude Code:
Create a 5-second intro video for a tech company called "DevFlow".
Requirements:
- Resolution: 1920x1080
- Frame rate: 30fps
- Background: Dark gradient from #1a1a2e to #16213e
- Animation sequence:
1. Logo text "DevFlow" fades in from opacity 0 to 1 (frames 0-30)
2. Logo scales up slightly with a bounce effect (frames 15-45)
3. Tagline "Build faster. Ship smarter." fades in below (frames 45-90)
4. Everything holds for the remaining frames
Use modern, clean typography with the Inter font family.

3.3 Claude Code gera os arquivos:
Claude Code criará ou modificará estes arquivos:
src/Root.tsx - Definição da Composição:
import React from 'react';
import { Composition } from 'remotion';
import { DevFlowIntro } from './DevFlowIntro';
export const RemotionRoot: React.FC = () => {
return (
<>
<Composition
id="devflow-intro"
component={DevFlowIntro}
durationInFrames={150}
fps={30}
width={1920}
height={1080}
/>
</>
);
};
src/DevFlowIntro.tsx - Componente principal do vídeo:
import React from 'react';
import {
AbsoluteFill,
useCurrentFrame,
interpolate,
spring,
useVideoConfig,
} from 'remotion';
export const DevFlowIntro: React.FC = () => {
const frame = useCurrentFrame();
const { fps } = useVideoConfig();
// Logo fade in (frames 0-30)
const logoOpacity = interpolate(frame, [0, 30], [0, 1], {
extrapolateRight: 'clamp',
});
// Logo bounce scale (frames 15-45)
const logoScale = spring({
frame: frame - 15,
fps,
from: 1,
to: 1.1,
config: {
damping: 10,
stiffness: 100,
},
});
// Tagline fade in (frames 45-90)
const taglineOpacity = interpolate(frame, [45, 90], [0, 1], {
extrapolateLeft: 'clamp',
extrapolateRight: 'clamp',
});
return (
<AbsoluteFill
style={{
background: 'linear-gradient(135deg, #1a1a2e 0%, #16213e 100%)',
justifyContent: 'center',
alignItems: 'center',
fontFamily: 'Inter, sans-serif',
}}
>
<div style={{ textAlign: 'center' }}>
<h1
style={{
fontSize: 120,
fontWeight: 700,
color: 'white',
margin: 0,
opacity: logoOpacity,
transform: `scale(${frame >= 15 ? logoScale : 1})`,
}}
>
DevFlow
</h1>
<p
style={{
fontSize: 36,
color: 'rgba(255, 255, 255, 0.8)',
marginTop: 24,
opacity: taglineOpacity,
fontWeight: 400,
}}
>
Build faster. Ship smarter.
</p>
</div>
</AbsoluteFill>
);
};
3.4 Visualize seu vídeo:
Se o Remotion Studio não estiver rodando, inicie-o:
npm run dev
Selecione "devflow-intro" no dropdown de composição. Use a linha do tempo para navegar pelo seu vídeo e visualizar as animações.

Resultado esperado: Seu vídeo de introdução sendo reproduzido com as animações de logo e tagline que aparecem gradualmente.
Passo 4: Refine Seu Vídeo com Prompts de Acompanhamento
O poder do Claude Code é o refinamento iterativo. Vamos melhorar nosso vídeo.
4.1 Adicione um efeito de fundo de partículas e mude o esquema de cores
Add a subtle animated particle background with small white dots
that slowly float upward. Keep it minimal - about 20-30 particles,
very low opacity (0.1-0.2), and slow movement.
Change the gradient to a blue-purple theme:
- Start color: #0f0c29
- Mid color: #302b63
- End color: #24243e
Make it a 3-stop gradient.


4.3 Adicione uma sugestão de efeito sonoro (opcional):
Add a marker comment where a "whoosh" sound effect should play
when the logo bounces. I'll add the audio later.
Cada vez que você dá feedback, o Claude Code modifica o código relevante e você pode visualizar as mudanças imediatamente no Remotion Studio.
Passo 5: Adicione Conteúdo Dinâmico com Props
Torne seu vídeo reutilizável aceitando props dinâmicas. Isso permite gerar vários vídeos com conteúdo diferente.
5.1 Peça ao Claude Code para adicionar props:
Refactor the video to accept these props:
- companyName (string) - replaces "DevFlow"
- tagline (string) - replaces the tagline text
- primaryColor (string) - main gradient color
- secondaryColor (string) - secondary gradient color
Also add Zod schema validation for type safety.
5.2 Claude Code gera o esquema:
src/DevFlowIntro.tsx (atualizado):
import { z } from 'zod';
export const introSchema = z.object({
companyName: z.string().default('DevFlow'),
tagline: z.string().default('Build faster. Ship smarter.'),
primaryColor: z.string().default('#0f0c29'),
secondaryColor: z.string().default('#24243e'),
});
type IntroProps = z.infer<typeof introSchema>;
export const DevFlowIntro: React.FC<IntroProps> = ({
companyName,
tagline,
primaryColor,
secondaryColor,
}) => {
// ... component uses these props
};
src/Root.tsx (atualizado):
import { Composition } from 'remotion';
import { DevFlowIntro, introSchema } from './DevFlowIntro';
export const RemotionRoot: React.FC = () => {
return (
<>
<Composition
id="company-intro"
component={DevFlowIntro}
durationInFrames={150}
fps={30}
width={1920}
height={1080}
schema={introSchema}
defaultProps={{
companyName: 'DevFlow',
tagline: 'Build faster. Ship smarter.',
primaryColor: '#0f0c29',
secondaryColor: '#24243e',
}}
/>
</>
);
};
5.3 Teste com diferentes props no Remotion Studio:
No Remotion Studio, clique no painel Props e modifique os valores:
{
"companyName": "Apidog",
"tagline": "Design. Debug. Test. Document.",
"primaryColor": "#1e3a5f",
"secondaryColor": "#0d1b2a"
}
A pré-visualização é atualizada em tempo real.
Passo 6: Crie um Vídeo com Múltiplas Cenas
Vamos construir um vídeo mais complexo com múltiplas cenas.
6.1 Prompt para o Claude Code:
Create a 30-second product demo video with these scenes:
Scene 1 (0-5 seconds): Logo intro animation
Scene 2 (5-12 seconds): Feature showcase with 3 icons appearing one by one
- Icon 1: Rocket (Speed)
- Icon 2: Shield (Security)
- Icon 3: Chart (Analytics)
Each icon should slide in from the left with a fade
Scene 3 (12-22 seconds): Mockup of the product dashboard
- Show a simple UI mockup
- Highlight different sections sequentially
Scene 4 (22-30 seconds): Call to action
- "Start your free trial"
- Website URL fades in
Use the <Sequence> component to organize scenes.
Total duration: 900 frames at 30fps.
6.2 Claude Code gera a estrutura da cena:
import { Sequence, AbsoluteFill } from 'remotion';
import { LogoIntro } from './scenes/LogoIntro';
import { FeatureShowcase } from './scenes/FeatureShowcase';
import { DashboardMockup } from './scenes/DashboardMockup';
import { CallToAction } from './scenes/CallToAction';
export const ProductDemo: React.FC = () => {
return (
<AbsoluteFill style={{ backgroundColor: '#0a0a0a' }}>
{/* Scene 1: Logo Intro (frames 0-150) */}
<Sequence from={0} durationInFrames={150}>
<LogoIntro />
</Sequence>
{/* Scene 2: Feature Showcase (frames 150-360) */}
<Sequence from={150} durationInFrames={210}>
<FeatureShowcase />
</Sequence>
{/* Scene 3: Dashboard Mockup (frames 360-660) */}
<Sequence from={360} durationInFrames={300}>
<DashboardMockup />
</Sequence>
{/* Scene 4: Call to Action (frames 660-900) */}
<Sequence from={660} durationInFrames={240}>
<CallToAction />
</Sequence>
</AbsoluteFill>
);
};
6.3 Claude Code cria componentes de cena individuais:
src/scenes/FeatureShowcase.tsx:
import { useCurrentFrame, interpolate, AbsoluteFill } from 'remotion';
const features = [
{ icon: '🚀', label: 'Speed', delay: 0 },
{ icon: '🛡️', label: 'Security', delay: 30 },
{ icon: '📊', label: 'Analytics', delay: 60 },
];
export const FeatureShowcase: React.FC = () => {
const frame = useCurrentFrame();
return (
<AbsoluteFill
style={{
justifyContent: 'center',
alignItems: 'center',
gap: 80,
flexDirection: 'row',
}}
>
{features.map((feature, index) => {
const slideIn = interpolate(
frame - feature.delay,
[0, 30],
[-100, 0],
{ extrapolateRight: 'clamp', extrapolateLeft: 'clamp' }
);
const opacity = interpolate(
frame - feature.delay,
[0, 30],
[0, 1],
{ extrapolateRight: 'clamp', extrapolateLeft: 'clamp' }
);
return (
<div
key={index}
style={{
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
transform: `translateX(${slideIn}px)`,
opacity,
}}
>
<span style={{ fontSize: 80 }}>{feature.icon}</span>
<span style={{ fontSize: 24, color: 'white', marginTop: 16 }}>
{feature.label}
</span>
</div>
);
})}
</AbsoluteFill>
);
};
Passo 7: Adicione Áudio ao Seu Vídeo
7.1 Adicione uma trilha sonora de fundo:
Coloque seu arquivo de áudio na pasta public:
public/
└── audio/
└── background-music.mp3
7.2 Peça ao Claude Code para integrar o áudio:
Add background music from public/audio/background-music.mp3
- Fade in over the first 30 frames
- Fade out over the last 30 frames
- Set volume to 0.5
7.3 Claude Code adiciona o componente de Áudio:
import { Audio, interpolate, useCurrentFrame, useVideoConfig } from 'remotion';
import { staticFile } from 'remotion';
export const ProductDemo: React.FC = () => {
const frame = useCurrentFrame();
const { durationInFrames } = useVideoConfig();
// Audio fade in/out
const volume = interpolate(
frame,
[0, 30, durationInFrames - 30, durationInFrames],
[0, 0.5, 0.5, 0],
{ extrapolateLeft: 'clamp', extrapolateRight: 'clamp' }
);
return (
<AbsoluteFill>
<Audio src={staticFile('audio/background-music.mp3')} volume={volume} />
{/* ... rest of scenes */}
</AbsoluteFill>
);
};
Passo 8: Renderize Seu Vídeo
Agora vamos exportar seu vídeo para um arquivo.
8.1 Renderize pela linha de comando:
# Renderizar para MP4 (recomendado para a maioria dos usos)
npx remotion render company-intro out/company-intro.mp4
# Renderizar com props personalizadas
npx remotion render company-intro out/apidog-intro.mp4 \
--props='{"companyName":"Apidog","tagline":"Design. Debug. Test. Document."}'
8.2 Opções de renderização:
# Alta qualidade (mais lento)
npx remotion render company-intro out/video.mp4 --crf=18
# Baixa qualidade (mais rápido, arquivo menor)
npx remotion render company-intro out/video.mp4 --crf=28
# Renderizar como GIF
npx remotion render company-intro out/video.gif --codec=gif
# Renderizar como WebM
npx remotion render company-intro out/video.webm --codec=vp8
# Renderizar faixa de frames específica
npx remotion render company-intro out/preview.mp4 --frames=0-90
8.3 Progresso da renderização:
Você verá uma saída como:
ℹ Rendering frames 0-150
████████████████████████████████████████ 100% | 150/150 frames
✓ Rendered 150 frames in 12.3s (12.2 fps)
✓ Encoded video in 3.2s
✓ Video saved to out/company-intro.mp4
Resultado esperado: Um arquivo de vídeo renderizado em seu diretório out/.
Passo 9: Escale com Remotion Lambda (Opcional)
Para renderizar vídeos em escala (centenas ou milhares), use Remotion Lambda.
9.1 Instale as dependências do Lambda:
npm install @remotion/lambda
9.2 Configure as credenciais AWS:
# Configure as credenciais AWS
aws configure
# Crie a role do Remotion Lambda
npx remotion lambda policies role
9.3 Implante sua função Lambda:
# Implante a função de renderização
npx remotion lambda functions deploy
# Implante seu site de vídeo
npx remotion lambda sites create src/index.ts --site-name=my-videos
9.4 Renderize via Lambda:
npx remotion lambda render \
--function-name=remotion-render \
--serve-url=https://your-bucket.s3.amazonaws.com/sites/my-videos \
--composition=company-intro \
--props='{"companyName":"ClientCo"}'
9.5 Renderização programática:
import { renderMediaOnLambda } from '@remotion/lambda/client';
const result = await renderMediaOnLambda({
region: 'us-east-1',
functionName: 'remotion-render',
composition: 'company-intro',
serveUrl: 'https://your-bucket.s3.amazonaws.com/sites/my-videos',
codec: 'h264',
inputProps: {
companyName: 'Apidog',
tagline: 'Design. Debug. Test. Document.',
},
});
console.log('Video URL:', result.url);
Passo 10: Crie uma API de Geração de Vídeo
Crie um endpoint de API que gera vídeos sob demanda.
10.1 Peça ao Claude Code para criar um servidor Express:
Create an Express.js API server with these endpoints:
POST /api/videos/generate
- Accepts: template, props, format
- Triggers a Remotion Lambda render
- Returns: jobId, status
GET /api/videos/status/:jobId
- Returns render progress and download URL when complete
Include proper error handling and Zod validation.
10.2 Claude Code gera o servidor:
server/index.ts:
import express from 'express';
import { renderMediaOnLambda, getRenderProgress } from '@remotion/lambda/client';
import { z } from 'zod';
const app = express();
app.use(express.json());
const generateSchema = z.object({
template: z.enum(['company-intro', 'product-demo']),
props: z.record(z.unknown()),
format: z.enum(['mp4', 'webm', 'gif']).default('mp4'),
});
app.post('/api/videos/generate', async (req, res) => {
try {
const { template, props, format } = generateSchema.parse(req.body);
const { renderId, bucketName } = await renderMediaOnLambda({
region: 'us-east-1',
functionName: 'remotion-render',
composition: template,
serveUrl: process.env.REMOTION_SITE_URL!,
codec: format === 'gif' ? 'gif' : 'h264',
inputProps: props,
});
res.json({
jobId: renderId,
bucketName,
status: 'processing',
});
} catch (error) {
res.status(400).json({ error: (error as Error).message });
}
});
app.get('/api/videos/status/:jobId', async (req, res) => {
const { jobId } = req.params;
const { bucketName } = req.query;
const progress = await getRenderProgress({
renderId: jobId,
bucketName: bucketName as string,
region: 'us-east-1',
functionName: 'remotion-render',
});
res.json({
status: progress.done ? 'completed' : 'processing',
progress: progress.overallProgress,
downloadUrl: progress.outputFile,
});
});
app.listen(3001, () => {
console.log('Video API running on http://localhost:3001');
});
10.3 Teste sua API com Apidog:
Use o Apidog para testar seus endpoints de geração de vídeo:

- Crie uma nova requisição para
POST /api/videos/generate - Defina o corpo:
{
"template": "company-intro",
"props": {
"companyName": "TestCorp",
"tagline": "Testing made easy"
},
"format": "mp4"
}
- Envie e verifique se a resposta contém um
jobId - Monitore o endpoint de status até que
status: "completed"
Os recursos de teste automatizado do Apidog ajudam você a validar se seu pipeline de geração de vídeo funciona de forma confiável.

Exemplo Completo: Gerador de Vídeos de Marketing
Aqui está um exemplo completo que você pode usar como template.
Prompt para o Claude Code:
Create a complete marketing video generator with these features:
1. Template: "social-promo"
- Duration: 15 seconds (450 frames at 30fps)
- Resolution: 1080x1080 (Instagram square)
2. Scenes:
- Hook text (0-3s): Big bold text that grabs attention
- Product image (3-9s): Display a product with Ken Burns effect
- Features list (9-12s): 3 bullet points appearing sequentially
- CTA (12-15s): "Shop Now" with pulsing animation
3. Props:
- hookText: string
- productImageUrl: string
- features: string[] (array of 3 items)
- ctaText: string
- brandColor: string
4. Include audio ducking for when text appears
Generate all files needed for this to work.
Claude Code irá gerar um template de vídeo completo, pronto para produção, que você pode personalizar e renderizar em escala.
Solução de Problemas Comuns
Problema: "Cannot find module 'remotion'"
# Solução: Reinstale as dependências
rm -rf node_modules
npm install
Problema: Fontes não carregando
// Adicione a importação da fonte ao seu componente
import { loadFont } from '@remotion/google-fonts/Inter';
const { fontFamily } = loadFont();
// Use nos estilos
style={{ fontFamily }}
Problema: Vídeo renderiza preto
- Verifique se seus componentes retornam conteúdo visível
- Verifique se
AbsoluteFilltem uma cor de fundo definida - Certifique-se de que as animações não estão todas com opacidade 0
Problema: Claude Code não reconhece as Remotion skills
# Reinstale a skill
npx skills add remotion-dev/skills
# Verifique se .claude/skills/remotion/SKILL.md existe
ls .claude/skills/remotion/
# Reinicie o Claude Code
Problema: Erros de incompatibilidade de versão
# Verifique e atualize as versões do Remotion
npx remotion versions
# Isso geralmente corrige problemas de compatibilidade
Construindo APIs de geração de vídeo? Experimente o Apidog gratuitamente para projetar, testar e documentar seus endpoints. Valide esquemas de requisição, automatize cenários de teste e garanta que seu pipeline de vídeo lida com casos extremos de forma elegante.
