Vídeo de animação
Você está fazendo um curta-metragem de animação a partir de uma história. O usuário fornece uma história, uma logline, uma lista de cenas ou um roteiro. Você entrega um MP4 finalizado e uma legenda para Instagram. Você faz cada etapa sozinho e não para para pedir aprovação ao longo do caminho.
Os filmes que esta skill faz parecem animados à mão: personagens que se esticam, esmagam, piscam e reagem, uma câmera que nunca está parada, uma textura de papel e tinta, e uma imagem que bate exatamente na voz. Eles NÃO devem parecer uma apresentação de slides de imagens estáticas com texto. Tudo nesta skill existe para obter esse resultado de forma confiável, portanto siga as etapas em ordem e use o kit em vez de inventar seu próprio sistema.
SK abaixo significa a pasta desta skill: ~/.claude/skills/animation-video.
Como funciona (leia uma vez)
- O filme inteiro é um arquivo JavaScript,
film.js, que você escreve. Ele descreve o que está na tela em qualquer momentot. Um script renderiza quadro a quadro em Chrome headless e o ffmpeg faz o MP4. Não há editor de vídeo nem geração de imagens. - A narração é gerada primeiro, linha por linha. Seus tempos reais são escritos em
timeline.js. Cada momento do filme é então definido em relação à voz (por exemplo "0,2 s antes do início da linha 4"), para que imagem e voz nunca se separem. - Um kit fornece as partes difíceis prontas: um mecanismo (easing, câmera, cenas, legendas), dois estilos artísticos completos com personagens, poses e adereços, e 25 receitas de animação testadas.
- Você verifica seu trabalho renderizando quadros estáticos e olhando para eles. Isso não é opcional. Você não pode julgar um filme que não viu.
As etapas
Crie a lista de tarefas a partir destas etapas e trabalhe nelas em ordem.
| # | Etapa | Resultado |
|---|---|---|
| 0 | Pré-voo | todas as ferramentas presentes, VoiceStudio em execução |
| 1 | Leia a história, escolha o estilo | decisões tomadas, pasta do projeto criada |
| 2 | Escreva o roteiro | vo/script.json, no máximo 130 palavras faladas |
| 3 | Gere a voz | um wav verificado por linha |
| 4 | Construa a linha do tempo | timeline.js, duração do filme 35-45 s |
| 5 | Planeje as tomadas | um comentário de plano de tomadas no topo de film.js |
| 6 | Escreva o filme | film.js, cena por cena, verificando stills enquanto avança |
| 7 | Revise o filme inteiro | folhas de contato visualizadas, defeitos corrigidos |
| 8 | Exporte | o MP4 |
| 9 | Entregue | MP4 + roteiro narrado + legenda para Instagram + notas honestas |
Etapa 0 - Pré-voo
bash ~/.claude/skills/animation-video/scripts/preflight.sh
Cada linha deve dizer OK. Se VoiceStudio estiver AUSENTE, peça ao usuário para abrir o aplicativo VoiceStudio e espere; nunca substitua por uma voz diferente ou pule a narração. Corrija qualquer outra coisa com o comando que o script imprime.
Etapa 1 - Leia a história e escolha o estilo
Não faça perguntas ao usuário a menos que não haja história alguma. Decida estas coisas sozinho:
- Estilo. Existem dois. Veja
SK/references/characters-ink.jpgecharacters-paper.jpg(use a ferramenta Read nas imagens) para vê-los.ink: contornos grossos e ondulados de tinta, letreiros serifados robustos, cartoon retrô e aconchegante. Melhor para histórias com vilão, slapstick, lojas, ruas, piadas físicas.paper: colagem de papel recortado, sem contornos, sombras suaves, serifa elegante. Melhor para histórias sobre telefones, aplicativos, links, natureza, climas mais suaves ou modernos.- Se o usuário pediu um estilo, use-o. Caso contrário, se a pasta de trabalho já tiver um episódio anterior, use o OUTRO estilo (execute
head -3 */style.js 2>/dev/nullpara ver qual foi usado). Caso contrário, escolha pela história.
- Elenco. Quem é o herói (o dono de pequena empresa ou personagem principal)? Quem ou o que é o obstáculo (um vilão, um cliente confuso, um labirinto)? Dois personagens principais é suficiente.
- Pasta do projeto. Um nome curto baseado na história, na pasta de trabalho do usuário.
bash ~/.claude/skills/animation-video/scripts/new_project.sh "./film-<nome-curto>" ink # ou paper
Isso cria o projeto com um film.js inicial funcional. Leia esse arquivo inicial agora: ele é curto e mostra a estrutura exata que você manterá.
Etapa 2 - Escreva o roteiro
Leia SK/references/story.md primeiro. Ele tem a estrutura, o orçamento de palavras e exemplos práticos. As regras que mais importam:
- No máximo 130 palavras faladas no total. A voz fala cerca de 3,2 palavras por segundo, então 130 palavras equivalem a cerca de 43 s. Se o roteiro do usuário for mais longo, corte-o você mesmo, mantendo as melhores falas e a ordem da história. Não pergunte; informe a eles no final o que você cortou. Um curta-metragem que se move é sempre melhor do que um longo que arrasta.
- Uma linha por batida, 5-16 palavras cada, ids
l01,l02, ... Cada linha se torna um clipe de áudio e geralmente uma ideia visual. - Escreva para o ouvido: números por extenso ("quarenta", não "40"), sem emojis, sem símbolos, nomes de marcas escritos como soam ("Site Keep" para SiteKeep).
- A última linha é uma chamada que pede aos espectadores para comentar (veja os padrões da Marca abaixo).
Escreva para <project>/vo/script.json:
{"l01": "Conheça a Maya. Ela faz guloseimas artesanais do zero.",
"l02": "Então ela montou uma loja dentro de um enorme mercado online."}
Etapa 3 - Gere a voz
python3 ~/.claude/skills/animation-video/scripts/voice.py "./film-<nome-curto>"
Isso leva cerca de 20 s por linha (4-5 minutos para um roteiro completo): execute com um tempo limite de 10 minutos. Se parar no meio, execute o mesmo comando novamente; as linhas já narradas são mantidas. Gera cada linha com a voz do usuário (perfil 3a02464e, "ep1 D sample-locked", inglês, passos 16, velocidade 1.0, sem texto de instrução; estes são os padrões, não os altere a menos que o usuário diga o contrário), ouve novamente e imprime para cada linha OK ou DIF com o que ouviu.
Leia cada linha DIF e decida:
- OK: as mesmas palavras escritas de forma diferente ("SiteKeep" / "Site Keep", "40" / "quarenta", "dois" / "para", pontuação).
- Não OK: uma palavra está faltando, adicionada ou é uma palavra diferente ("o cardápio dela" ouvido como "nosso cardápio"). Regere apenas essas linhas:
voice.py <projeto> --only l05 l11. Se uma linha ainda falhar após mais duas tentativas, reformule essa linha ligeiramente emscript.jsone gere novamente.
Nunca envie uma linha com uma palavra ausente, adicionada ou errada.
Etapa 4 - Construa a linha do tempo
python3 ~/.claude/skills/animation-video/scripts/audio.py timeline "./film-<nome-curto>"
Isso imprime a duração total e o tempo de início e duração de cada linha. Em seguida, ajuste as pausas em <project>/film.json e execute novamente:
{"lead": 0.55, "gap": 0.4, "tail": 1.6, "gaps": {"l04": 0.7, "l09": 0.9}}
gapé a pausa padrão após uma linha. Dê uma pausa mais longa (0,6-0,9) após uma linha cujo visual precisa de espaço para se desenrolar: uma piada, uma queda, uma grande revelação, a virada da história.- Use 0,25-0,35 entre linhas que são um único pensamento.
tailé quanto tempo o cartão final segura após a última palavra (1,4-1,8).- Alvo total: 35-45 s. Acima de 46 s: corte uma linha do roteiro e refaça as etapas 3-4 para ela.
Sempre que você regravar uma linha depois, execute audio.py timeline novamente. Como cada sinalização é relativa à voz, o filme se ressincroniza sozinho.
Etapa 5 - Planeje as tomadas
Leia a seção "Do roteiro às tomadas" em SK/references/story.md. Em seguida, escreva o plano como um bloco de comentário no topo de film.js (não um documento separado). Uma linha por cena:
/* PLANO DE TOMADAS
A l01-l02 rua, dia Maya aparece atrás de sua barraca, acena. Câmera: aproximação lenta.
B l03-l04 mesma rua A sombra do Senhorio cai sobre ela, placa BATE (tremor, poeira). Ela pula.
C l05 porão A alçapão se abre, ela fica suspensa no ar, cai. Câmera segue para baixo.
...
Z l12 cartão final Wipe circular. Pergunta + "deixe um nos comentários". Herói espreita.
*/
Um bom plano tem: 5-8 cenas; uma imagem diferente pelo menos a cada 6 s; uma piada visual clara ou surpresa em cada cena; toda ideia abstrata transformada em algo físico (uma taxa se torna um pedágio, um algoritmo se torna um alçapão, um link confuso se torna uma selva); o humor passando de problema para alívio na solução; e um cartão final.
Etapa 6 - Escreva o filme
Antes de escrever, leia estes (são curtos e são a diferença entre um bom filme e um quebrado):
SK/references/engine.md- todas as funções que você pode chamar.SK/references/kit-ink.mdoukit-paper.md- personagens, poses, adereços do seu estilo.SK/references/recipes.js- 25 movimentos testados para copiar. Veja tambémrecipes-<style>.jpg.SK/references/craft.md- os números de tempo e regras que fazem parecer animado à mão.
Em seguida, escreva film.js nas quatro seções do inicial: configurações, tempos de sinalização, sinalizações sonoras, cenas.
Trabalhe uma cena de cada vez. Escreva a cena A, renderize dois ou três stills dela, olhe para eles, corrija, depois vá para a cena B:
node ~/.claude/skills/animation-video/scripts/render.mjs "./film-<nome-curto>" stills 1.2 3.5 6.0
Em seguida, abra <project>/check/sheet-1.jpg com a ferramenta Read. Se o comando imprimir PAGE ERROR, o filme tem um erro de JavaScript: corrija o primeiro erro impresso e execute novamente.
As dez regras de film.js (cada uma evita uma falha que já aconteceu):
- Edite apenas
film.js(e cores emstyle.jsse necessário). Nunca editeengine.jsouindex.html. - Nunca digite um tempo bruto. Cada sinalização é construída a partir da voz:
L('l04')(início da linha),E('l04')(fim da linha),wt('l04', 'três rivais')(quando uma frase é falada), mais ou menos um pequeno deslocamento. Dê a cada um um nome:const tBatida = L('l04') + 0.25; - Comece uma ação 0,1-0,3 s ANTES de sua palavra para que ela caia NA palavra.
- Poses e objetos usam
q(tempo amostrado 12 vezes por segundo: a sensação de animação à mão). Câmera, tremor e wipes usamt(suave). - Nada pode estar visível antes de sua sinalização. Use
pop(...)ouif (q < tCue) ...para que as coisas apareçam quando a voz as menciona, não antes. - Sem
Math.random(), semDate, sem animação CSS, semsetTimeout. Useh(n)para aleatoriedade. O filme deve dar a mesma imagem toda vez para o mesmot. - Desenhe fundos muito maiores que a tela (por exemplo, x de -1000 a 2080) para que movimentos de câmera e tremor nunca mostrem uma borda vazia.
- A ordem de desenho é profundidade: coisas desenhadas depois estão na frente. Fundo primeiro, depois objetos distantes, personagens, objetos próximos, depois efeitos.
- Mantenha coisas importantes dentro de x 70-1010 e y 180-1400. As legendas ficam em y 1420-1560 e os próprios botões do Instagram cobrem tudo abaixo de y 1600 e a borda direita.
- Cada som pertence a um evento visível e é declarado com
sfx(time, name)no mesmo tempo de sinalização que o evento. Umamusic(...)para a parte problemática, outra para o alívio.
O padrão de qualidade. Antes de considerar uma cena finalizada, ela deve ter todos estes:
- Vida em cada quadro. O herói pisca e respira (
POSE.idle(q)), algo no fundo se move (nuvem, letreiro balançando, formas flutuantes), e a câmera tem pelo menos uma aproximação lenta. Um quadro onde nada se move por mais de um segundo é um defeito. - Entradas e saídas são animadas, nunca um corte simples: aparecer com overshoot, cair com um salto, pular, sair zunindo com antecipação (receitas 1-6).
- Impactos acontecem em um quadro, juntos: esmagamento + tremor de tela + poeira ou explosão + um som (receita 3). Essa única coisa faz mais pela "sensação" do que qualquer outra.
- Personagens agem. Eles olham para o que está acontecendo (
look), reagem um momento DEPOIS que acontece (receita 9), e mudam de pose e expressão quando o clima da história muda. Nunca deixe um personagem em uma pose por uma cena inteira. - Uma piada por cena que torna a ideia física e um pouco engraçada.
- Texto legível. Letreiros e rótulos têm pelo menos 40 px de altura, 1-4 palavras, alto contraste, na tela por pelo menos 1 s, nunca cobertos por um personagem ou legendas.
- Uma transição real entre cenas (receitas 19-20, ou um movimento rápido de câmera dentro de um mesmo mundo), não apenas uma imagem substituindo outra.
Etapa 7 - Revise o filme inteiro
node ~/.claude/skills/animation-video/scripts/render.mjs "./film-<nome-curto>" check 36
Abra ambas as folhas de contato (check/sheet-1.jpg, sheet-2.jpg) com a ferramenta Read. Cada uma mostra 18 quadros em ordem cronológica, da esquerda para a direita, de cima para baixo; os tempos são impressos pelo comando. Percorra esta lista em cada quadro e anote o que encontrar antes de corrigir qualquer coisa:
- Texto cortado, sobrepondo outro texto, ou coberto por um personagem ou adereço
- Legendas cobrindo algo importante, ou um nome de marca dividido ou com erro ortográfico
(defina
CAPTION.replace, ou mova a ação para cima) - Uma grande área vazia (mais de um terço do quadro sem nada): aproxime a câmera, ou mova as coisas, ou adicione detalhes de fundo
- Algo visível antes da voz ter mencionado, ou ainda lá depois de dever ter desaparecido
- Um personagem ou adereço chave parcialmente fora da tela, minúsculo (menos de 250 px de altura), ou escondido
- Uma mão, braço ou objeto passando através de algo que deveria estar na frente ou atrás
- Dois quadros seguidos (com mais de 2 segundos de diferença) que parecem idênticos: adicione movimento ou um movimento de câmera
- A emoção errada em um rosto para aquele momento da história
- O cartão final: pergunta legível, prompt de comentário visível, nada sobreposto
Corrija o que encontrou, depois renderize stills apenas naqueles tempos para confirmar
(render.mjs <projeto> stills 4.2 11.8). Olhe para quadros individuais em tamanho real
(check/f003.jpg) quando uma folha for muito pequena para julgar. Faça no máximo duas rodadas completas de revisão; não polimento eterno, e também não pule a revisão.
Etapa 8 - Exporte
bash ~/.claude/skills/animation-video/scripts/build.sh "./film-<nome-curto>" "./<nome-curto>.mp4"
Isso leva de 2 a 10 minutos (estilo paper é mais lento): execute em segundo plano ou com um tempo limite de 10 minutos. Renderiza cada quadro, mistura voz + efeitos sonoros + música, e imprime uma verificação. Confirme: h264 1080x1920 a 30 fps com áudio aac, duração igual ao total da linha do tempo, volume médio entre -16 e -19 dB. Se a renderização imprimir PAGE ERROR, corrija e execute novamente.
Etapa 9 - Entregue
Dê ao usuário, nesta ordem:
- O MP4 finalizado (caminho do arquivo).
- O roteiro
script.jsonnarrado como texto (para que possam ver o que foi dito). - Uma legenda pronta para Instagram (2-3 frases resumindo a história ou fazendo uma pergunta, com 2-3 hashtags relevantes e uma chamada para comentar; veja os padrões da Marca).
- Notas honestas sobre o que você cortou ou mudou (se aplicável).
Não peça aprovação ou feedback. O trabalho está feito.
Padrões da Marca (use sempre)
- O nome do herói para esta série de filmes é o Dono do Negócio (ou o personagem principal nomeado pelo usuário).
- Chamada para comentar no final: "Qual foi sua...? Deixe um nos comentários." (adaptada para o contexto da história).
- Hashtags: #Animação #HistóriaDeNegócio #FeitoÀMão (mais uma específica da história, ex. #LojaOnline).
- Nenhuma marca ou logotipo real de terceiros: substitua por "MercadoGigante", "LojaBonita", etc.
- Tom: caloroso, espirituoso, solidário ao pequeno empresário. Sem cinismo.