Motor de vídeo · HTML → MP4 · INEMA

Um curso INEMA vira uma série de vídeos narrados e animados.

Aponte pro site do curso e gere vídeos em três níveis — visão geral, trilhas e aulas profundas por módulo — no padrão dark premium âmbar, com narração local e CTA pra INEMA.CLUB.

fep-deep-t1-m1.mp4 · 16:9 · ~3m
● MÓDULO 1 · TÓPICO 3
O que é um LLM

cena illus · narração inemavox · legenda no rodapé

CONTINUA EM
INEMA.CLUB
O que é

Três níveis de vídeo a partir do mesmo curso

O motor (engine.mjs) já traz o estilo, as animações e os tipos de cena. No dia a dia você só escreve os specs de cada vídeo — o resto é pipeline.

PARTE 1

🎯 Landing

Um vídeo de visão geral — a landing do curso e as trilhas (o que é, números, as N trilhas). ~45–60s, voz rachel.

PARTE 2

🗺️ Trilhas

Um vídeo por trilha mostrando módulos e tópicos; opcional uma intro por módulo. Nível trailer/roadmap. ~30–90s, voz rachel.

PARTE 3

📚 Conteúdo completo

Uma aula profunda por módulo (percorre os ~6 tópicos), bem ilustrada com SVG. ~3–4 min, voz bella.

⚠️ A aula profunda é por módulo, não por tópico: 6 trilhas × 6 módulos = 36 vídeos profundos, não 216.

Como funciona

Pipeline determinístico, com o timing vindo do áudio

A narração é gerada primeiro; o build.mjs lê a duração real de cada WAV e sincroniza animação e legenda. Trocar a voz é trocar só a etapa de TTS — o resto fica idêntico.

Extrai o curso Escreve specs write-txt tts (inemavox) build lint render → MP4

🎙️ Voz local

Narração por voz clonada (inemavox / Chatterbox-VC) rodando em 127.0.0.1. Não gasta nada e pronuncia bem termos em inglês no meio do PT-BR.

🎞️ HyperFrames

O HTML gerado é uma composição HyperFrames com timeline GSAP pausada — renderizada pra MP4 em 16:9 ou 9:16.

🧱 Tipos de cena

title · topic · lead · bullets · cards · steps · term · compare · illus (SVG) · cta. A última é sempre o CTA do INEMA.CLUB.

🧩 Dirigido por skill (Claude Code)

O repo inclui a skill instalável videos-cursos-inema em skills/videos-cursos-inema/ — ela ensina o agente a extrair o curso, escrever os specs e rodar o pipeline. Copie para ~/.claude/skills/ e invoque com /videos-cursos-inema.

Pré-requisitos

O que precisa estar pronto

Tudo roda local. O único serviço externo é o daemon de voz, que vive em 127.0.0.1.

Node + FFmpeg

Node 18+ (fetch nativo, ESM) e FFmpeg com ffmpeg/ffprobe no PATH.

# confira
node -v && ffprobe -version

HyperFrames

CLI via npx (versão fixa no package.json). Cheque o ambiente.

# diagnóstico
npx hyperframes doctor

Voz + fontes

Daemon inemavox no ar e fontes locais geradas uma vez.

# voz
curl 127.0.0.1:7860/health
# fontes
node fetch-fonts.mjs
Guia de uso · passo a passo

Gerar um vídeo, do spec ao MP4

Cada vídeo é uma entrada no objeto VIDEOS (em specs.mjs para Partes 1–2, specs-deep.mjs para a Parte 3). O id começa sempre pelo slug do curso, ex.: fep-deep-t1-m1.

1

Escreva o spec da cena

Copie o esqueleto e preencha as cenas. A última cena é sempre cta.

cp assets/spec-template.mjs specs.mjs  # edite o objeto VIDEOS
2

Extraia as narrações

Gera os arquivos de texto de cada cena a partir do campo narration.

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

Gere a narração

Chama o daemon de voz e salva os WAVs. Use bella (default) ou rachel para as Partes 1–2.

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

Monte a composição

Lê a duração real dos WAVs e escreve o index.html. Sem flag = 16:9; --vertical = 9:16.

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

Valide e renderize

Lint tem que dar 0 erros. Confira 1 frame por cena antes do render final — renders são longos, rode em background.

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

Configurável por projeto

Os defaults cobrem o caso comum; cada eixo é trocável sem mexer no resto do pipeline.

Voz
inemavox (local, clonada) — defaultbella (default) e rachel. Alternativas: Kokoro (local, grátis: pf_dora/pm_alex) e ElevenLabs (cloud, precisa key — documentado em references/vozes.md).
Formato
16:9 (default) · 9:16 · ambosFlag do build.mjs. Para ambos, gere os dois e renderize para arquivos separados (<id>-16x9.mp4 / <id>-9x16.mp4).
Estilo
Dark premium âmbar INEMAbg #0D1321, accent âmbar #FFC300, fontes locais Sora/Inter/JetBrains. Glow, ghost text, grid, grão e barra de progresso já no engine.mjs.