História → filme narrado

Um conto vira filme animado narrado, de graça.

Você dá a história e os personagens. Ele devolve o vídeo pronto, com voz — imagens, cenas animadas e narração, tudo pela API Agnes AI a custo US$ 0.

Cena de um filme gerado pelo videos-agnes
O que é

Da história ao MP4, sem editar nada à mão

Um pipeline que lê o conto, desenha os personagens, gera duas imagens por cena (início e fim), anima cada par em vídeo, narra em português e monta o filme. Duas skills acompanham o projeto: videos-agnes (história → filme) e imagens-agnes (imagem avulsa).

💸 Custo US$ 0

Imagens (agnes-image-2.1-flash) e vídeo (agnes-video-v2.0) pela API Agnes AI, sem cobrança por geração. Narração roda local.

🎭 Personagem consistente

Model sheet por personagem: uma âncora-mãe e as demais vistas derivadas dela, para o mesmo rosto atravessar as cenas.

🗣️ Narração casada

A voz é gerada antes; cada clipe dura exatamente a fala da cena. Revisão de dicção corrige número e moeda por extenso antes do TTS.

Como funciona

O pipeline, etapa por etapa

Cada história é um arquivo de spec em historias/<nome>.py. O rodar.py percorre tudo, é idempotente (reexecutar só refaz o que falta) e entrega o filme no Telegram.

Âncoras (model sheet) 2 imagens por cena Revisão de dicção Narração (bella) Clipes keyframe A→B Montagem Telegram

🖼️ Imagens

text2img e img2img com até 2 referências (teto medido — mais que isso satura). Proporção 16:9 via pixels explícitos.

🎞️ Vídeo

Modo keyframes: cada cena interpola da imagem A para a B. Duração pela regra 8n+1, respeitando o rate limit de 5/min.

🔊 Áudio

Narração TTS local (inemavox, voz bella/chatterbox), com padding para casar fala e imagem sem cortar palavra.

Pré-requisitos

O que precisa estar no lugar

Tudo roda local, exceto as chamadas à API Agnes. As chaves ficam fora do repo.

Chave Agnes

Em ~/projetos/agnes-nei/.env, lida em runtime.

# .env
AGNES_API_KEY=sua-chave

Narração local

Daemon inemavox para o TTS.

# inemavox
localhost:8010

Vídeo/áudio

ffmpeg e ffprobe no PATH para montar o filme.

ffmpeg -version
Guia de uso · passo a passo

Fazendo um filme do zero

Do clone à entrega, com uma história de exemplo já incluída no repo.

1

Clone o projeto

O repo traz o pipeline, as duas skills e uma história de exemplo.

git clone https://github.com/inematds/videos-agnes.git
cd videos-agnes
2

Rode a história de exemplo

Gera âncoras, cenas, narração, clipes, monta e envia — tudo de uma vez.

python3 rodar.py exemplo  # O Pequeno Robô que Aprendeu a Sonhar
3

Escreva a sua história

Copie o molde e preencha personagens, cenas (2 por cena), narração e movimento. Prompts em inglês; narração em português.

cp historias/exemplo.py historias/minha.py
# edite TITULO, ANCORAS, CENAS, NARRACAO, MOVIMENTO
python3 rodar.py minha
4

Só uma imagem? Use a skill imagens-agnes

CLI direto para gerar imagem avulsa (text2img ou img2img), sem montar filme.

python3 skills/imagens-agnes/gerar.py "a red fox in a snowy forest, cinematic" -o fox.png
python3 skills/imagens-agnes/gerar.py "..." --ref base.png  # img2img
Regras que evitam os defeitos conhecidos: prompts em inglês (o filtro de conteúdo bloqueia PT), no máximo 2 referências por imagem, tamanho em pixels explícitos, nada de pose frontal simétrica. Tudo documentado nas skills.
Exemplos

Frames de filmes gerados

Cenas reais produzidas pelo pipeline, no estilo Pixar 3D em 16:9.

Esquilo numa floresta ao amanhecer
"O Esquilo que Encontrou um Amigo" — cena do rio, estilo aquarela/3D.
Três crianças brincando num quintal
"O Mistério do Alien" — os três amigos, mantidos consistentes por âncora de grupo.
Dicas · API Agnes medida na prática

O que ninguém te conta (e a doc erra)

Aprendido em ~70 chamadas reais. A documentação completa está no README.

🇬🇧 Prompt em inglês

Em português a API bloqueia conteúdo legítimo com HTTP 400. "Usar um galho como alavanca" foi recusado 4× em PT e passou de primeira em EN.

🔢 No máximo 2 referências

Cinco referências destroem a imagem: confete de pixels e o prompt é ignorado. Muitos personagens numa cena? Use uma âncora de grupo (várias pessoas juntas = 1 ref).

📐 Tamanho em pixels

Em img2img o ratio é ignorado (vira quadrado). Peça size:"1312x736" em pixels, sem ratio, para manter 16:9.

🔁 Retry sempre

~34% das chamadas voltam 503. O retry com backoff recupera quase todas — não é opcional.

🐾 Nada de pose frontal

Frontal simétrica duplica cauda/cabeça. Use perfil ou três-quartos e peça "exactly one" no positivo (nunca "no two", que vira atrator).

🎬 Vídeo: 5/min e o size mente

O vídeo tem rate limit real de 5 requisições/min (429) e tem seed (a imagem não). O tamanho da resposta mente: pede 1312×736, entrega 1280×704 — meça com ffprobe.

Roadmap

Onde está e para onde vai

O pipeline nasceu medindo a API na prática — o que a documentação promete versus o que ela entrega.

Feito
Pipeline ponta a pontaHistória → filme narrado, model sheet, revisão de dicção, montagem casada com a fala, envio ao Telegram.
Feito
Duas skillsvideos-agnes (filme) e imagens-agnes (imagem avulsa), com todas as regras medidas embutidas.
A seguir
Identidade mais firmeReduzir a deriva de personagem entre cenas e melhorar rostos humanos e ação forte.
A seguir
Versão reelSaída 9:16 com legendas e trilha, a partir do mesmo filme.
Futuro
Multi-planoCada cena em vários planos curtos com corte + referência encadeada (mais limpo que o morph longo). Parado pelos rate limits de vídeo; independente de modelo.