Pipeline vertical narrado, con el proveedor de imagen y video seleccionable mediante un parámetro, y un contrato en YAML que puedes revisar antes de gastar.

La diferencia entre una película y una presentación de diapositivas está en el desglose: cada plano sabe cuál es su encuadre, su movimiento y dónde termina el gesto. Eso es lo que videoanima escribe antes de generar cualquier imagen.
El encuadre, el ángulo, el movimiento, la velocidad, el look y el ritmo se convierten en fragmentos de prompt: vocabulario destilado de un análisis de estilo, no adjetivos improvisados.
Imagen en agnes, inemaimg o kie; video en agnes, kling, klingai o kie. Cada trampa medida vive en su adaptador.
Cada clip se mide después de generarlo; los que quedan estáticos se rehacen. Hay un negative prompt contra still frame y keyframes A/B para que el generador tenga algo que animar.
El pipeline funciona de punta a punta, pero está en un ciclo abierto de corrección a partir de las películas que él mismo produjo. El primer corte salió mal (escenas estáticas, personaje inconsistente, narración entrecortada): lo que se midió y lo que cambió a raíz de eso está en el post mortem doc/pos-mortem-montanha-leao.md. Aún pendiente: la narración alarga los planos más allá del ritmo planificado, los SFX se agregan sin escucharlos antes y la referencia encadenada entre planos (el plano N usa el N−1) no está implementada.
Todo está en output: un id independiente se resuelve en ~/projetos/output/videoanima/<id>/decupagem.yaml. O historias/<id>/ del repo es solo una semilla: en la primera ejecución, el desglose de planos se copia al output, y el de ahí pasa a ser el vigente.
Primero se valida el ritmo y la vista previa del costo aparece antes de la primera llamada paga. --so-decupagem valida sin generar nada.
Una imagen ancla se genera con text2img y las demás se derivan de ella con img2img; generarlas en paralelo produciría individuos diferentes, porque ninguno de esos generadores tiene una seed de identidad.
Slow y speed-ramp, handheld, zoom-punch, pista con ducking, SFX y loudnorm se incorporan al montaje con ffmpeg.
Python 3 y ffmpeg son obligatorios. Los servicios locales y las claves dependen de los proveedores que elijas.
Todo el montaje se hace con ffmpeg. Sin él, la película no queda lista.
# verifica ffmpeg -version python3 --version
TTS local en localhost:8010, motor chatterbox. La voz viene del desglose (voz:).
# debe responder curl localhost:8010/health
Servidor de imagen local en localhost:8000. Necesario para --img inemaimg — el camino para personajes infantiles, que pasan por el filtro de Agnes.
# solo si vas a usar --img inemaimg curl localhost:8000/health
LLM local en localhost:11434, usado por el desglose automático (decupagem_llm.py).
# solo para el desglose mediante LLM curl localhost:11434/api/tags
Leídas en runtime desde los .env del ecosistema: nada se copia al repo.
# AGNES_API_KEY, KIE_API_KEY, FAL_KEY # en ~/projetos/openpcbotv2/.env # o ~/projetos/wifi/.env
klingai e kie necesitan el keyframe en una URL pública; combínalos con --img agnes o --img kie.
# combinación válida --img kie --video klingai
Todos los comandos se ejecutan desde la raíz del repo. El orden importa: valida el ritmo y el costo antes de cualquier llamada paga.
Comprueba la coherencia del ritmo y muestra la vista previa del costo. No genera imágenes, clips ni audio.
python3 rodar.py exemplo --so-decupagem # valida el ritmo + el costo, no gasta
La primera ejecución copia la semilla del repo al output. A partir de ahí, edita la del output: esa es la que cuenta.
# semilla en el repo (solo la primera vez) historias/exemplo/ # la viva, que tú editas ~/projetos/output/videoanima/exemplo/decupagem.yaml
Genera las anclas del personaje y los keyframes A/B, arma la hoja de contacto y se detiene. Aquí puedes detectar inconsistencias en el personaje antes de pagar por los clips.
python3 rodar.py exemplo --so-imagens
Elige los proveedores de imagen y video. El valor predeterminado de ambos es agnes (costo US$ 0, envío por lotes).
python3 rodar.py exemplo --img agnes --video agnes # Kling vía fal.ai, con keyframe en URL pública python3 rodar.py exemplo --img kie --video klingai
Medido en 2026-08-01: Agnes devuelve HTTP 400 de forma determinística para "boy"/"child"; el mismo prompt con un adulto funciona.
python3 rodar.py minha-historia --img inemaimg --video agnes
--sim no pregunta antes de gastar. --prompt-minimo envía solo la instrucción de movimiento al generador de video; es útil cuando el prompt largo está dificultando la animación.
python3 rodar.py exemplo --sim --prompt-minimo
Cada etapa omite lo que ya existe en el disco. Borra el artefacto que quieras rehacer y vuelve a ejecutarlo: solo ese se genera de nuevo.
# rehace solo el clip del plano 07 rm ~/projetos/output/videoanima/exemplo/clipes/p07*.mp4 python3 rodar.py exemplo
Fotogramas de las películas verticales producidas durante el ciclo de corrección; son las mismas que alimentaron el post mortem.


tipo_plano y la biblia de entornos; el plan de estado no se envía a ningún generador.El roadmap se guía por los defectos medidos en las propias películas: cada elemento surgió de un corte que salió mal.
still frame y una compuerta que mide el movimiento del clip y vuelve a generar lo que quede estático.tipo_plano: tableau no se envía a un generador de video: la cámara se mueve sobre la imagen estática. blocos aplica el look adecuado a la franja de planos, en lugar de que los 50 planos hereden un "daylight" global.