Toonfacts: curtas animados de fatos, uma habilidade
Diga o que quiser em palavras simples. Esta única habilidade faz todo o trabalho: ideia, fatos, roteiro, plano de cenas, legendas, narração ElevenLabs, construção, auto-revisão, renderização e atualizações posteriores. Nunca peça ao usuário para explicar o estilo: ele está definido nesta habilidade.
Modos (escolha a partir das palavras do usuário)
| Usuário diz | Modo | Leia |
|---|
| "novo vídeo", "novo vídeo sobre X", "me surpreenda", "faça o próximo curta" | Novo | docs/new-video.md |
| "atualizar vídeo ", "corrigir o vídeo", "mudar X em ", "aplicar as regras mais recentes" | Atualizar | docs/update-video.md |
| "continuar vídeo " (após uma etapa manual, como salvar o áudio) | Continuar | docs/new-video.md, retomar na primeira fase ausente |
| "revisar vídeo", "verificar ", "verificar este mp4" | Revisar | docs/review.md apenas |
| "ideias de vídeo", "me dê ideias" | Ideias | docs/new-video.md Fase 1 apenas: pesquisar histórias reais e fatos interessantes, pontuá-los em força da história e força do gancho, registrá-los em videos/_ideas.md, mostrar os 5 melhores com uma história de uma linha, sua forma e um gancho rascunhado, não construir nada |
| "atualizar a habilidade" | Atualizar skill | Pré-voo etapa 2 apenas, depois relatar a mudança de versão |
Se o pedido não for claro, escolha Novo quando nenhum vídeo for nomeado e Atualizar quando um for. Como o vídeo é construído e como deve parecer está em docs/engine.md; tanto Novo quanto Atualizar o usam. | | |
Regras operacionais (todos os modos)
- Uma cena deve significar o que a voz diz, e é verificada mecanicamente. Cada tomada declara o que afirma (o que é lido, quem olha para o quê, o que aponta para o quê, o que é segurado) e chama
assertScene; cada texto pintado em um adereço passa por fitText. tools/check_scene.py bloqueia a renderização até que essas chamadas existam. Nunca renderize além de uma verificação com falha, e nunca corrija um letreiro cortado reduzindo seu texto ou aumentando uma tolerância: corrija a geometria.
- O gancho é um portão, não um enfeite. Nenhum roteiro é escrito até que uma primeira linha passe pelo portão do gancho em
docs/new-video.md Fase 2, e nenhum vídeo é entregue até que o bloco do gancho no topo de templates/review_checklist.md passe. Uma primeira linha fraca é motivo para redigir, nunca algo para contornar depois.
- Não faça perguntas. Tome decisões razoáveis, escreva-as no
NOTES.md do vídeo, continue. Pare apenas quando a narração não puder ser criada (consulte docs/new-video.md Fase 3), uma ferramenta necessária estiver faltando ou uma decisão não puder ser desfeita.
- Uma pasta por vídeo, tudo dentro dela:
videos/<slug>/ (slug = título em palavras minúsculas unidas por hífens). MP4 final e publish.txt no topo, arquivos de trabalho em source/, renderizações antigas em versions/. Rascunhos (imagens estáticas, folhas de contato, renderizações de teste) vão apenas em work/<slug>/. Nunca deixe trabalho apenas na conversa.
- Gaste créditos ElevenLabs uma vez por narração (uma tomada). Regere apenas quando as palavras faladas mudarem, o áudio for inutilizável ou a tomada falhar na verificação de desempenho em
docs/new-video.md Fase 3 etapa 4 (risos ou atuação exagerada) - então mais uma vez, com as tags reduzidas.
- Natural vence expressivo. O narrador nunca ri: nenhum
[laughs] ou [chuckles] em lugar nenhum, no máximo 3 tags em um roteiro inteiro, e nenhum ponto de exclamação no texto da narração. As imagens carregam a comédia; um narrador rindo da própria piada é o sinal mais claro de uma tomada de IA.
- Nunca imprima ou salve chaves de API. O ElevenLabs MCP é adicionado pelo usuário no Claude Code; use-o como conectado.
- Nunca publique ou faça upload de um vídeo. A entrega é o MP4 final, sua miniatura e um
publish.txt pesquisado (título, descrição, hashtags, tags).
- Resposta final: algumas linhas (o que foi feito ou alterado, onde está, as escolhas que importam, um próximo passo). Nenhum resumo passo a passo.
Pré-voo (silencioso, toda execução, todo modo)
- Projeto e pastas. Encontre o projeto Remotion (a pasta com
package.json e src/). Crie videos/, videos/_ideas.md e work/ se estiverem faltando.
- Mantenha esta habilidade atualizada. Se esta pasta de habilidade for um clone git, execute um
git pull --ff-only silencioso e leia CHANGELOG.md para saber o que mudou; mencione a nova versão na resposta final apenas se ela mudou. Se não for um clone git, pule.
- Ferramentas. Verifique
ffmpeg, Python 3 e @remotion/three (instale @remotion/three e three no projeto se estiverem faltando). Encontre as ferramentas ElevenLabs MCP (nomes como text_to_speech, generate_speech, creative_generate_speech, list_voices, speech_to_text, transcribe); carregue-as com ToolSearch se adiado. Se não houver nenhuma, continue até a narração, escreva NEEDS_AUDIO.md explicando que o ElevenLabs MCP deve ser conectado (ou o áudio fornecido), e pare aí.
- Habilidades separadas antigas. Se
.claude/skills/cartoon-3d-short/ ou .claude/skills/new-video/ também existirem, não as use. Diga ao usuário uma vez na resposta final que eles podem remover essas duas pastas, porque esta habilidade substitui ambas.
- Arquivos auxiliares legados. Exclua
video-ideas/SKILL-UPDATE.md (primeira linha começa com "# Instructions for Claude Code") e video-ideas/README.md (primeira linha "# video-ideas") se presentes. Nunca exclua mais nada.
- Renomear arquivos de publicação antigos (uma vez). O arquivo de publicação agora é texto simples, não Markdown, porque o usuário copia dele e não quer lê-lo renderizado. Para cada
videos/<slug>/publish.md, copie-o para videos/<slug>/publish.txt, removendo o Markdown conforme avança (descarte #, **, crases, barras de tabela; transforme títulos em maiúsculas e mantenha o conteúdo idêntico), e diga ao usuário na resposta final quais arquivos publish.md ele pode excluir agora. Nunca os exclua você mesmo.
- Migrar o layout antigo (uma vez, movendo, nunca excluindo). Se
video-ideas/ ou out/ existirem de uma versão mais antiga:
video-ideas/_ideas.md torna-se videos/_ideas.md.
- Para cada
video-ideas/<slug>/: publish.md (ou publish.txt) vai para videos/<slug>/publish.txt; todos os outros arquivos (script.md, voiceover*.mp3, words.json, NOTES.md, REVIEW.md, CHANGES.md, NEEDS_AUDIO.md, folhas de revisão) vão para videos/<slug>/source/.
- Combine cada renderização final em
out/ com seu slug pelo nome do arquivo ou título (out/<slug>.mp4, ou um nome como The_Man_Who_...): o mais novo torna-se videos/<slug>/<slug>.mp4, os mais antigos videos/<slug>/versions/<slug>_v1.mp4, _v2.mp4 por data.
- Todo o resto em
out/ (imagens estáticas, folhas de contato, QA, renderizações de teste, pastas de rascunho por vídeo) é movido para work/legacy-out/, e os dois arquivos auxiliares acima para work/legacy/. Qualquer coisa que você não puder combinar fica lá também.
- Ao final, liste o que foi movido para onde na resposta final (uma lista curta) e diga ao usuário que as pastas vazias
video-ideas/ e out/ podem ser excluídas. Não toque em src/, public/, scripts/, audio/ ou backup/, e deixe todos os arquivos já em work/ onde estão.
Estrutura de pastas
videos/ # tudo finalizado ou em andamento, uma pasta por vídeo
_ideas.md # todo tópico usado ou rejeitado (leia primeiro, anexe por último)
<slug>/
<slug>.mp4 # VÍDEO FINAL: o arquivo para enviar
thumbnail.jpg # capa construída, 2160x3840 (não um quadro bruto)
publish.txt # título, descrição, hashtags, tags, categoria, comentário fixado + fontes de pesquisa
source/ # script.md voiceover.mp3 words.json NOTES.md REVIEW.md CHANGES.md
versions/ # renderizações anteriores: <slug>_v1.mp4 ... (mantidas pelo modo Atualizar)
work/ # rascunho, seguro excluir: imagens estáticas, folhas de contato, QA, renderizações de teste, REMOTION_TMP se não houver outro drive
<slug>/
O que está nesta habilidade
| Caminho | O que é |
|---|
docs/new-video.md | Novo e Continuar: ideia, pesquisa, roteiro, narração, construção, revisão, entrega |
docs/update-video.md | Atualizar: classificar a mudança, proteger versões antigas, aplicar, re-renderizar, verificação de regressão |
docs/review.md | O ciclo de revisão (folhas de contato, verificações, pontuações, correções) |
docs/engine.md | Como o vídeo é construído e deve parecer: pipeline, regras para cada vídeo, enquadramento, iluminação, fluxo de câmera, legendas, reações, portão de qualidade |
references/story_format.md | O formato de história de seis batidas, caixa de ferramentas de comédia, números de ritmo |
references/ (outros) | Bíblia de estilo, relatórios medidos, quadros e folhas de referência |
templates/ | Código fonte do renderizador (bridge/), síntese de áudio, scripts, plano de cenas, modelos de roteiro e revisão |
docs/history/ | Arquivo dos README, CHANGELOG e redação original dos dois repositórios anteriores. Não são instruções |
tools/review_video.sh | Verificações de duração, corte bruto e volume, além de folhas de contato |
tools/make_thumbnail.py | Projeta uma miniatura de Shorts 2160x3840: recorta o personagem, coloca-o em um fundo feito, empilha o texto |
tools/check_scene.py | Bloqueia uma renderização cujas tomadas nunca declararam sua verdade física, ou cujo texto de adereço não foi ajustado |
tools/check_voice.py | Verifica uma tomada de narração: velocidade, pausas, volume e os segundos onde a entrega é muito rápida (risos, pressa) |