TRILHA 3 · AVANÇADO

🎬 Composição & Render

As telas já foram capturadas. Agora você transforma esses screenshots reais em vídeo: moldura de navegador, cursor animado que mira a bounding box real, zoom no resultado, narração local com Kokoro, sincronia áudio↔animação e o render final em MP4 pelo HyperFrames — terminando na CTA do AutomationsAI.

3
Módulos
~22
Tópicos
~1,5h
Duração
Avançado
Nível
shots/*.png steps.json telas + bboxes + falas moldura + cursor + zoom anima por cima do shot narração Kokoro pf_dora WAVs medidos por ffprobe build-demo.mjs monta o index.html HyperFrames HTML → MP4 (render) MP4 16:9 CTA AutomationsAI

Da captura ao MP4: animar por cima, narrar local e renderizar com timing único

Mapa da trilha

Conteúdo detalhado

3.1~30 min

🖱️ Moldura, cursor & zoom

A camada de animação que dá ar profissional ao print: a moldura de navegador em volta do shot, o cursor SVG que desliza até a bounding box real, o clique com pulse + ripple, o zoom no resultado e o house style dark premium âmbar.

O que é:

A janela persistente #appwin fica na bg-layer com data-layout-ignore: borda, raio, sombra grande, barra de título com 3 pontinhos e uma pílula de URL mono (cadeado + window.urlLabel). Os screenshots ficam dentro dela em (WIN_L, SHOT_T).

Por que aprender:

A moldura mantém o look premium e disfarça que o conteúdo é um print estático — sem ela, parece um screenshot solto.

Conceitos-chave:

#appwin persistente; data-layout-ignore; barra + pílula de URL; shot dentro da janela.

O que é:

Um único elemento #cursor (seta SVG) animado na timeline principal — não por cena — desliza continuamente. O hotspot fica na ponta em ~(6,3), então o tween usa x = alvoX - 6, y = alvoY - 3 para a ponta cair no centro da bbox. Movimento duration:.7, ease:"power3.inOut".

Por que aprender:

Mirar a bounding box real (não o olho) com easing curvo é o que faz o cursor parecer profissional em vez de robótico.

Conceitos-chave:

Cursor global; hotspot na ponta; bbox real; power3.inOut.

O que é:

No instante do clique (~start + 1.15s), o cursor faz scale:.82 em yoyo (pulse) e um #ripple (círculo âmbar) expande e some, posicionado no centro do alvo.

Por que aprender:

O feedback visual de clique comunica a ação ao espectador — sem ele, o cursor parece só passar por cima do botão.

Conceitos-chave:

pulse scale .82 yoyo; #ripple âmbar; timing ~start+1.15s.

O que é:

O destaque .hlbox é um retângulo só com box-shadow (anel âmbar + glow) na bbox mapeada com ~6px de folga, entrando com back.out. No passo zoom:true, o <img> faz scale 1 → 1.12 com transformOrigin no centro do alvo.

Por que aprender:

Foca o olhar no controle ativo sem cobrir nada e dá um push-in cinematográfico no momento do "tcharam" (o resultado).

Conceitos-chave:

.hlbox box-shadow; back.out; zoom:true; transformOrigin no alvo.

O que é:

A paleta fixa: fundo #0D1321, painel #1D2D44, borda #3E5C76, texto #F0EBD8, acento âmbar #FFC300 e código verde-água #2EC4B6. O âmbar é o ÚNICO destaque dominante — o ripple, o glow e a moldura usam ele.

Por que aprender:

Manter um só acento e fundo idêntico em todas as cenas dá a identidade premium consistente do canal.

Conceitos-chave:

6 cores fixas; âmbar único; fundo constante; verde-água só em valores.

O que é:

Sora 700–800 para títulos, Inter para corpo/legendas, JetBrains Mono para a pílula de URL e valores. As três vêm como .woff2 locais (subset latin cobre PT-BR) em assets/fonts/ — o build-demo.mjs injeta o fonts.css.

Por que aprender:

O render é determinístico e offline — fonte via CDN cairia em fallback e quebraria o visual.

Conceitos-chave:

Sora/Inter/JetBrains; woff2 local; sem CDN; subset latin.

O que é:

Ritmo recomendado: LEAD 0.5s (cena aparece antes da voz), TAIL 0.7s, FADE 0.4s entre cenas. O cursor chega ao alvo ~0.7s antes da explicação principal; o clique cai perto de start+1.15s.

Por que aprender:

Esse ritmo é o que faz a animação parecer reagir à narração — entender os parâmetros permite ajustar o vídeo sem dessincronizar.

Conceitos-chave:

LEAD 0.5s; TAIL 0.7s; FADE 0.4s; cursor antes da fala.

Ver Completo
3.2~30 min

🔊 Narração local & composição

A voz e a montagem: TTS Kokoro local gratuito (voz pf_dora), geração dos WAVs a partir do steps.json, medição automática de durações, e o build-demo.mjs que sincroniza tudo pelo mesmo array de tempos e fecha na CTA do AutomationsAI.

O que é:

Kokoro é um TTS que roda 100% na máquina (pip install kokoro-onnx soundfile), voz pf_dora em PT-BR, com --speed 0.98. A primeira execução baixa ~340MB do modelo. Nenhuma chave de API.

Por que aprender:

Narração gratuita e offline mantém a skill auto-contida; a voz é boa, sem atuação — por isso o usuário valida a locução depois.

Conceitos-chave:

Kokoro local; pf_dora; speed 0.98; sem API.

O que é:

O narration-template.shsteps[].narration e ctaNarration do steps.json, escreve assets/txt/sN.txt (1 por passo + CTA) e chama o TTS para gerar assets/audio/sN.wav.

Por que aprender:

O steps.json é a fonte das falas — gerar os textos dele evita divergência entre o que está escrito e o que é falado.

Conceitos-chave:

steps[].narration; sN.txt → sN.wav; CTA como último.

O que é:

O build-demo.mjs roda ffprobe em cada sN.wav e monta o array AUDIO[] com as durações reais. Não existe array de tempos digitado à mão.

Por que aprender:

Timing é fonte única: medir o áudio real elimina o risco de o vídeo e a voz discordarem.

Conceitos-chave:

ffprobe; AUDIO[] derivado; timing fonte única.

O que é:

O composition-template.mjs (copiado como build-demo.mjs) lê o steps.json (telas + bboxes + captions + narração), mede os WAVs e gera o index.html com moldura, cursor, destaque, zoom e CTA — tudo pronto.

Por que aprender:

É o coração da render: um único node build-demo.mjs produz o HTML renderizável a partir dos dados da captura.

Conceitos-chave:

build-demo.mjs; lê steps.json; gera index.html; não editar à mão.

O que é:

A partir de AUDIO[], o gerador calcula S[] com start, dur, audioStart e end por cena (somando LEAD/TAIL). A timeline GSAP e os <audio> tracks leem esse mesmo S[] — áudio e animação batidos por construção.

Por que aprender:

Compartilhar a fonte de tempo entre voz e movimento é o que garante sincronia sem ajuste manual.

Conceitos-chave:

S[] derivado de AUDIO[]; start/dur/audioStart; tracks alternados.

O que é:

Cada passo tem um caption no steps.json que vira uma legenda translúcida no rodapé (Inter 600), aparecendo e saindo junto com a cena, em track alternado em relação às cenas.

Por que aprender:

Captions tornam o vídeo legível sem som (feeds mudos) e reforçam a fala — escritos uma vez no steps.json.

Conceitos-chave:

caption por passo; rodapé translúcido; sincronizado à cena.

O que é:

A última cena é a CTA: "CONTINUA EM" + AutomationsAI (AutomationsAI creme, .CLUB âmbar com glow) + 🌐 automationsai.net. A narração padrão é "Isso é conteúdo do AutomationsAI ponto CLUB. Acesse: inema ponto club." e já vem pronta no template.

Por que aprender:

É o ponto de conversão do canal — incluída por padrão, garante que nenhum vídeo saia sem a chamada de marca.

Conceitos-chave:

CTA automática; AutomationsAI; ctaNarration; cursor some na CTA.

Ver Completo
3.3~30 min

🎞️ Render no HyperFrames

A reta final: montar o projeto HyperFrames, rodar a captura e a composição, validar com lint e inspect, renderizar em alta — e o que está no roadmap (9:16, gravação real, cursor em curva).

O que é:

npx hyperframes init <nome> --example blank --non-interactive cria a pasta do projeto de vídeo com a estrutura base do HyperFrames.

Por que aprender:

É o ponto de partida de todo render — o projeto fica isolado, e nele você copia os scripts da skill.

Conceitos-chave:

init; --example blank; --non-interactive.

O que é:

Copie para o projeto: capture.mjs, composition-template.mjs (como build-demo.mjs), narration-template.sh e assets/fonts/ — ou rode node fetch-fonts.mjs para baixá-las.

Por que aprender:

A skill é auto-contida: traz as próprias fontes e house style, sem depender de outro projeto.

Conceitos-chave:

capture/build-demo/narration; assets/fonts; fetch-fonts.mjs.

O que é:

node capture.mjs actions.json abre o app num viewport fixo, executa cada ação, tira 1 screenshot por estado e pega a bounding box real do alvo — saída: assets/shots/*.png + steps.json.

Por que aprender:

É o elo entre a Trilha 2 (captura) e esta — sem o steps.json, o build-demo não tem o que montar.

Conceitos-chave:

actions.json; viewport fixo; bbox real; shots + steps.json.

O que é:

node build-demo.mjs gera o index.html. Depois npx hyperframes lint (0 erros) e npx hyperframes inspect --samples 14 (0 problemas) validam layout e regras antes de gastar tempo de render.

Por que aprender:

Lint e inspect pegam fontes via CDN, clips errados e off-canvas sem data-layout-ignore — barato comparado a re-renderizar.

Conceitos-chave:

build-demo.mjs; lint 0 erros; inspect --samples 14.

O que é:

Renderize --quality draft para conferir (extraia 1 frame por passo e mostre ao usuário), depois --quality high --fps 30 --output renders/<nome>-16x9.mp4.

Por que aprender:

Você não escuta o áudio no render — sempre confira frames com o usuário e peça que ele valide a locução antes do final.

Conceitos-chave:

draft → high; --fps 30; conferir frames; usuário valida voz.

O que é:

As regras de ouro: capturar antes/animar depois (render determinístico, sem site ao vivo); viewport fixo = espaço das coordenadas; animar .scene-inner nunca .clip; decorativos e moldura com data-layout-ignore; fontes locais.

Por que aprender:

São os erros que mais quebram o render — conhecê-los antes evita horas de depuração no inspect.

Conceitos-chave:

capturar antes; viewport fixo; .scene-inner; data-layout-ignore.

O que é:

Ainda NÃO implementado: 9:16/Shorts (telas de app são landscape, exigiria reenquadre); v3 gravação de tela real (agent-browser record) para apps com muito movimento; polimento de cursor em curva e "digitação" (typewriter) nos campos.

Por que aprender:

Saber o que é roadmap evita prometer o que a skill ainda não faz — hoje o formato natural é 16:9 com screenshots estáticos animados.

Conceitos-chave:

9:16 futuro; v3 record; cursor em curva; typewriter — todos roadmap.

Ver Completo
← Trilha 2: Captura Todas as trilhas