O Produtor · vídeo ponta a ponta

Do link ao vídeo profissional — numa linha de montagem só.

Entra um link ou assunto; sai um vídeo em 3 camadas, narrado, em 16:9 e 9:16. Tudo local, sem chave de API.

Capa do videoprodutor — arte dark premium âmbar do orquestrador de vídeo INEMA
O que é

Um orquestrador, não mais um gerador de vídeo

O videoprodutor coordena as peças que já existem no ecossistema — plano, roteiro, revisão de texto, voz, imagem, render — numa linha de montagem única. A skill é autocontida: traz o molde testado do gerador de 3 camadas, destilado do caso de referência "Hormozi 12 dicas".

🎬 3 camadas de verdade

Cinema (imagem com véu + parallax/ken-burns), texto cinético (GSAP) e ilustração do tópico (ícone/diagrama/contador). É o que separa vídeo profissional de slideshow.

🔌 Tudo local, sem API key

Kokoro para a voz, flux2-klein local para a imagem, HyperFrames (Chrome + FFmpeg) para o render. Se o servidor de imagem estiver fora, o modo SVG assume sozinho.

📱 16:9 e 9:16 no mesmo build

O mesmo gerador emite os dois formatos; o vertical respeita as safe zones das redes (base e lateral direita livres da UI do app).

Como funciona

A linha de montagem (sempre nesta ordem)

Cada etapa entrega um artefato concreto para a seguinte. O array AUDIO[] — as durações reais dos WAVs medidas pelo ffprobe — é a fonte única de timing: governa cena, animação e áudio ao mesmo tempo.

Link / Assunto Plano (vpe) Roteiro Revisão de texto Voz + timing Arte (imagem/SVG) Compor 3 camadas Validar Render 16:9 + 9:16
1

Camada cinema

Fundo com profundidade: imagem gerada no flux2-klein com véu escuro + parallax/ken-burns. É a camada que dá peso ao quadro.

2

Texto cinético

Número, título, barra e ênfase animados com GSAP. O movimento vem do código — a imagem nunca precisa se mexer sozinha.

3

Ilustração do tópico

Ícone, micro-diagrama ou contador que MOSTRA o que está sendo narrado, em vez de só decorar a tela.

🖼️ Imagem é o padrão, SVG é o fallback

O gerador consulta localhost:8000/health: servidor no ar → flux2-klein; fora → ícones SVG animados por tema. Nunca trava por falta de imagem.

🗣️ Duas formas por frase

Tela = PT-BR acentuado com o inglês na grafia original. Fala (txt/sN.txt) = números/siglas expandidos e o inglês reescrito foneticamente (deploy → "deplói").

Pré-requisitos

O pré-flight antes de qualquer vídeo

Node, FFmpeg, HyperFrames e internet no render (o GSAP vem por CDN) são obrigatórios. Kokoro é obrigatório para a voz. O servidor de imagem e o vpe são opcionais — sem eles o pipeline segue no modo SVG.

🎞️ Motor de render

HyperFrames verifica Chrome + FFmpeg. Obrigatório.

# checa o motor
npx hyperframes doctor

🗣️ TTS local (Kokoro)

Narração local com a voz pf_dora. Obrigatório para o áudio.

# checa o TTS
python3 -c "import kokoro_onnx, soundfile"

🖼️ Servidor de imagem

flux2-klein na porta 8000 (camada 1). Opcional — tem fallback SVG.

# opcional
curl -s localhost:8000/health

⚙️ Runtime e utilitários

Node 22+, FFmpeg e o vpe (video-plan-editor, opcional) no PATH.

node -v
ffmpeg -version | head -1
which vpe
Guia de uso · passo a passo

Do assunto ao MP4, em oito passos

Comece simples: uma cena-piloto, aprove o estilo, só então escale. Todos os comandos abaixo são os reais da skill (skills/videoprodutor/).

1

Pré-flight

Confirme as dependências antes de gastar tempo com roteiro.

npx hyperframes doctor                      # motor de render (Chrome+FFmpeg)
curl -s localhost:8000/health               # imagem — opcional, tem fallback SVG
python3 -c "import kokoro_onnx, soundfile"  # TTS local
node -v ; ffmpeg -version | head -1 ; which vpe
2

Plano de edição

O vpe monta o esqueleto (preset, beats, tópicos, CTA). Preencha o JSON e valide.

vpe scaffold "<assunto>" --preset <suave|promo|vendas|viral|acao> \
    --title "<título>" > plano-edicao.json
vpe validate                                   # plano-edicao.json válido
3

Roteiro

Escreva o SCRIPT.md e um arquivo de texto por cena. Na forma-fala, expanda números e siglas: "10×" vira "dez vezes", "R$500 mil" vira "quinhentos mil reais".

# um txt por cena
SCRIPT.md
assets/txt/s1.txt  assets/txt/s2.txt  ...  assets/txt/sN.txt
4

Revisão de texto (antes da voz)

Varra a acentuação palavra a palavra. Tela = PT-BR acentuado + inglês na grafia original; fala = inglês foneticamente. Acento errado contamina a tela e a locução. Checklist e léxico em references/revisao-texto.md.

# tela  (camada 2 + caption):  "fez o deploy do funnel"
# fala  (assets/txt/sN.txt):   "fez o deplói do fânel"
5

Fontes, voz e timing

Baixe as .woff2 na primeira vez, gere os WAVs com Kokoro e meça as durações — elas viram o array AUDIO[], a fonte única 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
# → cole as durações no AUDIO[] do gerador
6

Arte da camada 1

Com o servidor no ar, gere as ilustrações (seeds fixos = reprodutível). Sem servidor, o modo SVG assume. Confira cada arte: o flux às vezes mete texto no quadro.

node scripts/gen-imgs.mjs   # flux2-klein — ou deixe o modo SVG assumir
7

Compor as 3 camadas e validar

Copie scripts/composition-template.mjs como build-index.mjs e rode. Sem flag o modo é AUTO; --svg/--noimg/--img forçam. Valide antes do render caro.

node build-index.mjs                  # 16:9 (AUTO imagem→SVG)
node build-index.mjs --vertical       # 9:16 com safe zones

npx hyperframes lint                  # 0 erros
npx hyperframes inspect --samples 16  # 0 overflow
# confira os frames de um draft antes de renderizar
8

Render final nos dois formatos

Rebuild + render em cada formato. Como não dá para ouvir o áudio daqui, peça validação da locução ao usuário.

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
Exemplos

O caso que virou o molde

O vídeo "Hormozi 12 dicas" (videos/hormozi-12-dicas/) é a referência funcional de onde a skill foi destilada: 15 cenas narradas com Kokoro, 3 camadas, 16:9 e 9:16, rodando tanto com imagem quanto no fallback SVG. O repo também guarda experiments/remotion-ab/, um teste A/B em nível de código do que a skill remotion-best-practices muda no resultado.

Frame de abertura do vídeo Hormozi 12 dicas — camada cinema com véu escuro
Camada 1 (cinema): arte do hook gerada no flux2-klein com seed fixo, recebendo véu + ken-burns no render.
Ilustração de tópico do vídeo Hormozi 12 dicas
Camada 3 (ilustração do tópico): a arte de uma das 12 dicas — imagem fiel ao conceito narrado, conferida uma a uma antes de entrar.
Roadmap

Onde está e para onde vai

A skill está em v0.2.0 e já produz vídeo ponta a ponta com o molde testado. O backlog completo, com as decisões ainda em aberto, vive em docs/06-decisoes-pendentes-e-backlog.md.

Feito
v0.1.0 — o molde executávelOrquestrador link/assunto → vídeo, autocontido: 3 camadas, imagem padrão com fallback SVG automático, safe zones no 9:16, timing de fonte única via AUDIO[].
Feito
v0.2.0 — revisão de textoEtapa de revisão entre roteiro e voz: contrato de duas formas por frase (tela × fala) e pronúncia de termos em inglês, fechando o buraco do texto que ia cru para o TTS.
P0
Esqueleto da fábricaContrato único (plano-edicao.json estendido com caption cinético, illustration por beat, duration_mode e assets), integrador de b-roll com cache de seed, compositor dirigido por plano.
P1
Qualidade das camadas 2 e 3Mais componentes de texto cinético (typewriter, char-stagger, count-up), micro-diagramas e spotlight, e um design system único de tokens/eases/ícones.
P2
AcabamentoVariedade de transições, light leaks e LUT real, beat-sync musical, formato 1:1, pós-produção e export OpenTimelineIO.
Aberto
Decisões pendentesMotor de render a longo prazo (HyperFrames hoje × Remotion unificado), timing por palavra (forced alignment × estimativa proporcional) e voz padrão.