Entra un enlace o tema; sale un video en 3 capas, narrado, en 16:9 y 9:16. Todo local, sin clave de API.

El productor de video coordina las piezas que ya existen en el ecosistema —plan, guion, revisión de texto, voz, imagen, render— en una única línea de montaje. La skill es autocontenida: incluye el modelo probado del generador de 3 capas, destilado del caso de referencia "Hormozi 12 dicas".
Cine (imagen con velo + parallax/ken-burns), texto cinético (GSAP) e ilustración del tema (ícono/diagrama/contador). Eso es lo que distingue un video profesional de una presentación de diapositivas.
Kokoro para la voz, flux2-klein local para la imagen, HyperFrames (Chrome + FFmpeg) para el render. Si el servidor de imágenes está fuera de servicio, el modo SVG entra en acción automáticamente.
El mismo generador produce ambos formatos; el vertical respeta las zonas seguras de las redes (la base y el lateral derecho quedan libres de la interfaz de la app).
Cada etapa entrega un artefacto concreto para la siguiente. El array AUDIO[] — las duraciones reales de los WAV medidas por ffprobe — es la única fuente de timing: controla la escena, la animación y el audio al mismo tiempo.
Fondo con profundidad: imagen generada con flux2-klein con velo oscuro + parallax/ken-burns. Es la capa que le da peso al cuadro.
Número, título, barra y énfasis animados con GSAP. El movimiento viene del código: la imagen nunca necesita moverse por sí sola.
Ícono, microdiagrama o contador que MUESTRA lo que se está narrando, en lugar de solo decorar la pantalla.
El generador consulta localhost:8000/health: servidor en línea → flux2-klein; fuera de línea → íconos SVG animados por tema. Nunca se detiene por falta de imagen.
Pantalla = PT-BR con acentos y el inglés con su escritura original. Voz (txt/sN.txt) = números/siglas expandidos y el inglés reescrito fonéticamente (deploy → "despliega").
Node, FFmpeg, HyperFrames e internet durante el render (GSAP viene por CDN) son obligatorios. Kokoro es obligatorio para la voz. El servidor de imágenes y el vpe son opcionales; sin ellos, el pipeline sigue en modo SVG.
HyperFrames verifica Chrome + FFmpeg. Obligatorio.
# comprueba el motor npx hyperframes doctor
Narración local con la voz pf_dora. Obligatorio para el audio.
# comprueba el TTS python3 -c "import kokoro_onnx, soundfile"
flux2-klein en el puerto 8000 (capa 1). Opcional: tiene fallback SVG.
# opcional curl -s localhost:8000/health
Node 22+, FFmpeg y el vpe ) en el PATH (video-plan-editor, opcional).
node -v ffmpeg -version | head -1 which vpe
Empieza de forma sencilla: una escena piloto, aprueba el estilo y solo entonces escala. Todos los comandos de abajo son los reales de la skill (skills/videoprodutor/).
Confirma las dependencias antes de dedicar tiempo al guion.
npx hyperframes doctor # motor de renderizado (Chrome+FFmpeg) curl -s localhost:8000/health # imagen — opcional, tiene fallback SVG python3 -c "import kokoro_onnx, soundfile" # TTS local node -v ; ffmpeg -version | head -1 ; which vpe
O vpe arma el esqueleto (preset, beats, temas, CTA). Completa el JSON y valida.
vpe scaffold "<assunto>" --preset <suave|promo|vendas|viral|acao> \ --title "<título>" > plano-edicao.json vpe validate # plano-edicao.json válido
Escribe el SCRIPT.md y un archivo de texto por escena. En la forma hablada, desarrolla los números y las siglas: "10×" se convierte en "diez veces", "R$500 mil" en "quinientos mil reales".
# un txt por escena
SCRIPT.md
assets/txt/s1.txt assets/txt/s2.txt ... assets/txt/sN.txt
Revisa la acentuación palabra por palabra. Pantalla = PT-BR con acentos + inglés con su escritura original; voz = inglés fonético. Un acento incorrecto contamina la pantalla e la locución. Checklist y léxico en references/revisao-texto.md.
# pantalla (capa 2 + caption): "hizo el deploy del funnel" # voz (assets/txt/sN.txt): "hizo el deplói del fánel"
Descarga las .woff2 la primera vez, genera los WAVs con Kokoro y mide las duraciones — se convierten en el array AUDIO[], la única fuente de timing.
node scripts/fetch-fonts.mjs # 1.ª vez: Sora/Inter/JetBrains for i in $(seq 1 N); do npx hyperframes tts "assets/txt/s$i.txt" \ --voice pf_dora --speed 0.98 --output "assets/audio/s$i.wav"; done for i in $(seq 1 N); do ffprobe -v error -show_entries format=duration \ -of default=noprint_wrappers=1:nokey=1 "assets/audio/s$i.wav"; done # → pega las duraciones en AUDIO[] del generador
Con el servidor en línea, genera las ilustraciones (seeds fijos = reproducibles). Sin servidor, se encarga el modo SVG. Revisa cada pieza: flux a veces mete texto en el cuadro.
node scripts/gen-imgs.mjs # flux2-klein — o deja que el modo SVG se encargue
Copia scripts/composition-template.mjs como build-index.mjs y ejecútalo. Sin flag, el modo es AUTO; --svg/--noimg/--img obligan. Valida antes del render costoso.
node build-index.mjs # 16:9 (AUTO imagen→SVG) node build-index.mjs --vertical # 9:16 con zonas seguras npx hyperframes lint # 0 errores npx hyperframes inspect --samples 16 # 0 overflow # revisa los frames de un borrador antes de renderizar
Reconstruye y renderiza en cada formato. Como no puedes escuchar el audio desde aquí, pide al usuario que valide la locución.
node build-index.mjs && npx hyperframes render --quality high \ --output renders/<nome>-16x9.mp4 node build-index.mjs --vertical && npx hyperframes render --quality high \ --output renders/<nome>-9x16.mp4
El video "Hormozi 12 dicas" (videos/hormozi-12-dicas/) es la referencia funcional de la que se destiló la skill: 15 escenas narradas con Kokoro, 3 capas, 16:9 y 9:16, que funcionan tanto con imagen como con el fallback SVG. El repo también guarda experiments/remotion-ab/, una prueba A/B a nivel de código de lo que la skill remotion-best-practices cambia en el resultado.


La skill está en v0.2.0 y ya produce video de principio a fin con el molde probado. El backlog completo, con las decisiones aún pendientes, está en docs/06-decisoes-pendentes-e-backlog.md.
AUDIO[].plano-edicao.json extendido con caption cinético, ilustración por beat, duration_mode y assets), integrador de b-roll con caché de seed, compositor dirigido por plan.