animation-studio: ideia → roteiro → locução → renderização segura → MP4
Este arquivo é um roteador. Faça as quatro grandes perguntas, verifique o hardware e carregue apenas os arquivos que o trabalho precisa:
content/<pacote>.md (regras de escrita e precisão) + styles/<estilo>.md (aparência; seu bloco JSON é o preset que a engine lê) + engines/<engine>/README.md (como renderizar). Ferramentas compartilhadas estão em shared/.
Encontre a pasta da skill (SKILL_DIR) = a pasta que contém este arquivo. Claude Code mostra como o diretório base da skill; outros agentes: a pasta do SKILL.md que lhe foi dito para ler. Sempre chame ferramentas como "$SKILL_DIR/shared/...", com aspas (caminhos geralmente contêm espaços). Encontre um Python 3.10+ (python3, python ou py -3) e chame-o de PY. Após setup_check.py --install, use o python do venv que ele imprimir.
Mantenha o usuário informado com uma lista de tarefas. Escreva cada entregável em videos/<slug>/ na pasta de trabalho do usuário (slug = nome curto em minúsculas com hífen). Explique em linguagem simples.
O que funciona nesta versão
| Parte | Status |
|---|---|
| Pacotes de conteúdo | ✅ Bíblia (content/bible.md) · ✅ Tecnologia (content/tech.md) · ✅ História/anúncio geral (content/general-story.md) · ✅ Matemática/educação (content/education-math.md) |
| Estilos | engine A: ✅ Stickman · ✅ 2D Plano · ✅ Storybook · ✅ Lousa · ✅ Vetor moderno — engine B: ✅ Manim (+ Cores de Lousa / Vetor moderno) — engine C: ✅ 3D Cartoon — engine D: ✅ 3D Cinematográfico |
| Engines | ✅ A py2d (Python 2D) · ✅ B Manim (LaTeX opcional) · ✅ C 3D Cartoon (lento: limitado por tier) · ✅ D Blender (previews Eevee, finais Cycles no POWER) |
| Formatos | ✅ 9:16 · ✅ 16:9 · ✅ 1:1 · ✅ 4:5 |
| Legendas | ✅ .srt sempre + queimadas com destaque de palavra (shared/captions.py) |
| Locução | ✅ gravação do usuário · ✅ Piper TTS (shared/voice.py, gratuito, offline) |
| Música/EFX | ✅ sintetizada (shared/sound.py) · ✅ arquivo de música licenciado pelo usuário |
| Projetos de editor | ✅ Kdenlive · ✅ Shotcut · ✅ DaVinci Resolve (FCPXML) · ✅ Blender VSE · 🧪 OpenShot (experimental) · ✅ pacote de editor (CapCut, qualquer editor) |
| Kit de marca | ✅ marcas salvas (pasta do usuário), marca d'água, lower third, end card da marca, cores da marca em qualquer estilo (shared/brand.py, docs/branding.md) |
| Instalações de software | ✅ um registro verificado (shared/tools.yaml) com comandos para Windows, macOS e cada família Linux; nunca instala sem um sim |
Se o usuário escolher um item 🚧, diga claramente, ofereça a opção ✅ mais próxima e ainda assim entregue o pacote de roteiro.
Etapa 1: Coleta (AskUserQuestion, no máximo 4 perguntas por chamada; pule o que já foi respondido)
Chamada 1
- Conteúdo: História bíblica · Tecnologia/programação · Matemática/educação · História/anúncio geral
- Estilo: ofereça o padrão para o conteúdo primeiro (Bíblia → Storybook · Tecnologia → Vetor moderno · Matemática → Manim · Geral → 2D Plano), depois 2–3 outros. Mencione Stickman para peças rápidas e leves.
- Formato(s) (multiSeleção): 9:16 1080x1920 (TikTok/Reels/Shorts) · 16:9 1920x1080 (YouTube/projetor) · 1:1 1080x1080 · 4:5 1080x1350.
PY shared/formats.py tableimprime a tabela de plataformas. - Qualidade: Prévia (rápida, 720p) · Final (1080p). Recomende sempre uma Prévia de 5 s primeiro.
Chamada 2 (apenas o que se aplica)
0. Marca? Nenhuma · Usar marca salva (lista de PY "$SKILL_DIR/shared/brand.py" list) · Criar nova marca. Criar nova: pergunte cada campo UM de cada vez, todos opcionais (nome, slogan, site, arquivo de logotipo, telefones, WhatsApp, e-mails, redes sociais, cores, fonte OFL, CTA) e salve cada um com brand.py set (ele valida formatos de telefone/e-mail/URL/cor); logotipo via brand.py logo, fonte via brand.py font. Nunca invente detalhes de contato: apenas o que o usuário fornecer (ou confirmar do próprio site). Em seguida, as opções, com padrões de docs/branding.md: marca d'água (anúncio/promoção LIGADO; Bíblia, tecnologia e matemática DESLIGADO), canto/tamanho/opacidade/logotipo ou logotipo+nome · lower third (quando, por quanto tempo) · end card com CTA + contatos (anúncio/promoção LIGADO) e sua duração · recorar o estilo com as cores da marca (sim/não).
5. Tópico/história e duração (30 s · 60 s · 90 s · 2–3 min; outras durações via "Outro"). Pacotes de conteúdo adicionam os seus (Bíblia: público).
6. Locução: Minha própria gravação (padrão) · Piper TTS (gratuito, offline; voz padrão en_US-ljspeech-medium, dados de domínio público). Piper precisa de uma instalação única (setup_check.py --tts --install) e download de voz (voice.py --download, ~60 MB): pergunte primeiro.
7. Legendas queimadas? Sugira Sim para 9:16 e 1:1 (a maioria assiste sem som), Não para 16:9. Um arquivo .srt é sempre criado.
8. End card "Feito com animation-studio"? Desligado por padrão; apenas opt-in. Nunca adicione marca d'água.
9. Saída: MP4 finalizado · Arquivo de projeto para um editor · Ambos.
Escolha do editor (apenas se a saída incluir um arquivo de projeto): execute PY "$SKILL_DIR/shared/tools.py" status --kind editor e mostre a lista numerada COMPLETA (✅ instalado + versão · ❌ não instalado · ⚠️ não suportado aqui, por exemplo, editores desktop em um servidor headless). O usuário escolhe exatamente um (AskUserQuestion: até 4 opções com editores instalados primeiro; o restante pode ser digitado em "Outro"). Se a escolha for ❌, mostre PY "$SKILL_DIR/shared/tools.py" flow <editor> palavra por palavra (o que é, o comando de instalação para ESTE SO/distro/shell, o link oficial) e pergunte: Instalar agora (eu executarei) · Eu mesmo instalarei, depois diga "pronto" · Escolher outro editor · Pular, entregue MP4 + pacote de editor. "Instalar agora" → tools.py install <editor> --yes (diga primeiro se o Windows mostrará um aviso de permissão ou se uma etapa precisar de sudo; etapas sudo são passadas ao usuário como ! sudo ...). Após qualquer instalação ou "pronto": execute status novamente, confirme ✅, continue de onde parou. CapCut e editores não suportados recebem o pacote de editor. Detalhes: docs/editors.md.
Registre as respostas em videos/<slug>/brief.md.
Etapa 2: Verificação de hardware (antes de qualquer renderização; nunca pule)
Execute PY "$SKILL_DIR/shared/hwcheck.py" e mostre sua tabela e tier em uma mensagem curta. Ele também salva o perfil do sistema (SO + versão, WSL, Apple Silicon, distro Linux e família, gerenciadores de pacotes, shell, display) que toda etapa posterior lê. Todo comando de instalação que você mostrar ou executar vem de PY "$SKILL_DIR/shared/tools.py" cmd <ferramenta> (combinado com este SO, distro e shell); nunca digite um de memória. Sem display (headless) → apenas renderização: sem aplicativos de editor.
| Tier | Regra | Engines | Limites |
|---|---|---|---|
| LITE | < 12 GB RAM ou < 4 threads de CPU | A, B | Apenas 720p; 3D Cartoon e Blender bloqueados (ofereça imagens estáticas) |
| STANDARD | entre | A, B completo; C ≤ 5 s prévia (mais longo apenas com confirmação + retomada); D Eevee ≤ 5 s a 720p, amostras baixas | 1 trabalho de renderização; workers = threads − 2 |
| POWER | ≥ 32 GB RAM + GPU dedicada ≥ 6 GB VRAM | todos, Cycles na GPU | workers = threads − 1 |
| Se o laptop estiver na bateria, avise antes de qualquer renderização com mais de um minuto. Se a RAM livre estiver abaixo de 25%, peça ao usuário para fechar aplicativos grandes. |
Etapa 3: Escolher a engine (estilo → engine), depois carregar arquivos
| Estilo | Engine | Carregar |
|---|---|---|
| Stickman, 2D Plano, Storybook, Lousa, Vetor moderno | A engines/py2d | styles/<estilo>.md, engines/py2d/README.md |
| Manim (matemática, algoritmos, diagramas); cores de Lousa/Vetor moderno também funcionam aqui | B engines/manim | styles/manim.md (ou o estilo escolhido), engines/manim/README.md |
| 3D Cartoon | C engines/toon3d (uma pasta de projeto com story.js + world.js) | styles/toon-3d.md, engines/toon3d/README.md |
| 3D Cinematográfico | D engines/blender (scene.json, Z up) | styles/cinematic-3d.md, engines/blender/README.md |
| Se o tier bloquear a engine, explique o porquê e ofereça: a mesma história em um estilo da engine A, ou apenas algumas imagens estáticas. O usuário pode substituir um limite somente após um aviso claro ("isso pode travar ou superaquecer seu computador; salve seu trabalho primeiro"). |
Em seguida, carregue content/<pacote>.md e siga suas etapas de pesquisa e escrita.
Etapa 4: Pacote de roteiro (regras do pacote de conteúdo), então PARE
Cada pacote entrega: a narração em um bloco copiável (≈ 3,7 palavras/s a menos que o pacote diga o contrário) com contagem de palavras e duração → script.txt; uma lista de cenas → shotlist.md; extras do pacote (Bíblia: tabela de fidelidade, notas de estudo, descrição); e fontes no final. Nunca invente versículos, citações, APIs, flags, versões ou fatos: busque ou execute-os, caso contrário, marque NÃO VERIFICADO.
Em seguida, entregue a locução (gravação do usuário: mp3/wav, sem música) e aguarde o áudio. Se o usuário queria apenas o roteiro, pare aqui.
Etapa 5: Produção
- Setup:
PY "$SKILL_DIR/shared/setup_check.py" --engine <engine>→ tabela ✅/❌. Uma ferramenta ausente (Blender, Manim, Node, LaTeX, Inkscape...) usa o mesmo fluxo que os editores: mostretools.py flow <ferramenta> --for engine, depois Instalar agora · Eu mesmo instalarei, depois diga "pronto" · Escolher outro estilo · Pular (apenas roteiro, lista de cenas e referências); verifique novamente. Pacotes Python vão apenas para o próprio.venvda skill (--install, após um sim). - Locução + tempo. Piper:
PY "$SKILL_DIR/shared/voice.py" script.txt voice.wav --timing work --speed 0.85(tempos de frase exatos, sem adivinhação). Gravação do usuário:PY "$SKILL_DIR/shared/timing.py" voice.mp3 script.txt --out work. Ambos escrevemwork/words.json+work/phrases.json. - Cena: engine A:
videos/<slug>/scene.json; engine B: uma cena Manim.pyque começa comfrom studio import *; engine C:videos/<slug>/story.js+world.js; engine D: umscene.jsondo Blender (formatos nos READMEs das engines). Uma cena por frase; mantenha rostos, texto e props chave dentro da zona segura de cada formato escolhido (shared/formats.md). - Verificação visual: renderize 3–6 imagens estáticas por formato (
--frames 0,60,...), faça uma folha de contato (PY "$SKILL_DIR/shared/sheet.py" sheet.jpg <dirs> --safe <fmt>), mostre-a e verifique contra as regras do pacote de conteúdo (Bíblia: reverência + violência). Corrija antes de renderizar. - Estimativa:
PY "$SKILL_DIR/shared/estimate.py" --engine <engine> scene.json --fmt <fmts> --quality <q>(Manim:--engine manim scene.py --name SceneName --timing work/phrases.json; 3D Cartoon:--engine toon3d <pasta do projeto>; Blender:--engine blender scene.json) →DECISION: OKrenderizar ·ASKinformar ao usuário "~X min, Y GB" e perguntar (ofereça a prévia de 5 s) ·REFUSEdisco insuficiente (precisa de 2× a estimativa): peça ao usuário para liberar espaço. - Renderize um formato de cada vez (nunca dois trabalhos ao mesmo tempo). Renderizações longas são executadas em segundo plano; a engine executa com baixa prioridade, retoma do último quadro salvo se reexecutada e pausa a si mesma (código de saída 4) se a RAM livre cair abaixo de 15%. Avise o usuário que ele pode continuar trabalhando.
- Áudio: música
PY "$SKILL_DIR/shared/sound.py" music music.wav --seconds <duração do vídeo> --mood warm|calm|tense|tech|playful, EFX... sfx sfx.wav --seconds <len> --cues cues.json(pop, whoosh, type, chime, success, swell, rain, soft thunder), depoisPY "$SKILL_DIR/shared/mix.py" voice.wav music.wav sfx.wav --music-db -12 --sfx-db -10 --seconds <len>(música nunca mais alta que −6 dB abaixo da voz; −9 a −12 para vídeos com muita fala ou reverentes). Um arquivo de música fornecido pelo usuário substitui music.wav: lembre-o uma vez de que ele deve ter os direitos. 7b. Marca (se escolhida): recolorir antes de renderizar (brand.py recolor <marca> --style <estilo> --out style_<marca>.md, use-o como o estilo da cena); após a renderização,brand.py apply <marca> frames_<fmt> branded_<fmt> --fmt <fmt> [--watermark tr,9,90,logo] [--lower-third a,b] [--end-card 2.5 --cta "..."] [--captions]e usebranded_<fmt>daqui em diante. Com um end card, misture o áudio com--seconds <nova duração>. - Legendas + finalização + QA:
PY "$SKILL_DIR/shared/captions.py" work out/<Título> --style <estilo> --fmt <fmt> --quality <q>(→.srt+_<fmt>.ass), depoisPY "$SKILL_DIR/shared/finish.py" frames_<fmt> out/<Título>_<fmt>.mp4 --audio mix.wav --quality <q> [--ass out/<Título>_<fmt>.ass] --srt out/<Título>.srt [--end-card apenas se optou por ele]. Verifique as linhas de QA (trechos pretos/parados, cerca de −14 LUFS) e observe a folha_qa.jpg. - Projeto do editor (se escolhido):
PY "$SKILL_DIR/shared/editors.py" prepare --frames frames_<fmt> --shots "<f0>-<f1>:<nome>,..." --final out/<Título>_<fmt>.mp4 --voice voice.wav --music music.wav --sfx sfx.wav --srt out/<Título>.srt --out videos/<slug>/editordepois... export videos/<slug>/editor/timeline.json --editor <kdenlive|shotcut|openshot|resolve|blender-vse|pack>. Mostre sua tabela de verificação (o tempo deve corresponder ao MP4; Kdenlive/Shotcut também recebem uma renderização melt de 2 s). Avise o usuário como abri-lo (docs/tools/.md). - Entregue o(s) MP4(s), o .srt, o projeto do editor, se houver, e uma linha por cena descrevendo o que ela mostra. End card opcional apenas se o usuário optou por ele.
Regras de segurança (sempre)
- Nunca inicie uma renderização sem a Etapa 2 e a etapa 5 (estimativa). Sempre ofereça "Prévia de 5 s primeiro".
- Respeite os limites do tier; substituições apenas após um aviso claro e um sim.
- Um trabalho pesado por vez. Nunca exclua ou sobrescreva os arquivos do usuário sem perguntar (re-renderizar em uma pasta de quadros existente retoma;
--forcesobrescreve, portanto, pergunte). - Se uma ferramenta estiver faltando ou o usuário recusar instalações, ainda assim entregue o roteiro, a lista de cenas e as referências.
Créditos e licenças
Código: MIT (veja LICENSE). Código de terceiros incluído está listado em THIRD_PARTY_NOTICES.md. A skill não inclui fontes, músicas ou imagens: ela usa fontes do sistema e som sintetizado. Os vídeos dos usuários são deles: sem marca d'água forçada; o end card é opt-in.