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.
cena illus · narração inemavox · legenda no rodapé
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.
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.
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.
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.
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.
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.
O HTML gerado é uma composição HyperFrames com timeline GSAP pausada — renderizada pra MP4 em 16:9 ou 9:16.
title · topic · lead · bullets · cards · steps · term · compare · illus (SVG) · cta. A última é sempre o CTA do INEMA.CLUB.
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.
Tudo roda local. O único serviço externo é o daemon de voz, que vive em 127.0.0.1.
Node 18+ (fetch nativo, ESM) e FFmpeg com ffmpeg/ffprobe no PATH.
# confira node -v && ffprobe -version
CLI via npx (versão fixa no package.json). Cheque o ambiente.
# diagnóstico npx hyperframes doctor
Daemon inemavox no ar e fontes locais geradas uma vez.
# voz curl 127.0.0.1:7860/health # fontes node fetch-fonts.mjs
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.
Copie o esqueleto e preencha as cenas. A última cena é sempre cta.
cp assets/spec-template.mjs specs.mjs # edite o objeto VIDEOS
Gera os arquivos de texto de cada cena a partir do campo narration.
node write-txt.mjs <id> # -> assets/txt/<id>-sN.txt
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
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)
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
Os defaults cobrem o caso comum; cada eixo é trocável sem mexer no resto do pipeline.