TRILHA 3

🔧 Por dentro do skill

Engenharia reversa completa do skill video-explicativo. Você vai abrir o capô: pasta, referências, house style, o gerador build-index.mjs e os gotchas que salvam horas de depuração.

4
Módulos
24
Tópicos
~2h
Duração
Avançado
Nível
AUDIO[] fonte única de verdade S[] timing LEAD/TAIL/FADE audio tracks cenas 1/3 alternadas timeline GSAP pausada, seek por audio index.html sincronizado & renderizável

AUDIO[] — a fonte única que gera áudio + timeline GSAP sincronizados

Mapa da trilha

Conteúdo detalhado

3.1~30 min

🗂️ Estrutura do skill

Anatomia completa da pasta video-explicativo/: o SKILL.md no centro, as três referências especializadas e os três scripts que automatizam o trabalho pesado.

O que é:

A raiz da skill contém SKILL.md (o orquestrador), a subpasta scripts/ com 3 arquivos executáveis e a subpasta references/ com 3 arquivos de especificação. Nada mais.

Por que aprender:

Conhecer o mapa da pasta é o primeiro passo para entender o que o skill faz, modificar sem quebrar e criar novos skills no mesmo padrão.

Conceitos-chave:

Raiz = SKILL.md; especialização em subpastas; separação orquestrador/referência/scripts.

O que é:

pipeline.md descreve os 7 passos do fluxo de produção; house-style.md define paleta, tipografia e regras visuais; gotchas.md lista os erros mais comuns e suas correções específicas.

Por que aprender:

Saber qual referência consultar em cada dúvida evita leitura desnecessária — cada arquivo tem escopo preciso e não se sobrepõe.

Conceitos-chave:

Especialização por domínio; carregadas sob demanda; sem redundância entre arquivos.

O que é:

fetch-fonts.mjs baixa as fontes .woff2 locais; narration-template.sh gera o roteiro TTS com voz pf_dora --speed 0.98; composition-template.mjs é o gerador central que produz o index.html final com todas as cenas.

Por que aprender:

Cada script resolve um problema específico de automação — juntos, eliminam trabalho manual repetitivo e garantem determinismo na saída.

Conceitos-chave:

Automação por script; fontes locais; TTS; geração de HTML determinística.

O que é:

O SKILL.md define 7 etapas numeradas: (1) confirmar tema, (2) escrever roteiro, (3) gerar áudio TTS, (4) baixar fontes, (5) rodar o gerador, (6) validar output, (7) entregar arquivos. Cada passo aponta para a referência certa.

Por que aprender:

O fluxo numerado é o que o Claude executa na ordem — entendê-lo permite depurar em qual passo um erro ocorreu.

Conceitos-chave:

Fluxo numerado; responsabilidade por etapa; referências apontadas por passo.

O que é:

O SKILL.md instrui o Claude a ler house-style.md apenas antes de construir as cenas visuais, e gotchas.md apenas antes de validar o output — nunca tudo de uma vez.

Por que aprender:

Preserva contexto para a tarefa real em vez de gastar tokens carregando especificações que podem não ser necessárias.

Conceitos-chave:

On demand; economia de contexto; leitura condicional.

O que é:

O SKILL.md embutiu preferências fixas do autor: narração em PT-BR, paleta dark premium âmbar, saída dupla (16:9 para YouTube e 9:16 para Shorts), e CTA final sempre apontando para INEMA.CLUB.

Por que aprender:

Esses defaults evitam que o usuário precise repetir preferências a cada pedido — estão codificados no skill para consistência de marca.

Conceitos-chave:

Defaults de marca; PT-BR; saída dupla; CTA consistente.

Ver Completo
3.2~30 min

🎨 House style dark premium

O guia de estilo completo do vídeo-explicativo: fundo #0D1321, acento âmbar #FFC300, tipografia Sora/Inter/JetBrains Mono e as regras que diferenciam escala de vídeo de escala web.

O que é:

Seis variáveis fixas: fundo #0D1321, painel #1D2D44, borda #3E5C76, texto principal #F0EBD8, acento âmbar #FFC300 e destaque de código #2EC4B6. Nenhuma outra cor de destaque é permitida.

Por que aprender:

A paleta é a identidade visual do canal. Desviar dela quebra a consistência de marca — o âmbar deve ser o único ponto quente em tela.

Conceitos-chave:

Sistema fechado de cores; âmbar = único acento; código em ciano.

O que é:

Sora para títulos e headlines (impacto visual forte), Inter para corpo de texto (legibilidade alta), JetBrains Mono para código e dados. As três famílias cobrem todos os casos de uso do vídeo.

Por que aprender:

Misturar fontes fora do sistema cria ruído visual. A regra é simples: título → Sora, texto → Inter, código → JetBrains.

Conceitos-chave:

Sora display; Inter corpo; JetBrains código; nunca Google Fonts CDN em runtime.

O que é:

Toda cena tem uma camada de fundo composta de 4 elementos: (1) brilho radial âmbar (glow), (2) texto fantasma em baixa opacidade (ghost text), (3) grade de pontos (grid) e (4) textura de grão SVG (grain). Essa camada nunca é animada — fica estática.

Por que aprender:

A camada cria profundidade sem distração. Entender que ela é estática evita o erro de tentar animá-la (o que causa conflito com o framework).

Conceitos-chave:

Camada estática; 4 elementos; profundidade sem distração.

O que é:

As fontes são baixadas pelo script fetch-fonts.mjs em formato .woff2 e referenciadas via @font-face local. O CDN do Google Fonts é proibido porque o renderizador pode não ter acesso à internet.

Por que aprender:

Um vídeo renderizado sem acesso ao CDN vai exibir fontes fallback — quebrando o visual. Fontes locais garantem consistência offline.

Conceitos-chave:

woff2 local; @font-face; fetch-fonts.mjs; offline-safe.

O que é:

Vídeo não é web: cada cena deve ter no máximo 8-10 elementos visuais para não sobrecarregar o espectador. Headlines vão de 64px (subtítulo) a 172px (destaque máximo) — tamanhos impossíveis num site, mas necessários para leitura em TV ou mobile.

Por que aprender:

Designers vindos da web tendem a colocar informação demais por cena. A regra 8-10 elementos é o antídoto.

Conceitos-chave:

Máximo 10 elementos; fontes grandes; respiração visual; foco do espectador.

O que é:

Todo vídeo termina com a cena scene9() (CTA), que exibe o logo âmbar e o endereço INEMA.CLUB em destaque máximo. Essa cena é gerada automaticamente pelo composition-template e não deve ser omitida.

Por que aprender:

A CTA é o ponto de conversão do canal. Incluída por padrão, ela garante que nenhum vídeo seja entregue sem a chamada para ação de marca.

Conceitos-chave:

scene9() automática; INEMA.CLUB; conversão de canal; nunca omitir.

Ver Completo
3.3~30 min

⚙️ O gerador build-index.mjs

O coração técnico do skill: o array AUDIO[] como fonte única de verdade que calcula timing, monta cenas, gera captions, trilhas e a timeline GSAP sincronizada.

O que é:

AUDIO[] é o único array que o autor edita: cada entrada tem o arquivo MP3 e a duração em segundos. Dali o gerador deriva tudo — timing das cenas, duração das transições, posição dos audio tracks no HTML e as marcas de tempo da timeline GSAP.

Por que aprender:

Ter uma fonte única elimina dessincronias: não há como o áudio e a timeline discordarem porque ambos leem o mesmo dado.

Conceitos-chave:

Single source of truth; array AUDIO[]; derivação automática.

O que é:

O gerador calcula o array S[] somando LEAD=0.5s (silêncio antes do áudio), TAIL=0.9s (silêncio depois) e FADE=0.45s (sobreposição de entrada/saída). Para cada cena: start = soma das durações anteriores, dur = audio.dur + LEAD + TAIL, audioStart = LEAD.

Por que aprender:

Entender o cálculo permite ajustar os parâmetros para vídeos com ritmo diferente sem quebrar a sincronização.

Conceitos-chave:

LEAD 0.5s; TAIL 0.9s; FADE 0.45s; S[] derivado de AUDIO[].

O que é:

Cada cena é uma função sceneN(s) que retorna a string HTML da cena usando o objeto de timing s. As animações são declaradas com anim(element, props, delay), que acumula uma lista de tweens GSAP — nunca CSS direto.

Por que aprender:

Separar a estrutura visual (HTML) da animação (GSAP via anim()) facilita editar um sem tocar no outro.

Conceitos-chave:

sceneN() retorna HTML; anim() declara tweens; separação estrutura/movimento.

O que é:

O gerador monta o HTML em 4 blocos: (1) .scene divs com o conteúdo visual, (2) .caption divs com legendas sincronizadas, (3) <audio> tracks alternados (cenas 1/3 no track A, 2/4 no track B), e (4) o bloco <script> com a timeline GSAP iniciada pausada.

Por que aprender:

Conhecer a estrutura dos 4 blocos permite editar o output manualmente quando necessário sem perder a lógica de sincronização.

Conceitos-chave:

4 blocos; timeline pausada; playback controlado por audio events.

O que é:

Rodando o gerador com a flag --vertical, ele adiciona a classe .v ao <body> e aplica overrides CSS que reposicionam elementos para o formato 9:16 (1080×1920px). O arquivo gerado é sempre index.html, sobrescrevendo a versão 16:9.

Por que aprender:

Entender o mecanismo de override evita confusão entre os dois formatos e explica por que ambos compartilham o mesmo arquivo base.

Conceitos-chave:

body.v; CSS overrides; --vertical flag; um arquivo, dois formatos.

O que é:

O composition-template define scene9() como a cena final hard-coded de CTA. Ela é sempre injetada após as cenas de conteúdo independente de quantas cenas o vídeo tenha — se o vídeo tem 7 cenas, a última é sempre a scene9 de CTA.

Por que aprender:

Saber que ela é automática evita duplicar a CTA manualmente, e saber que não pode ser omitida garante consistência de marca em todo output.

Conceitos-chave:

scene9() hard-coded; sempre última; INEMA.CLUB; nunca duplicar.

Ver Completo
3.4~30 min

🧯 Gotchas & correções

Os erros que aparecem toda vez e a correção exata para cada um: de qual elemento animar ao problema de fontes, de overlapping clips ao determinismo do gerador.

O que é:

O framework do HyperFrames seta opacity:1 em todos os .clip durante a captura de frame — animações de opacidade neles são ignoradas. O alvo correto para fade-in/out é sempre .scene-inner, o container interno da cena.

Por que aprender:

Esse é o gotcha #1 mais frequente. O vídeo parece correto no browser mas o rendered final exibe cenas piscando ou sem transição.

Conceitos-chave:

Alvo correto = .scene-inner; .clip = proibido para opacity; framework override.

O que é:

Cenas ímpares (1, 3, 5…) usam o <audio> track A; cenas pares (2, 4, 6…) usam o track B. Isso permite que um track termine naturalmente enquanto o outro já carrega o próximo áudio — eliminando o problema de overlapping clips onde dois áudios tocam ao mesmo tempo.

Por que aprender:

Se você colocar todos os áudios no mesmo track, haverá sobreposição inevitável nas transições com FADE. O padrão alternado resolve isso estruturalmente.

Conceitos-chave:

Track A = ímpares; Track B = pares; sobreposição eliminada; preload no track inativo.

O que é:

Elementos puramente decorativos posicionados fora da área visível (ex.: glows que transbordam, ghost texts negativados) devem ter o atributo data-layout-ignore. Sem ele, o motor de layout do Remotion os contabiliza na bounding box e pode cortar ou deslocar a cena.

Por que aprender:

Decorativos off-canvas sem o atributo são a causa #1 de composições com crop inesperado no render.

Conceitos-chave:

data-layout-ignore; off-canvas; bounding box; decorativos invisíveis.

O que é:

O gotchas.md proíbe qualquer @import url(fonts.googleapis.com) no HTML gerado. A variável sentinela google_fonts_import é usada nos templates para garantir que o gerador lance erro se detectar a string no output — forçando sempre o uso de @font-face local.

Por que aprender:

O ambiente de render não tem acesso à internet. Um import externo causa fontes faltando, texto em fallback sans-serif e visual completamente quebrado.

Conceitos-chave:

Proibido Google Fonts CDN; @font-face local; sentinela google_fonts_import.

O que é:

No Windows e no git-bash, o ffmpeg tenta ler stdin interativo mesmo em chamadas não-interativas — travando o processo indefinidamente. A flag -nostdin desativa esse comportamento. Todos os comandos ffmpeg nos scripts do skill incluem ela por padrão.

Por que aprender:

Se você remover a flag ao adaptar um script, o processo travará silenciosamente no Windows sem mensagem de erro — difícil de diagnosticar.

Conceitos-chave:

-nostdin; Windows/git-bash; stdin interativo; processo travado.

O que é:

O gerador e os templates proíbem Date.now(), Math.random() e qualquer fetch() dentro do HTML renderizável. O Remotion renderiza cada frame de forma independente — código não-determinístico produz frames inconsistentes e vídeo com flickering.

Por que aprender:

É a causa mais difícil de diagnosticar: o vídeo parece correto em preview mas treme no render final. A regra simples: se o valor muda entre execuções, não pertence ao template.

Conceitos-chave:

Determinismo total; sem Date.now; sem Math.random; sem fetch runtime; valores fixos.

Ver Completo
← Todas as trilhas Trilha 4: Aplicações →