Communitygithub.com

MattiaIppoliti/tia-skills

Use quando o áudio já está posicionado em uma composição HyperFrames e precisa ser mixado: fade-in/fade-out, crossfade, ganho ou volume de faixa, automação de volume, ducking, um fundo musical que compete com uma narração (carve de narração), efeitos em uma faixa (EQ, compressor, limitador, gate, saturação, delay, reverb, chorus, phaser, bitcrush) ou envelopes de automação desenhados no volume de uma faixa ou em qualquer parâmetro de efeito. Não use para buscar ou gerar áudio — encontrar BGM, SFX ou criar uma narração é `/media-use`. Não use para cortes de clipe ou layout de faixa, que é `/hyperframes-core`.

O que é tia-skills?

Esta skill gerencia a mixagem de áudio em composições HyperFrames no Remotion, focando em relações entre faixas em vez de processamento isolado. Ela oferece fade-in/fade-out, crossfade, ganho/volume de faixa, automação de volume e parâmetros, ducking e carving de narração (quando um fundo musical compete com a voz), além de uma cadeia completa de efeitos: EQ (highpass, lowpass, peaking, shelves), compressor, limitador, gate, saturação, delay, reverb, chorus, phaser e bitcrush. Funciona em plataformas como Claude Code, Cursor e Codex, utilizando três atributos principais (data-fx-chain, data-automation, data-fx-carve) que são lidos por uma implementação compartilhada de Web Audio, garantindo que a pré-visualização corresponda à renderização final. A skill inclui documentação detalhada para diagnóstico de problemas de áudio, presets prontos para sintomas comuns (como 'abafado' ou 'estridente') e uma abordagem de 'subtraia antes de adicionar' para construir cadeias de efeitos eficientes.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/MattiaIppoliti/tia-skills/tree/HEAD/skills/video/hyperframes-audio

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

⚠ 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ê:

AquiNo 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 visualmente
uma timeline pausada em window.__timelines[id]nada; cada valor é uma função de useCurrentFrame()
data-start / data-duration em um clipe<Sequence from> / durationInFrames, em frames
um keyframe ou transição CSSstyle inline 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:

AtributoContém
data-fx-chainos efeitos, em ordem de sinal
data-automationenvelopes no volume desta faixa ou em seus parâmetros de efeito
data-fx-carveas 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 comoUse
Zumbido ou pancada por baixorumble-cut, ou um highpass em 80 Hz
Encorpado, peitoralTame Boominess job (200 Hz)
Abafado, atrás de papelãoReduce Mud job (250 Hz)
Palavras difíceis de entenderAdd Clarity job (3 kHz), ou esculpa o fundo
Áspero e cansativoSoften Harshness job (3.2 kHz)
Algumas palavras muito mais altas que outrasEvenness em um compressor, ou Even Out Levels
Tom da sala entre frasesroom-gate
Voz e música brigandoVoiceover carve — não um EQ em nenhum
Seco, gravado em lugar nenhumroom-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]

Individual skills in this repo

This repo contains 6 individual skills — each has its own dedicated page.

MattiaIppoliti/tia-skills

The technique catalog: five velocity-matched SEAMS (zoom-through, INVERSE zoom-through, cut-the-curve, waterfall cut, rack-focus blur-cut) plus the two in-scene techniques — waterfall ENTRY (staggered arrival cascades for title cards / segment openers) and the nudge curve (slow-fast-slow three-phase group slides). Covers partial-travel (~12% of frame) velocity matching via mirrored power4 eases, the Z scale-sign rule, size-scaled blur (10px text / 18-20px full-frame), word-by-word staggered cuts, cascade pacing by element weight, and the 10/65/25 slide ratio. Read before authoring any transition, text-beat handoff, kinetic text entry, or group reposition. [depth, zoom, inverse-zoom, scale-sign, mirrored-zoom, rack-focus, pacing, velocity, cut-the-curve, waterfall, stagger, cascade, kinetic-text, title-card, segment-opener, nudge, slide, easing, group-motion, z-depth, motion-graphics, cinematic, transition, blur, directional-continuity]

MattiaIppoliti/tia-skills

Import Figma content into a HyperFrames composition — rendered assets, brand tokens, components, storyboard sections → reconstructed motion (frames read as states, not slides) (REST/CLI), connector-assisted motion when available, and shaders from a connector or native export. Use when the user pastes a figma.com link or asks to bring a Figma design, frame, logo, brand, or animation into a video/composition.

MattiaIppoliti/tia-skills

Author or edit a custom HyperFrames composition when no specialized workflow fits, or when BRIEF.md sets flow: companion. Use for longer or multi-scene pieces, brand and sizzle reels, montages, static loops, static title cards, footage remixes, and freeform builds. Use motion-graphics instead for a short unnarrated motion-first unit, including an animated title. Route fresh creation through hyperframes before using this skill.

MattiaIppoliti/tia-skills

All animation knowledge for HyperFrames — atomic motion rules, multi-phase scene blueprints, scene transitions, broader motion-design techniques, AND the seven runtime adapters (GSAP default, plus Lottie, Three.js, Anime.js, CSS keyframes, Web Animations API, TypeGPU). Use for any motion or animation task: pick 2-4 rules and compose, or load a blueprint, or look up runtime-specific API (e.g. GSAP eases / Lottie player / Three.js mixer). Also covers auditing an existing composition's choreography (animation map) and 24 named text-animation effects. HyperFrames-native: single paused timeline, seek-safe, deterministic.

MattiaIppoliti/tia-skills

Drive the Remotion CLI development loop: scaffold, studio, type-check, compositions, still probes, single and batch render, bundle, Lambda and Cloud Run rendering, benchmark, versions, upgrade, and GPU checks. Also use when diagnosing a build or render failure, or when looking for a capability the retired HyperFrames CLI used to own.

MattiaIppoliti/tia-skills

The composition contract for building one renderable Remotion project. Use for project structure, `<Composition>` registration, `<Sequence>` timing, layer/track ordering, scene components, props and schemas, framework-owned media playback, deterministic-render rules, and validation. Also covers Tailwind projects and the STORYBOARD.md / SCRIPT.md plan formats. Read before writing composition code.

Habilidades Relacionadas