PTENES
Motor de video · HTML → MP4 · INEMA

Un curso INEMA se convierte en una serie de videos narrados y animados.

Apunta al sitio del curso y genera videos en tres niveles —visión general, rutas y lecciones profundas por módulo— con el estilo dark premium ámbar, narración local y CTA para INEMA.CLUB.

fep-deep-t1-m1.mp4 · 16:9 · ~3m
● MÓDULO 1 · TEMA 3
Qué es un LLM

escena illus · narración inemavox · subtítulo en el pie

CONTINÚA EN
INEMA.CLUB
Qué es

Tres niveles de video a partir del mismo curso

El motor (engine.mjs) ya incluye el estilo, las animaciones y los tipos de escena. En el día a día solo escribes los specs de cada video — el resto es pipeline.

PARTE 1

🎯 Landing

Un video de descripción general — la landing del curso y las trilhas (qué es, cifras, las N trilhas). ~45–60s, voz rachel.

PARTE 2

🗺️ Rutas

Un video por trilha que muestra módulos y temas; opcionalmente, una intro por módulo. Nivel tráiler/roadmap. ~30–90s, voz rachel.

PARTE 3

📚 Contenido completo

Una clase profunda por módulo ) (recorre los ~6 temas), bien ilustrada con SVG. ~3–4 min, voz bella.

⚠️ La clase profunda es por módulo, no por tema: 6 rutas × 6 módulos = 36 videos profundos, no 216.

Cómo funciona

Pipeline determinista, con el timing basado en el audio

La narración se genera primero; el build.mjs lee la duración real de cada WAV y sincroniza la animación y los subtítulos. Cambiar la voz implica cambiar solo la etapa de TTS — el resto queda idéntico.

Extrae el curso→ Escribe specs→ write-txt→ tts (inemavox)→ build→ lint→ render → MP4

🎙️ Voz local

Narración con voz clonada (inemavox / Chatterbox-VC) ejecutándose en 127.0.0.1. No cuesta nada y pronuncia bien términos en inglés entre el PT-BR.

🎞️ HyperFrames

El HTML generado es una composición HyperFrames con timeline GSAP pausada — renderizada a MP4 en 16:9 o 9:16.

🧱 Tipos de escena

title · topic · lead · bullets · cards · steps · term · compare · illus (SVG) · cta. La última siempre es el CTA de INEMA.CLUB.

🧩 Dirigido por skill (Claude Code)

El repo incluye la skill instalable videos-cursos-inema en skills/videos-cursos-inema/ — le enseña al agente a extraer el curso, escribir los specs y ejecutar el pipeline. Copia a ~/.claude/skills/ e invócala con /videos-cursos-inema.

Requisitos previos

Lo que debe estar listo

Todo se ejecuta localmente. El único servicio externo es el daemon de voz, que funciona en 127.0.0.1.

Node + FFmpeg

Node 18+ (fetch nativo, ESM) y FFmpeg con ffmpeg/ffprobe en el PATH.

# revisa
node -v && ffprobe -version

HyperFrames

CLI vía npx (versión fija en package.json). Revisa el entorno.

# diagnóstico
npx hyperframes doctor

Voz + fuentes

Daemon inemavox en marcha y fuentes locales generadas una vez.

# voz
curl 127.0.0.1:7860/health
# fuentes
node fetch-fonts.mjs
Guía de uso · paso a paso

Generar un video, del spec al MP4

Cada video es una entrada en el objeto VIDEOS (en specs.mjs para las Partes 1–2, specs-deep.mjs para la Parte 3). El id siempre empieza con el slug del curso, por ejemplo: fep-deep-t1-m1.

1

Escribe el spec de la escena

Copia el esqueleto y completa las escenas. La última escena siempre es cta.

cp assets/spec-template.mjs specs.mjs  # edita el objeto VIDEOS
2

Extrae las narraciones

Genera los archivos de texto de cada escena a partir del campo narration.

node write-txt.mjs <id>  # -> assets/txt/<id>-sN.txt
3

Genera la narración

Llama al daemon de voz y guarda los WAV. Usa bella (predeterminado) o rachel para las Partes 1–2.

node tts-inemavox.mjs <id> bella  # -> assets/audio/<id>-sN.wav
4

Monta la composición

Lee la duración real de los WAV y escribe el index.html. Sin flag = 16:9; --vertical = 9:16.

node build.mjs <id>             # 16:9
node build.mjs <id> --vertical  # 9:16 (Shorts/Reels)
5

Valida y renderiza

El lint debe dar 0 errores. Revisa 1 frame por escena antes del render final; los renders son largos, ejecútalo en segundo plano.

npx hyperframes lint
npx hyperframes render --quality high --output renders/<id>.mp4
Voces y formatos

Configurable por proyecto

Los valores predeterminados cubren el caso común; cada eje se puede cambiar sin modificar el resto del pipeline.

Voz
inemavox (local, clonada) — predeterminadabella (predeterminada) y rachel. Alternativas: Kokoro (local, gratis: pf_dora/pm_alex) y ElevenLabs (cloud, necesita key — documentado en references/vozes.md).
Formato
16:9 (predeterminado) · 9:16 · ambosFlag de build.mjs. Para ambos, genera los dos y renderiza en archivos separados (<id>-16x9.mp4 / <id>-9x16.mp4).
Estilo
Dark premium ámbar INEMAbg #0D1321, accent ámbar #FFC300, fuentes locales Sora/Inter/JetBrains. Glow, ghost text, grid, grano y barra de progreso ya están en engine.mjs.