Filme narrado · sem IA de vídeo

De um assunto a um filme narrado inteiro

Passa um assunto ou um roteiro pronto — o sistema estrutura a história com retenção (promessa central + loops), e renderiza um filme dinâmico no motor pixflow: parallax 2.5D determinístico, sem gerador de vídeo por IA.

Ilustração do inemafilme: linha de produção de filme narrado, câmera e story beats
O que é

Três peças isoladas, uma "junta" no meio

O inemafilme não é um monólito: separa "pensar a história" de "renderizar o vídeo" através de um contrato de dados neutro. Isso deixa o roteiro reutilizável (por outros sistemas, como o inemaref) e o renderizador trocável.

📜 Contrato historia

Formato híbrido md (humano, editável) + json (máquina). Agnóstico de render — o mesmo historia.json pode virar filme pixflow, HQ ou, no futuro, vídeo por IA.

✍️ Skill roteiro

Assunto ou roteiro bruto → historia.md/.json validados, com engenharia de retenção: promessa central, loops abertos/fechados, escalada, payoff. Não renderiza nada.

🎥 Skill filme

historia.json → MP4 narrado no pixflow: imagens flux2-klein, câmera por emoção, narração (bella + Giuseppe), música com build e SFX, tudo com ducking.

Como funciona

Do assunto ao MP4

v1 (atual): só narrador, filme único fechado, ~5 min, motor pixflow. Planos curtos e reuso de imagem seguram o custo sem perder dinamismo.

Assunto/roteiro roteiro: historia.md compilar + validar historia.json filme: decupagem imagens (flux2-klein) render pixflow narração + música + SFX mux MP4

Retenção primeiro

Toda história carrega uma promessa_central plantada no ato 1 e só resolvida no payoff; entre um beat e outro, nunca fica sem nenhum loop aberto ("sem deserto") — validado mecanicamente.

Cena descrita, não dirigida

O roteiro diz o que se vê e a emoção; o filme decide câmera, look e prompt. Isso deixa o mesmo historia.json reaproveitável por outros renderizadores.

Movimento + troca constante

Sem vídeo generativo, o dinamismo vem de câmera sempre ativa e planos curtos com alta troca de imagem — reusando a mesma imagem em vários planos pra segurar o custo.

Pré-requisitos

O que precisa estar no ar

O roteiro só precisa de Python 3 (stdlib). O filme depende de alguns serviços locais do ecossistema — sonde antes de rodar.

Python 3 (contrato/roteiro)

Compilar e validar a história são scripts puros, sem dependências externas.

# checar
python3 --version

inemaimg (imagens)

flux2-klein servindo em localhost:8000 — gera os planos da decupagem.

# checar
curl -s localhost:8000

pixflow-motion (render)

Motor de parallax 2.5D. Confira as dependências antes de renderizar.

# checar deps
node ~/.claude/skills/pixflow-motion/cli/pixflow-motion.mjs check-deps

inemavox (narração)

Voz bella em :7860 (pode oscilar) + edge-tts como fallback/segunda voz.

# sondar
curl -s 127.0.0.1:7860

inemavox2 + ffmpeg (música/SFX)

baixar_v1.py (yt-dlp) baixa trilha e efeitos; ffmpeg faz o mux final.

# checar
ffmpeg -version

pytest (dev, opcional)

Roda a suíte do contrato (compilar/validar/enums).

# instalar
pip install -r requirements-dev.txt
Guia de uso · passo a passo

Do assunto ao MP4 narrado

O caminho completo tem duas skills: roteiro escreve a história, filme renderiza. Ambas ficam symlinkadas em ~/.claude/skills/ e são chamáveis pelo agente de qualquer projeto.

1

Escreva a história (skill roteiro)

Dê um assunto (o agente inventa a história completa) ou um roteiro pronto (ele segmenta em beats sem inventar enredo). O agente lê roteiro/knowledge/ e escreve historia.md seguindo a gramática do contrato.

# o agente escreve, seguindo contrato/CONTRATO.md
$EDITOR historia.md  # frontmatter + beats com <!-- beat/loop/cena -->
2

Compile e valide

Toda historia.md precisa passar pelo compilador (md → json) e pelo validador (checklist de retenção: promessa, sem deserto, escalada, climax/payoff).

python3 ../contrato/compilar.py historia.md > historia.json
python3 ../contrato/validar.py historia.json  # exit 0 = aprovado
3

Monte a decupagem (skill filme)

Copie o template e, para cada beat, expanda a cena.descricao_visual em ~8-12 prompts de plano (wide/detalhe/personagem/ambiente/ação) — quanto mais imagens, mais dinâmico, sem encarecer o render.

cp filme/templates/decupagem.template.mjs ~/projetos/output/<id>/decupagem.mjs
# preenche os beats { key, look, emocao, caps, flash, imgs }
4

Gere imagens + spec, depois renderize

O build gera as imagens (flux2-klein) e monta o .movie.yaml + timeline.json. Valide rápido sem gerar imagem antes de comprometer custo; o render roda em background (proporcional à duração).

node decupagem.mjs --no-img   # só valida yaml/timeline
node decupagem.mjs            # gera imagens + movie.yaml + timeline.json
node ~/.claude/skills/pixflow-motion/cli/pixflow-motion.mjs render <project>.movie.yaml <project>-mudo.mp4
5

Narração, música e SFX

Preencha narracao.py (bella + Giuseppe) cronometrado pelo timeline.json; baixe trilha com build cinemático e monte o SFX (braam no clímax, hits na tensão).

cp filme/templates/narracao.template.py narracao.py  # preenche LINES
python3 narracao.py                             # -> narracao.wav
filme/scripts/baixar_musica.sh "cinematic build" <dur>  # -> music_bed.wav
python3 filme/scripts/build_sfx.py --climax-beat <id> --hit-beats <id>  # -> sfx.wav
6

Mux final

Mixa música (ducked) + SFX + voz sobre o vídeo mudo e produz o MP4 final e uma versão leve pro Telegram. Áudio é barato — itere aqui sem re-renderizar.

filme/scripts/mux.sh <project>  # -> <project>.mp4 + <project>-tg.mp4 (<50MB)
# saída final em ~/projetos/output/<id>/
Exemplo

"Avatar — O Eco das Cinzas"

Modelo de referência completo em filme/exemplo/avatar-eco-cinzas-v2/: 96 planos, 2:48, 1280×720, narração bella + Giuseppe, SFX braam no clímax.

historia.json (trecho)

// 9 beats, promessa_central com loop id "promessa-central"
{
  "id": "avatar-ep01",
  "promessa_central": "Jake vai abandonar os humanos pelos Na'vi — e a que preço?",
  "beats": [
    { "funcao_retencao": "cold_open", "emocao": "tensao", "tempo_s": 8 }
  ]
}

build.mjs (decupagem)

// 9 beats -> ~91 imagens, pools de câmera por emoção
node build.mjs  # gera imagens + movie.yaml + timeline.json
// white-flash no clímax, reuso de imagem entre planos
Roadmap

v1 → v3

O contrato já foi desenhado pensando nas próximas fases — nenhuma delas exige reengenharia do formato.

v1
Só narrador (atual)Filme único fechado, ~5 min, planos curtos com alta troca de imagem, motor pixflow.
v2
Falas de personagemO contrato já tem quem por fala — cada personagem ganha sua própria voz.
v3
Episódios recorrentesIntegração com o inemaref-serie (reuso de bíblia/personagens) e renderizadores plugáveis (HQ, IA de vídeo).