Communitygithub.com

munna-68/animation-video-skill

Transforme uma história, ideia ou roteiro de narração em um curta de animação 2D desenhado à mão (vertical 1080x1920 mp4, cerca de 35-45 s) com animação de personagens, narração VoiceStudio, legendas embutidas, efeitos sonoros e música, além de uma legenda para Instagram.

O que é animation-video-skill?

Esta skill permite que você crie curtas-metragens de animação 2D com aparência desenhada à mão a partir de uma história, logline, lista de cenas ou roteiro. Tudo é feito de ponta a ponta, sem necessidade de intervenção do usuário: desde a geração do roteiro e narração até a animação, som e renderização final. A skill suporta dois estilos artísticos distintos — 'ink' (traços grossos de tinta) e 'paper' (colagem de papel recortado) — e usa um sistema de animação baseado em JavaScript, com um arquivo `film.js` que descreve a cena em cada instante de tempo. O resultado é um vídeo MP4 vertical (1080x1920) de 35 a 45 segundos, com animação de personagens que se esticam, esmagam, piscam e reagem, além de câmera sempre em movimento, textura de papel e tinta, e sincronia perfeita com a narração gerada pelo VoiceStudio. A skill é ideal para criadores de conteúdo, empreendedores e qualquer pessoa que queira transformar rapidamente uma ideia em um vídeo animado para redes sociais como Instagram e TikTok.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/munna-68/animation-video-skill/tree/HEAD

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

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 momento t. 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.

#EtapaResultado
0Pré-vootodas as ferramentas presentes, VoiceStudio em execução
1Leia a história, escolha o estilodecisões tomadas, pasta do projeto criada
2Escreva o roteirovo/script.json, no máximo 130 palavras faladas
3Gere a vozum wav verificado por linha
4Construa a linha do tempotimeline.js, duração do filme 35-45 s
5Planeje as tomadasum comentário de plano de tomadas no topo de film.js
6Escreva o filmefilm.js, cena por cena, verificando stills enquanto avança
7Revise o filme inteirofolhas de contato visualizadas, defeitos corrigidos
8Exporteo MP4
9EntregueMP4 + 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:

  1. Estilo. Existem dois. Veja SK/references/characters-ink.jpg e characters-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/null para ver qual foi usado). Caso contrário, escolha pela história.
  2. 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.
  3. 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 em script.json e 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):

  1. SK/references/engine.md - todas as funções que você pode chamar.
  2. SK/references/kit-ink.md ou kit-paper.md - personagens, poses, adereços do seu estilo.
  3. SK/references/recipes.js - 25 movimentos testados para copiar. Veja também recipes-<style>.jpg.
  4. 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):

  1. Edite apenas film.js (e cores em style.js se necessário). Nunca edite engine.js ou index.html.
  2. 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;
  3. Comece uma ação 0,1-0,3 s ANTES de sua palavra para que ela caia NA palavra.
  4. Poses e objetos usam q (tempo amostrado 12 vezes por segundo: a sensação de animação à mão). Câmera, tremor e wipes usam t (suave).
  5. Nada pode estar visível antes de sua sinalização. Use pop(...) ou if (q < tCue) ... para que as coisas apareçam quando a voz as menciona, não antes.
  6. Sem Math.random(), sem Date, sem animação CSS, sem setTimeout. Use h(n) para aleatoriedade. O filme deve dar a mesma imagem toda vez para o mesmo t.
  7. 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.
  8. A ordem de desenho é profundidade: coisas desenhadas depois estão na frente. Fundo primeiro, depois objetos distantes, personagens, objetos próximos, depois efeitos.
  9. 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.
  10. Cada som pertence a um evento visível e é declarado com sfx(time, name) no mesmo tempo de sinalização que o evento. Uma music(...) 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:

  1. O MP4 finalizado (caminho do arquivo).
  2. O roteiro script.json narrado como texto (para que possam ver o que foi dito).
  3. 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).
  4. 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.

Habilidades Relacionadas