PTENES
El Productor · video de principio a fin

Del enlace al video profesional — en una sola línea de producción.

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

Portada del productor de video — arte dark premium ámbar del orquestador de video de INEMA
Qué es

Un orquestador, no otro generador de video

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".

🎬 3 capas de verdad

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.

🔌 Todo local, sin API key

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.

📱 16:9 y 9:16 en el mismo build

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).

Cómo funciona

La línea de montaje (siempre en este orden)

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.

Enlace / Tema→ Plan (vpe)→ Guion→ Revisión de texto→ Voz + timing→ Arte (imagen/SVG)→ Componer 3 capas→ Validar→ Render 16:9 + 9:16
1

Capa de cine

Fondo con profundidad: imagen generada con flux2-klein con velo oscuro + parallax/ken-burns. Es la capa que le da peso al cuadro.

2

Texto cinético

Número, título, barra y énfasis animados con GSAP. El movimiento viene del código: la imagen nunca necesita moverse por sí sola.

3

Ilustración del tema

Ícono, microdiagrama o contador que MUESTRA lo que se está narrando, en lugar de solo decorar la pantalla.

🖼️ La imagen es la opción predeterminada, SVG es el fallback

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.

🗣️ Dos formas por frase

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").

Requisitos previos

La verificación previa antes de cualquier video

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.

🎞️ Motor de render

HyperFrames verifica Chrome + FFmpeg. Obligatorio.

# comprueba el motor
npx hyperframes doctor

🗣️ TTS local (Kokoro)

Narración local con la voz pf_dora. Obligatorio para el audio.

# comprueba el TTS
python3 -c "import kokoro_onnx, soundfile"

🖼️ Servidor de imágenes

flux2-klein en el puerto 8000 (capa 1). Opcional: tiene fallback SVG.

# opcional
curl -s localhost:8000/health

⚙️ Runtime y utilidades

Node 22+, FFmpeg y el vpe ) en el PATH (video-plan-editor, opcional).

node -v
ffmpeg -version | head -1
which vpe
Guía de uso · paso a paso

Del tema al MP4, en ocho pasos

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/).

1

Verificación previa

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
2

Plan de edición

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
3

Guion

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
4

Revisión de texto (antes de la voz)

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"
5

Fuentes, voz y timing

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
6

Arte de la capa 1

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
7

Componer las 3 capas y validar

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
8

Render final en ambos formatos

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
Ejemplos

El caso que se convirtió en el modelo

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.

Frame de apertura del video Hormozi 12 dicas — capa cinematográfica con velo oscuro
Capa 1 (cine): arte del hook generado en flux2-klein con seed fijo, al que se le añade un velo + ken-burns durante el render.
Ilustración del tema del video Hormozi 12 dicas
Capa 3 (ilustración del tema): el arte de uno de los 12 consejos — imagen fiel al concepto narrado, revisada una por una antes de incluirla.
Hoja de ruta

Dónde está y hacia dónde va

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.

Hecho
v0.1.0 — la plantilla ejecutableOrquestador enlace/tema → video, autocontenido: 3 capas, imagen predeterminada con fallback SVG automático, zonas seguras en 9:16, timing desde una única fuente vía AUDIO[].
Hecho
v0.2.0 — revisión de textoEtapa de revisión entre el guion y la voz: contrato de dos formas por frase (pantalla × voz) y pronunciación de términos en inglés, para cerrar la brecha del texto que iba crudo al TTS.
P0
Estructura de la fábricaContrato único (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.
P1
Calidad de las capas 2 y 3Más componentes de texto cinético (typewriter, char-stagger, count-up), microdiagramas y spotlight, y un único sistema de diseño de tokens/eases/iconos.
P2
AcabadoVariedad de transiciones, light leaks y LUT real, sincronización musical con el ritmo, formato 1:1, posproducción y exportación a OpenTimelineIO.
Abierto
Decisiones pendientesMotor de render a largo plazo (HyperFrames hoy × Remotion unificado), timing por palabra (forced alignment × estimación proporcional) y voz predeterminada.