media-use: Antes de buscar áudio/imagens, chame
/media-usepara resolver BGM/SFX/imagens do catálogo HeyGen. Execute--adoptprimeiro para registrar ativos existentes. Veja a habilidade/media-use.
general-video — workflow de vídeo geral
Confirme a rota antes de construir. Este é o fallback para autoria de composições personalizadas. Se a entrada claramente se encaixa em um workflow especializado, prefira-o: produto comercializado →
/product-launch-video; site geral →/general-video; explicador de tópico →/faceless-explainer; PR do GitHub →/pr-to-video; filmagens existentes →/embedded-captions·/talking-head-recut; motion graphic curto sem narração →/motion-graphics; migração do Remotion →/remotion-to-hyperframes. Fora do escopo: dados em tempo real / no momento da renderização, edição estilo NLE de um vídeo finalizado, ou produção de filmagens que o HyperFrames não pode capturar. Não tem certeza? Leia/hyperframesprimeiro.
Construa exatamente o que foi solicitado. Um cartão de título é um cartão de título — não um cartão de título + três cenas de apoio + música ambiente + legendas. Se cenas ou elementos extras melhorariam genuinamente a peça, proponha-os; não os adicione silenciosamente. Para pequenas edições (corrigir uma cor, ajustar uma duração, adicionar um elemento), pule as etapas de planejamento e vá direto para a construção.
Abordagem
Descoberta — apenas para solicitações abertas
Para solicitações vagas e exploratórias ("faça algo para nossa marca", "uma introdução legal") — entenda a intenção antes de escolher cores:
- Público — quem assiste? desenvolvedores / executivos / consumidores gerais?
- Plataforma — onde é reproduzido? redes sociais (15s) / hero do site / demonstração de produto / interno?
- Prioridade — o que importa mais? qualidade do movimento / precisão do conteúdo / fidelidade à marca / velocidade?
- Variações — uma melhor versão, ou 2 a 3 opções significativamente diferentes (ritmo, energia ou estrutura diferentes — não apenas trocas de cor)?
Para solicitações específicas ("adicione um cartão de título", "corrija o tempo da cena 3"), pule a descoberta.
Passo 1 — Sistema de design → hyperframes-creative
Estabeleça a identidade visual primeiro. Se o projeto tem uma especificação de design, leia-a (precedência frame.md → design.md → DESIGN.md; trate-a como verdade da marca — cores exatas, fontes, restrições).
Se não houver especificação, você DEVE ler AMBOS hyperframes-creative/references/house-style.md E hyperframes-creative/references/video-composition.md antes de escolher qualquer cor ou fonte. house-style.md fornece o iniciador "interprete o prompt / gere conteúdo real", lista de lazy-default e receita de camadas; video-composition.md fornece as regras de densidade/escala/detalhamento de primeiro plano (barras de dados, marcas de registro, metadados monoespaçados, "8-10 elementos, dois que o usuário não pediu") que separa "produzido" de "gerado." Ler apenas um é o erro mais comum — video-composition.md é aquele que os agentes pulam, e é exatamente o que evita saídas planas, centralizadas e com aparência de página web. Não invente uma paleta e pule estes; acessar hyperframes-creative é obrigatório aqui, não um ramo opcional. A partir daí, também puxe um estilo/mood nomeado → references/visual-styles.md, ou o seletor interativo → references/design-picker.md, conforme necessário. A especificação/estilo define a marca, não as regras de composição.
Encontre o ângulo (brief vago, sem especificação): antes de escolher cores, escreva UMA frase — o que este nome/palavra/tópico evoca, e qual mundo visual (metáfora, cenário, instrumento, motivo) o expressa? Ex: uma ferramenta de cibersegurança → portas de cofre / linhas de varredura de perímetro / linguetas de fechadura; um app de meditação → maré, respiração, leve brilho lento. Leia o significado do assunto, não apenas suas letras; escolha um ângulo concreto em vez de uma reformulação literal. Este é o substituto barato para a expansão de prompt (Passo 2) em peças de uma cena, onde a expansão é corretamente ignorada — e é a diferença entre um conceito projetado e um logotipo genérico em gradiente.
Passo 2 — Expansão de prompt → hyperframes-creative
Execute para cada composição multi-cena (pule para peças de uma cena e edições triviais). Fundamente a solicitação contra a especificação de design + estilo da casa em um intermediário consistente que o trabalho downstream leia da mesma forma. Veja hyperframes-creative/references/prompt-expansion.md.
Passo 3 — Plano
Antes de escrever HTML, pense em alto nível:
- O quê — a experiência do espectador: arco narrativo, momentos-chave, batidas emocionais.
- Estrutura — quantas composições, sub-comp vs inline, quais faixas carregam vídeo / áudio / overlays / legendas. Para a decisão entre arquivo monolítico único vs modular sub-comp, veja
hyperframes-core/references/composition-patterns.md§ Duas Arquiteturas (regra prática: ≥3 cortes de cena difíceis, ou qualquer cena reutilizada → modularize; uma peça curta de uma cena permanece um arquivo). - Ritmo — nomeie o padrão antes de implementar (ex:
fast-fast-SLOW-SHADER-hold); vejahyperframes-creative/references/beat-direction.md. - Tempo — quais clipes determinam a duração, onde as transições ocorrem, o ritmo.
- Layout — construa o estado final primeiro (veja abaixo).
- Animar — depois adicione movimento via
hyperframes-animation.
Layout Antes da Animação
Posicione cada elemento onde ele fica em seu momento mais visível — totalmente entrado, colocado corretamente, ainda não saindo. Escreva isso como HTML + CSS estático primeiro. Ainda sem GSAP.
Por quê: se você posicionar elementos em seu estado inicial animado (fora da tela, escalados para 0, opacidade 0) e tweenear para onde você acha que eles pousam, você está adivinhando o layout final — sobreposições ficam invisíveis até a renderização. Construa o estado final primeiro e você vê e corrige problemas de layout antes de adicionar movimento.
- Identifique a moldura hero para cada cena — o momento em que o maior número de elementos está simultaneamente visível. Esse é o layout que você constrói.
- Escreva CSS estático para essa moldura. O contêiner de conteúdo deve preencher a cena com padding, não deslocamentos absolutos:
.scene-content {
display: flex;
flex-direction: column;
justify-content: center;
width: 100%;
height: 100%;
padding: 120px 160px; /* padding posiciona o conteúdo; preenche qualquer tamanho de cena */
gap: 24px;
box-sizing: border-box;
}
Nunca use position: absolute; top: Npx em um contêiner de conteúdo — ele transborda quando o conteúdo é mais alto que o espaço. Reserve o posicionamento absoluto para elementos decorativos.
⚠ O
width/height: 100%acima só funciona se cada ancestral tiver uma altura resolvida. A raiz<div data-composition-id>e qualquer wrapper entre ela e.scene-contentdevem ser dimensionados (position: relative; width: 1920px; height: 1080pxna raiz — vejahyperframes-core→ "A raiz deve ser dimensionada"). Pule isso e o contêiner flexível colapsa para ~0, o conteúdo se amontoa no canto superior esquerdo, e o primeiro glifo corta em x=0 — enquantolint/inspectainda relatam 0 problemas. E sempre mantenha opadding(≥80px) em.scene-content: é a margem de segurança do título. Nunca substitua porgappuro.
- Adicione entradas — anime DE fora da tela/invisível PARA a posição CSS com
gsap.from()(em sub-composições prefiragsap.fromTo()para que o estado inicial seja explícito; vejahyperframes-core/references/sub-compositions.md). A posição CSS é a verdade fundamental; o tween é a jornada até ela. - Saídas são tratadas por transição — de acordo com as regras de transição de cena em
hyperframes-animation/transitions/, apenas a cena final anima elementos para fora; entre cenas a transição É a saída.
Espaço compartilhado ao longo do tempo: se o elemento A sai antes do elemento B entrar na mesma área, ambos ainda precisam de posições CSS corretas para suas respectivas molduras hero — a ordenação da linha do tempo impede que coexistam, e a etapa de layout detecta sobreposição acidental. Brilhos/sombras em camadas e profundidade z-stacked são sobreposição intencional; a etapa é sobre detectar colisões não intencionais (dois títulos um sobre o outro, conteúdo vazando para fora do quadro).
Construir — delegue para as habilidades de domínio
Isso mapeia a superfície completa da habilidade (veja a description) para suas referências — não exaustivo; quando uma intenção não está listada, roteie através de hyperframes-creative (aparência/conceito), hyperframes-animation (movimento), hyperframes-core (contrato), hyperframes-media (áudio/legendas). A primeira linha é ADITIVA — leia-a E sua linha de intenção, não uma ou outra.
| Construindo… | Leia primeiro (em ordem) |
|---|---|
| SEMPRE — toda peça não trivial, além da sua linha de intenção abaixo | hyperframes-creative/references/house-style.md + references/video-composition.md (também bloqueado no Passo 1 / HARD-GATE; o detalhamento de primeiro plano "produzido, não gerado") |
| Tipografia cinética / com foco em texto | hyperframes-animation/techniques.md (tipo cinético) + adapters/gsap-easing-and-stagger.md + rules/kinetic-beat-slam.md |
| Cartão de título / terço inferior / overlay / PiP / texto atrás do assunto | hyperframes-creative/references/composition-patterns.md + (para a moldura centralizada/redimensionada) hyperframes-core → "A raiz deve ser dimensionada" |
| Revelação de logotipo / marca | hyperframes-animation/rules/svg-path-draw.md (desenho) + rules/3d-text-depth-layers.md + rules/scale-swap-transition.md |
| Dados / estatísticas / números | hyperframes-animation/rules/counting-dynamic-scale.md + rules/stat-bars-and-fills.md + hyperframes-creative/references/data-in-motion.md |
| Demonstração de produto / app / UI | hyperframes-animation/rules/3d-page-scroll.md + rules/cursor-click-ripple.md + rules/press-release-spring.md |
| Áudio-reativo / orientado por música | hyperframes-creative/references/audio-reactive.md (pré-extrair faixas; mapear para movimento) |
| Narrado / voiceover / música / SFX / legendas | hyperframes-media → o motor de áudio compartilhado scripts/audio.mjs (uma chamada = TTS + BGM + SFX → audio_meta.json); autoria de legendas + posicionamento de ativos via hyperframes-core. Veja Áudio abaixo. |
| Multi-cena / transições | hyperframes-animation/transitions/overview.md depois transitions/catalog.md (você não terminou após a visão geral — a receita GSAP está no catálogo) |
| Modular / sub-composições | hyperframes-core/references/composition-patterns.md + references/sub-compositions.md |
Áudio: um motor (TTS · BGM · SFX)
Apenas quando a peça exigir (de acordo com "construa exatamente o que foi solicitado" — sem música ambiente em um cartão de título). Não crie TTS manualmente nem contrate uma cópia: escreva um audio_request.json neutro e chame o motor compartilhado em hyperframes-media. Ele degrada automaticamente em um interruptor — HeyGen credencial presente → HeyGen TTS + música/SFX recuperação; ausente → ElevenLabs/Kokoro TTS, Lyria/MusicGen BGM geração, e a biblioteca SFX agrupada. Lista completa de flags + esquema de requisição/meta: o comentário de cabeçalho de hyperframes-media/scripts/audio.mjs.
// audio_request.json — uma linha por segmento narrado; `id` é seu (une audio_meta de volta)
{
"lines": [
{ "id": "s1", "text": "Sua linha de abertura.", "sfx": ["whoosh"] },
{ "id": "s2", "text": "A próxima batida." },
],
"bgm": { "query": "calm cinematic underscore" }, // omita "mode" → auto (recupera se HeyGen, senão gera); "none" para desabilitar
}
# <MEDIA_DIR> = o diretório da habilidade hyperframes-media instalada (irmão desta habilidade)
node <MEDIA_DIR>/scripts/audio.mjs --request ./audio_request.json --hyperframes . --out ./audio_meta.json
Depois leia audio_meta.json: monte cada voices[].path + (bgm.path, sfx[]) como faixas <audio> e use voices[].words para legendas, tudo de acordo com hyperframes-core (faixas de áudio + autoria de legendas). Se o BGM seguiu o caminho de geração (bgm_pending: true), execute hyperframes-media/scripts/wait-bgm.mjs antes da renderização final.
Checklist de saída → hyperframes-cli
- [ ]
…
[truncado para tradução]