⚠ Status do contrato: craft está atualizado, código não está
O framework de saída deste stack é Remotion + React (
/hyperframes-core). O craft de motion aqui ainda se aplica: timing, escolhas de easing, a forma de um movimento, as regras nomeadas e os blueprints. O código não se aplica: exemplos e adaptadores foram escritos para o runtime aposentado de HTML + timeline GSAP pausada.Traduzindo conforme você lê:
Aqui No Remotion gsap.fromTo(el, {x:-40}, {x:0, duration:0.5})interpolate(frame, [0, SEC(0.5)], [-40, 0], {…"clamp"})ease: "back.out(1.7)"spring({frame, fps, config:{damping}}), ajustado visualmenteuma timeline pausada em window.__timelines[id]nada; cada valor é uma função de useCurrentFrame()data-start/data-durationem um clipe<Sequence from>/durationInFrames, em framesum keyframe ou transição CSS styleinline derivado do frame (animação CSS não renderiza)Nunca cole um exemplo desta skill em um projeto Remotion sem modificação.
HyperFrames Áudio
Uma mixagem é um conjunto de relações, não uma pilha de processadores. Duas faixas que cada uma soam bem sozinhas podem ser insuportáveis juntas, e a correção quase nunca é "abaixar uma" — é encontrar pelo que elas estão competindo e dar isso para aquela que precisa. Cada ferramenta aqui existe para expressar uma dessas relações.
Os efeitos residem no elemento como data-fx-chain, e a pré-visualização e a renderização usam o
mesmo grafo de Web Audio — o estúdio em um contexto ao vivo, o motor em um contexto offline
dentro do navegador que ele já dirige. Há uma única implementação de cada efeito,
então o que você ouve enquanto navega é o que é gravado. Você nunca ajusta duas vezes.
O corte de clipes continua sendo /hyperframes-core: cortes de áudio/vídeo e intervalos de origem usam
data-start, data-duration e data-media-start, e crossfades sobrepõem
clipes em faixas diferentes. Esta skill gerencia fade-in/fade-out de faixa posicionada,
envelopes de crossfade, ganho de faixa/volume de faixa, automação de volume e efeito,
ducking/carve de narração e a cadeia de efeitos. /media-use gerencia sourcing,
geração e pré-processamento.
Constante data-playback-rate (0.1..5) é segura para renderização de imagem e
som com preservação de tom quando elementos de áudio/vídeo correspondentes usam o mesmo timing,
deslocamento de origem e taxa. Rampas de velocidade de origem não são suportadas porque não há
envelope de taxa; pré-processe um asset sincronizado derivado. HyperFrames não fornece
sincronização automática de forma de onda ou correção de deriva.
Para receitas copiáveis de corte/crossfade/retiming, use /hyperframes-core → references/editing-recipes.md.
Três atributos carregam tudo, todos no próprio elemento de áudio/vídeo:
| Atributo | Contém |
|---|---|
data-fx-chain | os efeitos, em ordem de sinal |
data-automation | envelopes no volume desta faixa ou em seus parâmetros de efeito |
data-fx-carve | as próprias configurações do carve, para que possa ser rederivado |
As famílias de efeitos fornecidas são gain, EQ (highpass, lowpass, peaking, shelves), compressor, limiter, gate, saturate, delay, reverb, chorus, phaser e bitcrush.
JSON exato para cada um, e as regras que uma pista deve satisfazer: references/attributes.md.
Cada efeito com seus parâmetros, intervalos e unidades: references/fx-registry.md.
Como descobrir o que está errado com um arquivo que você não pode ouvir:
references/diagnosis.md.
Presets, trabalhos nomeados e perfis de um knob, além de uma tabela de sintoma para correção:
references/presets.md — leia isso antes de construir uma cadeia manualmente, porque um
dos presets ou trabalhos nomeados geralmente já nomeia o problema.
Como tudo se encaixa
Duas superfícies de autoria escrevem esses atributos; dois runtimes os leem através dos mesmos construtores. Esse meio compartilhado é o motivo pelo qual a pré-visualização prevê a renderização.
flowchart TB
voice["faixa de voz<br/>arquivo de mídia"]
bed["fundo musical<br/>arquivo de mídia"]
subgraph AUTHOR["Autoria — as únicas coisas que escrevem atributos"]
panel["Studio<br/>Controle de carve de narração"]
script["scripts/carve.mjs<br/>detecta o par, dinâmico por padrão"]
analysis["core/audioCarve.ts<br/>carveProfile · analyseCarveBands<br/>analyseCarveDuck · analyseCarveDynamics"]
panel --> analysis
script --> analysis
end
voz --> analise
fundo --> analise
subgraph ATRIBUTOS["Escritos no elemento do fundo musical"]
carveAttr["data-fx-carve<br/>origem · intensidade · dinâmico"]
chainAttr["data-fx-chain<br/>peaking xN + gain, marcado fromCarve"]
autoAttr["data-automation<br/>uma pista por parâmetro esculpido"]
end
analise --> atributoCarve
analise --> atributoCadeia
analise --> atributoAuto
subgraph COMPARTILHADO["Uma implementação, lida por ambos"]
build["audioFxGraph.ts · buildFxChain"]
sched["audioFxAutomation.ts · scheduleChainAutomation"]
end
atributoCadeia --> construir
atributoAuto --> agendar
construir --> preview["Pré-visualização<br/>AudioContext ao vivo<br/>attachElementFxChain"]
agendar --> preview
construir --> render["Renderização<br/>OfflineAudioContext no navegador headless<br/>applyAudioFxChain"]
agendar --> render
preview --> ouvido["o que você ouve enquanto navega"]
render --> wav["WAV processado<br/>+ chainTailSeconds para que a mixagem deixe a cauda passar"]
wav --> mix["motor · audioMixer<br/>pista de volume embutida no PCM aqui, não no grafo"]
mix --> saida["a mixagem renderizada"]
edit["editando o atributo durante a reprodução"] -.->|MutationObserver| preview
As próprias configurações do carve nunca são lidas durante a reprodução — a cadeia e as pistas
que ele produziu são o que toca. data-fx-carve existe para que a intensidade possa ser alterada em um
carve existente em vez de ser adivinhada de volta a partir dos filtros.
Dentro de um fundo musical esculpido, o sinal passa primeiro pelos cortes, depois pelo ajuste de nível, depois por qualquer coisa que você mesmo construiu — é por isso que um limitador que você adiciona ainda atua como o último teto:
flowchart LR
src["fundo musical decodificado"] --> p1["peaking<br/>400 Hz"]
p1 --> p2["peaking<br/>1 kHz"]
p2 --> p3["peaking<br/>1.6 kHz"]
p3 --> g["gain<br/>ajuste de nível"]
g --> mão["seus próprios efeitos<br/>ex.: limitador"]
mão --> dest["ganho da faixa, depois saída"]
l1["pista fx.n1.gain"] -.->|"envelope do nível da<br/>voz naquela banda"| p1
l4["pista fx.n4.gain"] -.->|"o quanto o fundo<br/>abaixa no geral"| g
Um carve estático é o mesmo grafo com valores fixos e nenhuma pista.
Primeiro, descubra o que está errado
A tabela abaixo começa de "soa encorpado" — o que pressupõe que alguém já ouviu e disse isso. Recebendo um arquivo e "conserta isso", você não tem tal frase e você não pode ouvir, então você tem que medir. Uma regra governa tudo:
O espectro absoluto de uma única voz desconhecida não pode ser diagnosticado. Formantes são ±10 dB, fundamentais variam de 85–255 Hz e frases declinam 5–6 dB conforme terminam. Cada um desses é lido como um defeito por si só, e cada um deles é o falante.
Então compare, e compare contra algo dentro do mesmo arquivo: o original limpo se existir, caso contrário, as pausas — qualquer coisa audível em um intervalo é aditiva, e o espectro do intervalo é o canal, não a voz. Comparar contra um espectro médio publicado ou uma voz de controle sintetizada não funciona: dois falantes diferem mais do que a maioria dos defeitos, e ambas as respostas erradas na avaliação por trás desta orientação vieram exatamente disso.
Quando não há original e nenhum silêncio utilizável, um defeito tonal estático é genuinamente subdeterminado. Diga isso e ofereça as leituras que se encaixam, em vez de escolher uma e construir uma cadeia nela.
Comandos, armadilhas e receitas testadas: references/diagnosis.md. Leia-o
antes de diagnosticar um arquivo que ninguém descreveu.
Comece pelo sintoma
Depois de conhecer a banda e o tipo, nomeie o que está errado com o áudio. A maioria dos áudios ruins é um ou dois destes, e cada um tem uma resposta pronta:
| Soa como | Use |
|---|---|
| Zumbido ou pancada por baixo | rumble-cut, ou um highpass em 80 Hz |
| Encorpado, peitoral | Tame Boominess job (200 Hz) |
| Abafado, atrás de papelão | Reduce Mud job (250 Hz) |
| Palavras difíceis de entender | Add Clarity job (3 kHz), ou esculpa o fundo |
| Áspero e cansativo | Soften Harshness job (3.2 kHz) |
| Algumas palavras muito mais altas que outras | Evenness em um compressor, ou Even Out Levels |
| Tom da sala entre frases | room-gate |
| Voz e música brigando | Voiceover carve — não um EQ em nenhum |
| Seco, gravado em lugar nenhum | room-tight ou room-natural |
| Apenas "amador" | voice-clean, que é quatro dos acima em ordem |
Catálogo completo, o que cada preset contém, o vocabulário de bandas e o que é
deliberadamente NÃO coberto (de-essing, remoção de ruído, correspondência de tom):
references/presets.md.
Subtraia antes de adicionar, nivele depois de filtrar, relações depois do nível, caráter e teto por último. Cada etapa muda o que a próxima ouve — um compressor definido antes de um high-pass gasta seu tempo perseguindo ruído.
Use uma família pelo problema, não pelo nome
Filtros (highpass, lowpass, peaking, lowshelf, highshelf) decidem
quais frequências uma faixa tem permissão para ocupar. Esta é a primeira ferramenta para duas
fontes colidindo, porque colisões acontecem em bandas: um fundo e uma voz ambos
querem 1–3 kHz, e tirar isso do fundo custa ao fundo muito menos do que abaixar
tudo custa à mixagem. Um high-pass em uma voz é a correção padrão para ruído;
um low-pass escurece ou abafa deliberadamente.
Dinâmicas (gain, compressor, limiter, gate) decidem como o nível de uma faixa
se comporta ao longo do tempo. A compressão reduz a distância entre o alto e o baixo para que
as partes baixas possam subir. Um limitador é um teto — ele não molda nada, ele
garante que nada passe. Um gate remove o que está abaixo de um limiar, que é
como você silencia o tom da sala entre frases. gain é um estágio de nível simples, e
é o que uma pista de automação monta quando uma faixa precisa sair do caminho.
Não lineares (saturate, bitcrush) mudam a forma da onda, o que adiciona
harmônicos que não estavam lá. Use quando uma faixa precisa de caráter ou
aspereza em vez de correção — e lembre-se de que é generativo: torna uma fonte fina
mais densa, não mais limpa.
Tempo (delay, reverb, chorus, phaser) coloca uma faixa em um espaço ou dá a ela
largura. Estes são os que mais facilmente estragam uma mixagem, porque uma cauda ou uma
cópia desafinada ocupa o mesmo espaço que uma voz precisa. Use-os na coisa que deve ficar
atrás de outra coisa, e mantenha a quantidade de wet menor do que soa bem
isoladamente.
A cadeia é serial: cada efeito processa o que o anterior produziu. Então filtragem corretiva vai no início, caráter no meio e um limitador por último onde ele pode realmente atuar como um teto.
Carve de narração
O problema que resolve. Um fundo musical sob uma voz torna a voz difícil de seguir. O reflexo é abaixar todo o fundo, o que funciona e custa ao fundo toda a sua presença — a música fica monótona por toda a narração. Mas a voz não precisa de todo o espectro. Ela precisa das poucas bandas que realmente ocupa. O carve pega apenas essas, e o fundo mantém seu grave e seu agudo, então ainda é música enquanto a voz ainda é inteligível.
É uma relação, não um efeito. As configurações residem no fundo — a faixa que é processada — e elas nomeiam as vozes para ouvir, exatamente como um compressor sidechain faz: você seleciona a faixa que fica mais baixa e escolhe o que a torna mais baixa. Nunca coloque um carve em uma faixa de voz. Uma voz esculpida contra si mesma é um bug, não uma escolha sutil de mixagem.
Toda voz, não apenas uma. sources é uma lista, porque um fundo geralmente roda
sob uma sequência inteira — um narrador, uma resposta de entrevista, um segundo apresentador. Elas
são somadas no relógio do próprio fundo antes que qualquer coisa seja medida (mixCarveSources),
então uma análise cobre todas elas: as bandas vêm de toda a fala que existe, e os
envelopes sobem onde quer que qualquer uma delas esteja acontecendo. Vozes que nunca tocam enquanto o fundo
toca são deixadas de fora; elas não podem mascará-lo.
Um knob. strength é 0..1 e deriva tudo: quão profundo cortar, quantas
bandas, quão largas, o quanto favorecer a inteligibilidade sobre a energia bruta da voz,
o quanto o nível pode cair, o quanto abaixo da voz mirar. Esses seis se movem
juntos em qualquer mixagem real — um carve suave é um corte raso em poucas bandas
com pouco ducking, um forte é mais profundo em mais bandas com mais — então eles são
uma relação escrita uma vez, em carveProfile. O padrão é 0.25 — uma queda de 6 dB em
três bandas com 6 dB de espaço de nível, audível sem soar como um buraco. Em
0.5 a queda atinge 10 dB, que é onde um carve começa a ser ouvido como um
efeito em vez de como espaço para a voz; acima disso é território deliberado para
um fundo alto sob uma voz baixa. 0 é apenas espectral — uma banda, sem ajuste de nível algum.
Carve por padrão. Um fundo tocando sob narração quer um carve; não é um passo de polimento para chegar se houver tempo. Coloque ambas as faixas, execute o comando abaixo, ouça. Pule apenas quando não houver narração para o fundo se sentar — um videoclipe, um cartão de título, um corte de montagem sincronizado com a faixa.
Ele sempre segue a voz. Não há modo estático: uma profundidade fixa empobrece o fundo por toda pausa, e depois que você ouviu ambos não há razão para oscilar.
[truncado para tradução]