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.

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.
historiaFormato 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.
roteiroAssunto ou roteiro bruto → historia.md/.json validados, com engenharia de retenção: promessa central, loops abertos/fechados, escalada, payoff. Não renderiza nada.
filmehistoria.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.
v1 (atual): só narrador, filme único fechado, ~5 min, motor pixflow. Planos curtos e reuso de imagem seguram o custo sem perder dinamismo.
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.
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.
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.
O roteiro só precisa de Python 3 (stdlib). O filme depende de alguns serviços locais do ecossistema — sonde antes de rodar.
Compilar e validar a história são scripts puros, sem dependências externas.
# checar
python3 --versionflux2-klein servindo em localhost:8000 — gera os planos da decupagem.
# checar
curl -s localhost:8000Motor de parallax 2.5D. Confira as dependências antes de renderizar.
# checar deps
node ~/.claude/skills/pixflow-motion/cli/pixflow-motion.mjs check-depsVoz bella em :7860 (pode oscilar) + edge-tts como fallback/segunda voz.
# sondar
curl -s 127.0.0.1:7860baixar_v1.py (yt-dlp) baixa trilha e efeitos; ffmpeg faz o mux final.
# checar
ffmpeg -versionRoda a suíte do contrato (compilar/validar/enums).
# instalar
pip install -r requirements-dev.txtO 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.
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 -->
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
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 }
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
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
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>/
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.
// 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 } ] }
// 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
O contrato já foi desenhado pensando nas próximas fases — nenhuma delas exige reengenharia do formato.
quem por fala — cada personagem ganha sua própria voz.inemaref-serie (reuso de bíblia/personagens) e renderizadores plugáveis (HQ, IA de vídeo).