PTENES
RUTA 2

🎬 Pipeline: HTML → MP4

La ruta práctica. Desde cero hasta el video renderizado: cómo HyperFrames transforma HTML animado + narración TTS en MP4 mediante Chrome headless y FFmpeg — todo en tu máquina, sin clave de API.

5
Módulos
30
Temas
~2.5h
Duración
Práctico
Nivel
HTML animado escenas + GSAP Narración TTS Kokoro pf_dora Timeline LEAD=0.5 TAIL=0.9 HyperFrames Chrome headless + FFmpeg MP4 16:9 YouTube / horizontal MP4 9:16 Shorts / vertical 100% local sin clave de API

Pipeline HyperFrames — HTML + narración + timeline → MP4 16:9 y 9:16

Mapa de la ruta

Contenido detallado

2.1~30 min

🎬 Qué es HyperFrames

Desde el primer principio: escribes HTML animado, HyperFrames captura cada frame con Chrome headless y crea el MP4 con FFmpeg. Sin claves de API, todo local.

Qué es:

HyperFrames renderiza una página HTML escena por escena, captura cada frame como imagen PNG y usa FFmpeg para montar el video final, con audio WAV sincronizado.

Por qué aprender:

Comprender el flujo de principio a fin evita sorpresas: cada etapa tiene un artefacto concreto (HTML, WAV, MP4) que puedes inspeccionar.

Conceptos clave:

HTML → fotogramas PNG → FFmpeg → MP4; cada escena es un estado de la página.

Qué es:

El Chrome headless administrado por HyperFrames renderiza cada frame de la animación. FFmpeg combina los frames con los audios WAV y genera el archivo MP4 final.

Por qué aprender:

Saber que son dos procesos separados ayuda a diagnosticar: problemas visuales → Chrome; problemas de audio/timing → FFmpeg.

Conceptos clave:

Puppeteer/Chrome, FFmpeg, pipeline de dos etapas.

Qué es:

Kokoro es un modelo TTS que se ejecuta localmente mediante Python (kokoro-onnx). Genera archivos WAV de alta calidad sin ninguna llamada a servicios externos.

Por qué aprender:

Elimina el costo variable y la dependencia de Internet. El modelo (~340 MB) se descarga una vez y queda en la máquina.

Conceptos clave:

kokoro-onnx, voz pf_dora, ONNX runtime, WAV local.

Qué es:

Todo el pipeline (TTS, render, encode) se ejecuta localmente. Después de la configuración inicial, produces videos sin internet y sin costos por uso.

Por qué aprender:

Elimina el temor a que los costos se disparen y garantiza que el proyecto pueda reproducirse en cualquier máquina con los requisitos previos instalados.

Conceptos clave:

Offline-first, costo cero por video, reproducible.

Qué es:

HyperFrames admite los dos formatos principales. El mismo guion genera automáticamente un video 16:9 (YouTube, horizontal) y uno 9:16 (Shorts, TikTok, Reels).

Por qué aprender:

Una producción, dos entregas. El CSS de la escena adapta el diseño a cada formato mediante una media query o una variable.

Conceptos clave:

1920×1080, 1080×1920, multiformato, reutilización.

Qué es:

Ideal para videos explicativos animados con narración (tutoriales, onboarding, lanzamientos). No es para capturas de pantalla en vivo, entrevistas o videos con face-cam.

Por qué aprender:

Saber cuál es el alcance adecuado evita frustraciones. HyperFrames destaca en contenido de motion graphics con narración; no sustituye las grabaciones en vivo.

Conceptos clave:

Motion-graphics, narración TTS, contenido técnico estructurado.

Ver completo
2.2~30 min

🛠️ Configuración y requisitos previos

Instala Node 22+, FFmpeg, Chrome administrado y Kokoro — ejecuta npx hyperframes doctor y comprueba que todo esté en verde antes de empezar.

Qué es:

Node 22 LTS es el mínimo requerido. En Windows, FFmpeg va en C:\ffmpeg\bin y, en git-bash, usa siempre ffmpeg -nostdin para evitar bloqueos de stdin.

Por qué aprender:

Las versiones antiguas de Node pueden romper el CLI. La flag -nostdin es un gotcha clásico de Windows que bloquea el renderizado silenciosamente.

Conceptos clave:

Node 22+, FFmpeg en PATH, -nostdin en git-bash.

Qué es:

HyperFrames usa un Chrome aislado, descargado mediante npx hyperframes browser ensure. Queda en la caché local y no interfiere con el Chrome que usas a diario.

Por qué aprender:

Usar Chrome personal puede causar conflictos de perfil. El navegador aislado garantiza un entorno limpio y reproducible.

Conceptos clave:

npx hyperframes browser ensure, caché local, Puppeteer aislado.

Qué es:

Instala con pip install kokoro-onnx soundfile. En la primera ejecución, el modelo (~340 MB) se descarga automáticamente y se guarda en la caché. Las ejecuciones siguientes son sin conexión.

Por qué aprender:

Sin Kokoro instalado, falla la generación de narración. La descarga tarda la primera vez: planifícalo durante la configuración.

Conceptos clave:

pip install kokoro-onnx soundfile, descarga única de ~340 MB, caché local.

Qué es:

El comando npx hyperframes doctor comprueba Node, FFmpeg, Chrome y Kokoro de una sola vez e imprime el estado de cada dependencia. Todo en verde = listo para crear.

Por qué aprender:

Ahorra tiempo de depuración: en vez de descubrir el fallo a mitad del renderizado, identificas el problema antes de empezar.

Conceptos clave:

npx hyperframes doctor, checklist de dependencias, diagnóstico rápido.

Qué es:

Crea el scaffolding con npx hyperframes init <nome> --example blank. Genera las carpetas audio/, frames/, los scripts y el HTML de entrada ya con la estructura correcta.

Por qué aprender:

Partir de la plantilla correcta evita errores de estructura que solo aparecen al renderizar.

Conceptos clave:

npx hyperframes init, --example blank, carpetas audio/ e frames/.

Qué es:

O design.md define la paleta, la tipografía y las reglas visuales de tu canal. Cópialo de la referencia del skill al proyecto y menciónalo en las instrucciones para Claude.

Por qué aprender:

Sin un design.md, cada video puede tener una apariencia diferente. Tener el archivo garantiza la coherencia de la identidad visual.

Conceptos clave:

design.md, house-style, paleta #0D1321, identidad visual.

Ver completo
2.3~30 min

📝 Guion y narración TTS

Escribe el SCRIPT.md con 6–9 escenas en un arco hook→principio→avanzado→CTA, genera los WAV con Kokoro y mide las duraciones antes de componer.

Qué es:

SCRIPT.md es un Markdown con una sección por escena. El arco ideal: hook (por qué mirar) → principio (concepto básico) → avanzado (detalle práctico) → CTA (siguiente paso).

Por qué aprender:

Un guion bien estructurado antes de programar evita retrabajo de animación. La narrativa guía lo visual, no al revés.

Conceptos clave:

SCRIPT.md, 6–9 escenas, arco de hook→CTA, una idea por escena.

Qué es:

Con 6–9 escenas y ~100 segundos de narración en total, el video dura ~1:50 — ideal para Shorts y videos cortos en YouTube.

Por qué aprender:

Los textos largos por escena generan audios largos que alargan la animación más allá de lo permitido. Cada escena debe tener como máximo 3–4 frases cortas.

Conceptos clave:

~100s en total, 3–4 frases por escena, ritmo de atención.

Qué es:

TTS lee el texto literalmente. Escribe "SKILL punto M D" en lugar de "SKILL.md", "M J S" en lugar de ".mjs", "N P X" en lugar de "npx", o el resultado sonará extraño.

Por qué aprender:

Es uno de los errores más comunes. La diferencia entre oír "SKILL punto MD" de forma natural y que el modelo intente pronunciar "skill-dot-md" literalmente es enorme en la calidad percibida.

Conceptos clave:

Texto fonético, expansión de siglas, revisar la narración en voz alta.

Qué es:

Usa la voz pf_dora con --speed 0.98 para una voz natural y un poco más pausada. El resultado es un archivo WAV por escena en audio/.

Por qué aprender:

La velocidad predeterminada (1.0) puede sonar acelerada. El ajuste 0.98 es sutil, pero mejora la claridad sin perder el ritmo.

Conceptos clave:

voz pf_dora, --speed 0.98, WAV por escena, carpeta audio/.

Qué es:

Tras generar los WAVs, usa ffprobe -show_entries format=duration en cada archivo para obtener la duración exacta en segundos. Esos valores alimentan el array AUDIO[] en build-index.

Por qué aprender:

Las duraciones estimadas generan videos con el audio cortado o con silencio al final. ffprobe da el número exacto que HyperFrames necesita.

Conceptos clave:

ffprobe -show_entries format=duration, duración real en segundos, array AUDIO[].

Qué es:

Más allá de la voz predeterminada pf_dora, Kokoro ofrece pm_alex (masculino neutro) y pm_santa (masculino más grave) para variedad o personalización del canal.

Por qué aprender:

Elegir la voz antes de grabarlo todo evita retrabajo. Prueba las tres con 2–3 frases del guion y decide antes de generar todos los WAV.

Conceptos clave:

pf_dora, pm_alex, pm_santa, prueba antes de generar todo.

Ver completo
2.4~30 min

🎞️ Composición de escenas

build-index.mjs es el corazón: array AUDIO[] con duraciones reales, funciones sceneN() de HTML, animaciones GSAP con anim(i,t) y subtítulos CAPTIONS[] — todo sincronizado con el mismo timing.

Qué es:

O build-index.mjs es el generador: lee AUDIO[], llama a las funciones de escena y produce el index.html final que HyperFrames va a renderizar. Copia desde la plantilla y edita.

Por qué aprender:

Comprender la estructura del generador te permite personalizarlo sin miedo. Cada parte tiene una responsabilidad clara: datos, HTML de escena, animación.

Conceptos clave:

build-index.mjs, generador, plantilla copiada y editada.

Qué es:

El array AUDIO[] asigna cada escena a su archivo WAV y a la duración exacta (en segundos, con decimales) obtenida con ffprobe. Ej.: { file: 'audio/scene1.wav', dur: 12.34 }.

Por qué aprender:

Es la única fuente de verdad del timing. Todos los cálculos de animación derivan de las duraciones reales de AUDIO[] —nunca las estimes.

Conceptos clave:

AUDIO[], duraciones reales, fuente única de verdad, ffprobe.

Qué es:

Cada escena es una función sceneN() que devuelve HTML posicionado absolutamente dentro del contenedor de video. Los elementos comienzan invisibles y GSAP los anima.

Por qué aprender:

Separar el HTML de cada escena en funciones mantiene el código organizado y facilita editar una escena sin afectar las demás.

Conceptos clave:

sceneN(), posición absoluta, opacity inicial 0, GSAP anima.

Qué es:

La función anim(i, t) recibe el índice de la escena y el timeline de GSAP y añade las animaciones. GSAP interpola los valores cuadro a cuadro, lo que garantiza que Chrome capture movimientos fluidos.

Por qué aprender:

GSAP es el estándar en HyperFrames porque garantiza un timing determinista — siempre el mismo frame, esencial para la captura headless.

Conceptos clave:

anim(i, t), timeline de GSAP, timing determinista, precisión de fotograma.

Qué es:

El array CAPTIONS[] define el texto de subtítulos de cada escena, que se muestra en la franja inferior del video. Puede ser el texto completo de la narración o un resumen en viñetas.

Por qué aprender:

Los subtítulos mejoran la accesibilidad y aumentan la retención en plataformas donde el video se reproduce sin sonido de forma predeterminada.

Conceptos clave:

CAPTIONS[], franja inferior, accesibilidad, video sin sonido.

Qué es:

Tres constantes controlan el timing de toda animación: LEAD=0.5 (pausa antes de la narración), TAIL=0.9 (hold después del final de la voz) y FADE=0.45 (duración del fade entre escenas). Cambiar esto aquí afecta todo de manera uniforme.

Por qué aprender:

Tener una única fuente de timing es lo que garantiza que el audio y la animación estén siempre sincronizados. Nunca hard-code segundos en las funciones de escena.

Conceptos clave:

LEAD=0.5, TAIL=0.9, FADE=0.45, fuente única, sincronización de audio y visual.

Ver completo
2.5~30 min

✅ Validar y renderizar

Antes del render final: lint, inspect, draft para revisar visualmente, validar con el usuario y solo entonces render high con 30fps en las dos versiones.

Qué es:

El comando npx hyperframes lint verifica el HTML generado: duraciones, referencias de audio, estructura de la línea de tiempo y errores de sintaxis. Debe devolver 0 errores antes de continuar.

Por qué aprender:

Un render con errores de lint puede producir videos sin sonido, cortados o con escenas faltantes. Hacer un lint barato ahora evita un render costoso después.

Conceptos clave:

npx hyperframes lint, 0 errores, validación previa al render.

Qué es:

O npx hyperframes inspect --samples 16 abre Chrome en modo headless, captura 16 frames distribuidos a lo largo del video y muestra miniaturas para una inspección visual rápida del diseño.

Por qué aprender:

El texto cortado, los elementos fuera de la pantalla o las superposiciones solo se ven visualmente. El inspect los detecta antes de perder minutos de render.

Conceptos clave:

npx hyperframes inspect --samples 16, miniaturas, problemas de diseño.

Qué es:

El modo --quality draft renderiza en resolución reducida y a mayor velocidad para ofrecer una vista previa rápida del video completo antes del render final.

Por qué aprender:

El draft permite revisar la secuencia, las transiciones y el timing sin esperar el render completo. Corrige en el draft, no en el high.

Conceptos clave:

--quality draft, vista previa rápida, iteración económica.

Qué es:

Extrae frames del draft con FFmpeg (ffmpeg -i draft.mp4 -vf fps=1 frames/%04d.png) y compártelo con el usuario para la validación visual. Claude no puede escuchar el audio.

Por qué aprender:

La validación humana antes del renderizado final detecta problemas subjetivos (texto demasiado pequeño, colores incorrectos, orden equivocado) que el lint no detecta.

Conceptos clave:

ffmpeg -vf fps=1, frames PNG, validación humana, Claude no escucha.

Qué es:

Tras aprobar el draft, ejecuta --quality high --fps 30 para el render completo. Genera el MP4 final en resolución completa, listo para subir.

Por qué aprender:

El render high tarda más y no debe repetirse. Aprobar el draft antes garantiza que el esfuerzo de render se dedique al archivo correcto.

Conceptos clave:

--quality high --fps 30, renderizado final, no repetir sin validar.

Qué es:

Ejecuta el render dos veces con parámetros de formato diferentes (o usa la flag --both si está disponible en tu proyecto). El resultado son los archivos horizontal (16:9) y vertical (9:16) listos para distribuir.

Por qué aprender:

YouTube y Shorts tienen alcances distintos. Generar ambas versiones en el mismo render maximiza la distribución sin rehacer el contenido.

Conceptos clave:

16:9 YouTube, 9:16 Shorts, dos versiones, distribución multiplataforma.

Ver completo
← Todas las rutas Ruta 3: Por dentro →