name: comic-story-video version: 3.0.0 display_name: 漫画面讲故事 display_name_en: Comic Story Video description_zh: 把任意选题做成「图片在讲故事」的竖屏短视频——生成式线稿逐笔描出 + 代码叠台词气泡 + 单口配音 + 大字幕。声音是主线:念白本身必须是一条听得懂的故事。适用于漫画风格解说、历史与知识类短视频、贱萌吐槽向科普,或用户要求「像混子哥那样讲」「图片讲故事」「漫画分镜视频」时。 description_en: Turns any topic into a vertical "pictures tell the story" short video — generated line art traced stroke by stroke, speech bubbles composited in code, single-voice narration with burned-in subtitles. Audio leads: the narration alone must be a followable story. Use for comic-style explainers, history/knowledge shorts, snarky pop-science, or requests like "mixige-style", "comic storytelling", "let the images tell the story". description: 把任意选题做成「图片在讲故事」的竖屏短视频——生成式线稿逐笔描出 + 代码叠台词气泡 + 单口配音 + 大字幕。声音是主线:念白本身必须是一条听得懂的故事。适用于漫画风格解说、历史与知识类短视频、贱萌吐槽向科普,或用户要求「像混子哥那样讲」「图片讲故事」「漫画分镜视频」时。触发词:漫画讲故事、混子哥风格、图片讲故事、漫画分镜视频、贱萌科普、历史短视频、comic storytelling、mixige。 agent_created: true
História em Quadrinhos Contada por Imagens
Transforme qualquer tópico em um vídeo vertical de 110–135 segundos: o traço do desenho é desenhado traço por traço, os balões de fala aparecem um por um, narração em voz única com legendas grandes.
Produto: <projeto>/out/final.mp4 (1080×1920).
O áudio é a linha principal. Se você ouvir a faixa de áudio sozinha, deve ser uma história que faz sentido; as imagens são responsáveis por adicionar drama, não são pré-requisito para a compreensão.
Cinco Passos
① Definir a História → <projeto>/story.json
Crie o diretório, copie o modelo:
mkdir -p <projeto>/raw && cp templates/comic/story.example.json <projeto>/story.json
Primeiro preencha as três primeiras linhas do arquivo. Se não conseguir preencher, não escreva os quadros:
"story_line": "Quem / quer fazer o quê / onde está travado / resultado, em uma frase",
"question": "A pergunta que abre o vídeo",
"answer": "A resposta que fecha o último quadro e responde a pergunta"
A question deve destacar um ponto "que não faz sentido", não "o que é isso". A resposta não deve ser uma linha do tempo.
Em seguida, escreva a narration (narração) e bubbles[].text (texto dos balões) para cada quadro. A narração deve ter 440–540 caracteres (pontuação conta), calculando com base em 4.0 caracteres/segundo.
python scripts/pipeline.py <projeto> --stage script # Mas não prossiga
Critério para ①: As três linhas estão completas → contagem de caracteres dentro do intervalo → cada quadro tem narração → balões não saem do quadro → a função existe em charts.py.
② Gerar Imagens → <projeto>/raw/<id>.png
Escreva todos os prompts primeiro, depois gere as imagens de uma vez. Gerar uma imagem de cada vez pode levar uma ou duas horas, e alterar prompts no meio do caminho pode fazer o estilo visual variar.
python scripts/comic_gen.py <projeto> --list # Lista prompts não gerados, pula os já gerados
Gere as imagens uma a uma seguindo os prompts listados. Salve as imagens em raw/. Deve ser imagem para imagem, usando assets/reference/01-style-anchor.png como referência, com similaridade baixa.
python scripts/contact_sheet.py <projeto> # Monte uma folha de contato, veja uma vez
python scripts/pipeline.py <projeto> --stage image
Critério para ②: Na folha de contato, verifique apenas duas coisas: se quem deve estar presente está presente e se não há áreas totalmente pretas ou em branco. Ignorar todo o resto (texto esparso nas imagens, diferença de meia cabeça na altura, linhas sujas, cauda deslocada por dezenas de pixels) e seguir em frente.
③ Produção → final.mp4
python scripts/comic_run.py <projeto>
Execute sequencialmente: narração → camada de balões / infográficos → tela de encerramento → renderização traço a traço → composição vertical → queima de legendas.
Para reexecutar uma etapa específica, use o comic_*.py correspondente.
④ Verificação
python scripts/verify_media.py --file <projeto>/out/final.mp4 --expect <segundos>
ffmpeg -y -ss 3 -i <projeto>/out/final.mp4 -vframes 1 <projeto>/check/03.png
Extraia dois frames (no 3º segundo e na duração total do quadro × 0,75) e compare: a imagem está se movendo? a cor de fundo está correta? as legendas estão saindo do quadro? Em seguida, extraia a faixa de áudio e ouça de olhos fechados: se você consegue dizer "quem queria o quê, o que aconteceu em cada etapa, como terminou", está aprovado.
⑤ Entrega
<projeto>/out/final.mp4. Se precisar da versão widescreen, use out/story_flat.mp4.
Dez Regras Rígidas
As três primeiras regras são sobre a história; se violadas, significa que "depois de ouvir, não se sabe o que está sendo dito". As sete seguintes são sobre a produção; se violadas, significa que a imagem ou o som está errado.
1. Preencha primeiro story_line / question / answer. Se não conseguir preencher, não escreva os quadros.
Sem essas três linhas, escrever oito quadros e só perceber que está desconexo depois é o tipo mais caro de retrabalho.
2. Escolha a estrutura com base na relação entre protagonista e obstáculo; não use a mesma tabela de quadros para todos os tópicos.
| Protagonista vs. Obstáculo | Estrutura |
|---|---|
| Um adversário específico, vai e volta | Ataca → defende → intensifica → defende → golpe mais forte → defende |
| O próprio caminho não funciona mais | O velho ofício está morrendo → tenta várias coisas sem sucesso → algo inesperado surge → aposta nisso → dá certo → só então entende o que estava vendendo |
| Um fenômeno inexplicável, investiga ao contrário | O fato estranho → encontra a pessoa → a dificuldade dela na época → como ela resolveu |
| Chegou ao topo, derrubado por algo insignificante | O auge → uma rachadura → ninguém levou a sério → aposta errada → colapso |
O número de quadros segue a história, de 5 a 9 quadros.
3. Não numere eventos paralelos como rodadas. Se você trocar "primeira rodada" por "primeira vez" e a história não perder nada, então não é uma rodada — é um rótulo colado — delete-o. Da mesma forma, não use jargões de comentarista como "intensificar", "atingir o ápice", "mostrar as cartas", "segredos" — o público ouve códigos.
4. A narração deve ser uma história completa e compreensível; os balões devem ser falados. "Ele respondeu algo", "Ela escreveu duas palavras", "Uma frase o iluminou" — o ouvinte só sabe que alguém falou, mas não o que foi dito. Balões que repetem a narração não são um erro; a legenda é uma repetição do áudio.
5. O modelo gerador desenha apenas o traço; o texto é sobreposto por código. No prompt, escreva "não desenhe nenhum texto" — isso é uma prevenção, não um critério de aceitação da imagem.
6. Balões não entram no mecanismo de renderização. O mecanismo binariza cores em blocos pretos. Os balões são cronometrados na composição, com ritmo mais controlável.
7. Não passe element_plan.
Se passar, cada objeto desenha no máximo 1,6 segundos e para; um quadro inteiro pode ser desenhado em dois segundos. Sem ele, o orçamento é distribuído por √área, com duração total constante.
8. Deve ser imagem para imagem; a similaridade com a imagem de referência deve ser baixa (0,3–0,5). Com similaridade alta, o modelo copia a pose da imagem de referência, ignorando a ação que você escreveu.
9. Os personagens devem ser escritos em characters, e no prompt use {nome} para referenciá-los; quaisquer dois personagens devem ter pelo menos três diferenças.
Descreva claramente: adereços de cabeça, barba, roupas, tipo físico. O protagonista deve usar adereços de cabeça incomuns (lenço macio / sem coroa); coroas e capacetes quadrados são para antagonistas e soldados.
10. Use colorkey + overlay para cor de fundo; as legendas devem ser queimadas no ASS e declarar PlayResX/Y.
Usar blend=all_mode=multiply torna a cor de fundo verde fluorescente; SRT enviado ao libass cai no sistema de coordenadas 384×288, fazendo o texto voar para fora do quadro.
O Que Consultar em Caso de Problemas
| Situação | Leia |
|---|---|
| Não sabe como transformar um tópico em história, o que colocar em cada quadro, como terminar | references/story.md |
| Escrever prompts, definir personagens, layout de balões, TTS, parâmetros de renderização e composição | references/production.md |
| Erros de imagem / som / duração | references/troubleshooting.md |
| Modelos específicos de prompt e palavras de restrição | references/prompt-recipes.md |
| Sílabas / timbre de voz | references/voice-design.md |
| Erro 403 no edge-tts | references/apiz-tts-fallback.md |
Estrutura de Diretórios
<projeto>/
├── story.json Configuração única: título, história em três linhas, narração/balões/prompt de cada quadro
├── charts.py Funções de plotagem para quadros de infográfico (necessário apenas se houver quadro de gráfico)
├── raw/ Imagens originais do modelo gerador ← Você coloca aqui
├── boards/ bubbles/ charts/ audio/ out/ ← Saídas dos scripts
└── subs.ass
Primeira Vez Usando
bash scripts/setup.sh # macOS / Linux / Git Bash
powershell -ExecutionPolicy Bypass -File scripts/setup.ps1 # Windows
python scripts/self_test.py # 6 verificações automáticas, execute uma vez