História → decupagem → filme

A história vira decupagem, e a decupagem vira filme.

Pipeline vertical narrado, com provedor de imagem e de vídeo escolhível por parâmetro — e um contrato em YAML que você confere antes de gastar.

Câmera de cinema sobre dolly, ilustração da capa do videoanima.
O que é

Um pipeline de direção, não um gerador de clipes soltos

A diferença entre um filme e um slideshow está na decupagem: cada plano sabe o seu enquadramento, o seu movimento e onde o gesto termina. É isso que o videoanima escreve antes de gerar qualquer imagem.

🎞️ Gramática de direção

Enquadramento, ângulo, movimento, velocidade, look e ritmo viram fragmentos de prompt — vocabulário destilado de uma análise de estilo, não adjetivos improvisados.

🔀 Provedores trocáveis

Imagem em agnes, inemaimg ou kie; vídeo em agnes, kling, klingai ou kie. Cada armadilha medida mora no adaptador dela.

🎯 Portão de movimento

Cada clipe é medido depois de gerado; o que sai parado é refeito. Há negative prompt contra still frame e keyframes A/B para o gerador ter o que animar.

⚠️ Em ajuste — não é versão estável.

O pipeline roda ponta a ponta, mas está em ciclo aberto de correção a partir dos filmes que ele mesmo produziu. O primeiro corte saiu ruim (cenas paradas, personagem inconsistente, narração picotada) — o que foi medido e o que mudou por causa disso está no post-mortem doc/pos-mortem-montanha-leao.md. Ainda em aberto: a narração estica os planos além do ritmo planejado, os SFX entram sem audição prévia, e a referência encadeada entre planos (plano N usando o N−1) não foi implementada.

Como funciona

Seis etapas, idempotentes, cada uma pulando o que já existe em disco

Tudo mora no output: um id solto resolve para ~/projetos/output/videoanima/<id>/decupagem.yaml. O historias/<id>/ do repo é só semente — na primeira execução a decupagem é copiada para o output, e a de lá passa a ser a viva.

Decupagem YAML Sanidade de ritmo Âncoras de personagem Keyframes A e B Clipes Trilha e SFX Narração Montagem
1

Antes de gastar

A sanidade de ritmo roda primeiro e o preview de custo aparece antes da primeira chamada paga. --so-decupagem valida sem gerar nada.

2

Consistência de personagem

Uma âncora vai em text2img e as demais derivam dela por img2img — gerar em paralelo produziria indivíduos diferentes, porque nenhum desses geradores tem seed de identidade.

3

O que o gerador não faz

Slow e speed-ramp, handheld, zoom-punch, trilha com ducking, SFX e loudnorm entram na montagem, em ffmpeg.

Pré-requisitos

O que precisa estar no ar

Python 3 e ffmpeg são obrigatórios. Os serviços locais e as chaves dependem dos provedores que você escolher.

ffmpeg + Python 3

A montagem inteira é ffmpeg. Sem ele o filme não fecha.

# confira
ffmpeg -version
python3 --version

inemavox (narração)

TTS local em localhost:8010, engine chatterbox. A voz vem da decupagem (voz:).

# precisa responder
curl localhost:8010/health

inemaimg (opcional)

Servidor de imagem local em localhost:8000. Necessário para --img inemaimg — o caminho para personagem criança, que cai no filtro da Agnes.

# só se for usar --img inemaimg
curl localhost:8000/health

Ollama (opcional)

LLM local em localhost:11434, usado pela decupagem automática (decupagem_llm.py).

# só para decupagem via LLM
curl localhost:11434/api/tags

Chaves de provedor

Lidas em runtime dos .env do ecossistema — nada é copiado para o repo.

# AGNES_API_KEY, KIE_API_KEY, FAL_KEY
# em ~/projetos/openpcbotv2/.env
# ou ~/projetos/wifi/.env

Combinações que exigem URL pública

klingai e kie precisam do keyframe numa URL pública — combine com --img agnes ou --img kie.

# combinação válida
--img kie --video klingai
Guia de uso · passo a passo

Do exemplo ao filme montado

Todos os comandos rodam da raiz do repo. A ordem importa: valide o ritmo e o custo antes de qualquer chamada paga.

1

Valide a decupagem sem gastar

Roda a sanidade de ritmo e mostra o preview de custo. Não gera imagem, clipe nem áudio.

python3 rodar.py exemplo --so-decupagem  # valida ritmo + custo, não gasta
2

Edite a decupagem viva

A primeira execução copia a semente do repo para o output. A partir daí, edite a do output — é ela que vale.

# semente no repo (só a primeira vez)
historias/exemplo/

# a viva, que você edita
~/projetos/output/videoanima/exemplo/decupagem.yaml
3

Pare nos keyframes e confira a folha de contato

Gera as âncoras de personagem e os keyframes A/B, monta a folha de contato e para. É onde se pega personagem inconsistente antes de pagar pelos clipes.

python3 rodar.py exemplo --so-imagens
4

Rode o pipeline completo

Escolha os provedores de imagem e vídeo. O padrão de ambos é agnes (custo US$ 0, submissão em lote).

python3 rodar.py exemplo --img agnes --video agnes

# Kling via fal.ai, com keyframe em URL pública
python3 rodar.py exemplo --img kie --video klingai
5

Personagem criança? Troque o provedor de imagem

Medido em 2026-08-01: a Agnes devolve HTTP 400 de forma determinística para "boy"/"child" — o mesmo prompt com adulto passa.

python3 rodar.py minha-historia --img inemaimg --video agnes
6

Sem confirmação e com prompt mínimo

--sim não pergunta antes de gastar. --prompt-minimo manda só a ordem de movimento ao gerador de vídeo — útil quando o prompt longo está atrapalhando a animação.

python3 rodar.py exemplo --sim --prompt-minimo
7

Retome de onde parou

Cada etapa pula o que já existe em disco. Apague o artefato que quiser refazer e rode de novo — só ele é regerado.

# refaz só o clipe do plano 07
rm ~/projetos/output/videoanima/exemplo/clipes/p07*.mp4
python3 rodar.py exemplo
Exemplos

Filmes que saíram do pipeline

Quadros dos filmes verticais produzidos durante o ciclo de correção — os mesmos que alimentaram o post-mortem.

Quadro do filme montanha-leao-v2: menino de mochila e cachorro no alto de uma montanha ao entardecer.
montanha-leao-v2 — a versão refeita depois do post-mortem, com look por bloco para a luz não sair de meio-dia na chegada noturna.
Quadro do filme neve-resgate: menino de casaco vermelho avançando na neve entre lampiões acesos.
neve-resgate — v3, com tipo_plano e a bíblia de ambientes; o plano de estado não vai a gerador nenhum.
Roadmap

O que já mudou e o que ainda está aberto

O roadmap é dirigido pelos defeitos medidos nos próprios filmes — cada item nasceu de um corte que saiu errado.

Feito
Movimento medido, não prometidoKeyframes A e B por plano, negative prompt contra still frame e um portão que mede o movimento do clipe e refaz o que sair parado.
Feito
v3: tipo de plano e look por blocotipo_plano: tableau não vai a gerador de vídeo — a câmera se move sobre a imagem parada. blocos pinta a faixa de planos com o look certo, em vez de os 50 planos herdarem um "daylight" global.
Feito
Áudio em camadas separadasVoz e leito deixaram de disputar a mesma trilha — o filme parou de sair mudo.
Aberto
Narração x ritmoA narração ainda estica os planos além do ritmo planejado na decupagem.
Aberto
SFX sem audição préviaOs efeitos entram no filme sem passar por uma escuta de conferência.
Aberto
Referência encadeadaO plano N usando o N−1 como referência ainda não foi implementado — é o caminho para a continuidade entre planos.