🖥️ Vídeo 16:9 para YouTube
O formato padrão do YouTube é 1920 × 1080 px. Com HyperFrames, você escreve cenas em HTML + GSAP e renderiza o MP4 em alta qualidade — sem abrir editor de vídeo.
O gerador build-index.mjs escreve um index.html com viewport fixo em 1920 × 1080. O HyperFrames usa Chrome headless para capturar cada frame e o FFmpeg monta o MP4. Sem flag, o output é sempre 16:9.
- ✓ Usar
--quality highno render final - ✓ Manter narração ≈ 100s de fala (≈ 1:50 de vídeo)
- ✓ Incluir thumbnail de alta contraste na cena 1
- ✓ Gerar MP4 com codec H.264, 60fps fluído
- ✗ Publicar render
--quality draft(resolução baixa) - ✗ Ultrapassar 15 min sem capítulos (queda de retenção)
- ✗ Usar fonte menor que 32px (ilegível em mobile)
- ✗ Omitir cena de CTA (perda de conversão)
sceneN() retorna HTML estático; anim() recebe o GSAP timeline e anima os elementos.📱 Shorts/Reels/TikTok em 9:16
O mesmo projeto HTML vira um vídeo 1080 × 1920 px com o flag --vertical. O HyperFrames recompõe o layout e renderiza o frame alto — sem duplicar código.
node build-index.mjs (sem flag)node build-index.mjs --verticalNo modo --vertical, o HyperFrames injeta a classe .vertical no <body>. Use seletores .vertical .sua-classe no CSS das cenas para reposicionar elementos — coluna em vez de linha, texto maior, margens menores.
- ✓ Usar fontes ≥ 48px no modo vertical (safe zone menor)
- ✓ Manter CTA e legenda na metade inferior da tela
- ✓ Validar layout com
npx hyperframes inspect --samples 16 - ✓ Limitar a ≤ 60 s para Shorts/Reels (≤ 180 s para TikTok)
- ✗ Reutilizar layout 16:9 sem ajustes
.vertical - ✗ Colocar texto importante na faixa superior (coberta pela UI do app)
- ✗ Ignorar o lint antes do render — erros de layout aparecem ampliados
- ✗ Publicar sem legenda (maioria assiste sem som)
⏱️ Por que ~110s prende a retenção
100 segundos de fala equivalem a ~1:50 de vídeo. Esse intervalo é longo o suficiente para ensinar um conceito completo e curto o suficiente para manter atenção — o ponto ideal para Shorts e tutoriais YouTube.
Cada cena do SCRIPT.md tem ≈ 15–18 s de narração (medido com ffprobe). Com 6–7 cenas você chega exatamente em ~100 s de fala. Voz: pf_dora --speed 0.98 no Kokoro. Guarde as durações no array AUDIO[] do build-index.mjs.
ffprobe assets/audio/sN.wav — o HyperFrames sincroniza animação e áudio.💬 Legendas/captions sempre on
85 % dos vídeos em feeds são assistidos no mudo. Legendas queimadas (burned-in) no frame garantem acessibilidade e leitura mesmo sem som — e ainda reforçam a identidade visual dark premium.
O array CAPTIONS[] em build-index.mjs define textos sincronizados com o áudio. O template injeta um <div class="caption"> fixo no rodapé de cada cena. O CSS padrão usa Inter 600, 36px, fundo rgba(0,0,0,0.55), padding 12px — legível em qualquer fundo.
A caption do HyperFrames é burned-in — ela faz parte do frame do vídeo. Isso é intencional: garante que apareça em qualquer plataforma, mesmo quando o player está no mudo e sem suporte a SRT/VTT. Para SEO, adicione também uma legenda separada no upload do YouTube.
No modo --vertical, use .vertical .caption { font-size: 52px; bottom: 160px; } — a resolução 1080×1920 é muito maior e a caption precisa escalar.
🏁 CTA no fim
A última cena é o CTA — Call to Action. No padrão INEMA.CLUB, ela exibe "CONTINUA EM" + domínio em destaque + URL legível. Já vem pronta no template do HyperFrames como scene9().
A cena final mostra "CONTINUA EM" + INEMA.CLUB com glow âmbar, URL 🌐 inema.club e narração curta: "Isso é conteúdo do INEMA ponto CLUB. Acesse: inema ponto club.". Ela é a scene9() no template — não remova.
- ✓ Manter a cena de CTA em TODOS os vídeos
- ✓ URL legível e URL falada na narração
- ✓ Adaptar para sua marca (troque INEMA.CLUB pelo seu domínio)
- ✓ Manter glow âmbar — identidade visual consistente
- ✗ Remover a cena final (perde conversão e identidade)
- ✗ Colocar CTA longo (> 8 s) — viewer abandona
- ✗ URL ilegível ou fundo que compete com o texto
- ✗ Esquecer de falar a URL na narração
♻️ Um roteiro, dois formatos
Um único SCRIPT.md + um único build-index.mjs produzem os dois MP4s. É o fluxo completo de publicação do HyperFrames — nenhum código duplicado.
Escreva o roteiro uma vez. Adapte o CSS das cenas com seletores .vertical. Rode o gerador duas vezes. O resultado são dois MP4s prontos para publicação no YouTube (16:9) e no YouTube Shorts / Instagram Reels / TikTok (9:16).
Use --quality draft para conferir timing e layout antes de gastar tempo no render final. Extraia frames com npx hyperframes inspect --samples 16 e revise os 16 prints antes de executar --quality high.
- ✓ Renderizar 16:9 primeiro, validar, depois 9:16
- ✓ Guardar os dois MP4s em
renders/com nomes distintos - ✓ Testar
--quality draftnos dois modos antes do high - ✓ Adicionar seletores
.verticalno CSS de cenas com texto longo
- ✗ Manter dois arquivos build-index separados (viola DRY)
- ✗ Publicar sem fazer lint — bugs de layout aparecem no player
- ✗ Sobrescrever renders/ sem versionamento
- ✗ Ignorar safe zone no modo vertical
📋 Resumo do Módulo 4.1
--vertical.