Communitygithub.com

MattiaIppoliti/tia-skills

Se usa cuando el audio ya colocado en una composición de HyperFrames necesita ser mezclado: fundido de entrada/salida, fundido cruzado, ganancia o volumen de pista, automatización de volumen, ducker, una cama musical que lucha con una voz (tallado de voz), efectos en una pista (EQ, compresor, limitador, puerta de ruido, saturación, delay, reverberación, coro, phaser, bitcrush), o envolventes de automatización dibujadas en el volumen de una pista o en cualquier parámetro de efecto. No usar para obtener o generar audio (encontrar BGM, SFX o hacer una voz en off es `/media-use`). No usar para sincronización de clips o diseño de pistas, que es `/hyperframes-core`.

¿Qué es tia-skills?

Este skill está diseñado para la mezcla de audio dentro del framework HyperFrames (basado en Remotion + React). Proporciona un conjunto completo de herramientas para manejar relaciones entre pistas de audio, como fundidos, automatización de volumen y efectos, y el tallado de voz (voiceover carve) para que una cama musical no opaque a la voz en off. El skill se basa en tres atributos clave (`data-fx-chain`, `data-automation` y `data-fx-carve`) que se escriben en los elementos de audio/video y son leídos por un motor de audio compartido que funciona tanto en vista previa como en renderizado final, garantizando que lo que se escucha durante la edición es idéntico al resultado final. Incluye familias de efectos como filtros (EQ), dinámicos (compresor, limitador, puerta), no lineales (saturación, bitcrush) y de tiempo (delay, reverberación, coro, phaser), así como presets y diagnósticos para solucionar problemas comunes de audio. El skill enfatiza que la mezcla se trata de relaciones entre pistas, no de procesar cada una por separado, y advierte que el código de ejemplo actual está escrito para un runtime anterior (GSAP) y debe traducirse a Remotion.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

⚠ Estado del contrato: el oficio está actualizado, el código no lo está

El framework de salida de este stack es Remotion + React (/hyperframes-core). El oficio de animación aquí sigue siendo aplicable: temporización, elecciones de easing, la forma de un movimiento, las reglas con nombre y los blueprints. El código no lo está: los ejemplos y adaptadores están escritos para el runtime retirado de HTML + línea de tiempo de GSAP en pausa.

Traduciendo mientras lees:

AquíEn 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 a ojo
una línea de tiempo en pausa en window.__timelines[id]nada; cada valor es una función de useCurrentFrame()
data-start / data-duration en un clip<Sequence from> / durationInFrames, en frames
un keyframe o transición CSSstyle en línea derivado de frames (la animación CSS no se renderiza)

Nunca pegues un ejemplo de este skill en un proyecto de Remotion sin modificar.

Audio de HyperFrames

Una mezcla es un conjunto de relaciones, no una pila de procesadores. Dos pistas que suenan bien por separado pueden ser inescuchables juntas, y la solución casi nunca es "bajar una" — es encontrar por qué están peleando y dárselo a quien lo necesite. Cada herramienta aquí existe para expresar una de esas relaciones.

Los efectos viven en el elemento como data-fx-chain, y la vista previa y el renderizado usan el mismo grafo de Web Audio — el estudio en un contexto en vivo, el motor en uno fuera de línea dentro del navegador que ya maneja. Hay una implementación de cada efecto, así que lo que escuchas mientras desplazas es lo que se escribe. Nunca ajustas dos veces.

La sincronización de clips sigue siendo /hyperframes-core: los recortes de audio/video y los rangos de fuente usan data-start, data-duration y data-media-start, y los fundidos cruzados superponen clips en diferentes pistas. Este skill posee fundido de entrada/salida de pista colocada, envolventes de fundido cruzado, ganancia/volumen de pista, automatización de volumen y efectos, ducker/tallado de voz y la cadena de efectos. /media-use posee la obtención, generación y preprocesamiento.

La constante data-playback-rate (0.1..5) es segura para renderizar en imagen y sonido con preservación de tono cuando los elementos de audio/video coincidentes usan la misma temporización, desplazamiento de fuente y velocidad. No se admiten rampas de velocidad de fuente porque no hay envolvente de velocidad; preprocesa un activo sincronizado derivado. HyperFrames no proporciona sincronización automática de forma de onda ni corrección de deriva. Para recetas copiables de corte/fundido cruzado/re-temporización, usa /hyperframes-core → references/editing-recipes.md.

Tres atributos lo llevan todo, todos en el elemento de audio/video:

AtributoContiene
data-fx-chainlos efectos, en orden de señal
data-automationenvolventes en el volumen de esta pista o en sus parámetros de efecto
data-fx-carvela configuración del tallado, para que pueda re-derivarse

Las familias de efectos incluidas son ganancia, EQ (pasa altos, pasa bajos, pico, estantes), compresor, limitador, puerta, saturar, delay, reverberación, coro, phaser y bitcrush.

El JSON exacto para cada uno, y las reglas que un carril debe cumplir: references/attributes.md. Cada efecto con sus parámetros, rangos y unidades: references/fx-registry.md. Cómo descubrir qué está mal en un archivo que no puedes escuchar: references/diagnosis.md. Presets, trabajos con nombre y perfiles de un solo mando, más una tabla de síntoma a solución: references/presets.md — léelo antes de construir una cadena manualmente, porque uno de los presets o trabajos con nombre suele nombrar el problema.

Cómo encaja todo

Dos superficies de autoría escriben esos atributos; dos tiempos de ejecución los leen a través de los mismos constructores. Eso compartido en el medio es por lo que la vista previa predice el renderizado.

flowchart TB
  voice["pista de voz<br/>archivo de medios"]
  bed["cama musical<br/>archivo de medios"]

  subgraph AUTOR["Autoría — las únicas cosas que escriben atributos"]
    panel["Estudio<br/>Control de tallado de voz"]
    script["scripts/carve.mjs<br/>detecta el par, dinámico por defecto"]
    analysis["core/audioCarve.ts<br/>carveProfile · analyseCarveBands<br/>analyseCarveDuck · analyseCarveDynamics"]
    panel --> analysis
    script --> analysis
  end

  voice --> analysis
  bed --> analysis

  subgraph ATTRS["Escritos en el elemento de la cama"]
    carveAttr["data-fx-carve<br/>fuente · fuerza · dinámico"]
    chainAttr["data-fx-chain<br/>pico xN + ganancia, etiquetado fromCarve"]
    autoAttr["data-automation<br/>un carril por parámetro tallado"]
  end

  analysis --> carveAttr
  analysis --> chainAttr
  analysis --> autoAttr

  subgraph COMPARTIDO["Una implementación, leída por ambos"]
    build["audioFxGraph.ts · buildFxChain"]
    sched["audioFxAutomation.ts · scheduleChainAutomation"]
  end

  chainAttr --> build
  autoAttr --> sched

  build --> preview["Vista previa<br/>AudioContext en vivo<br/>attachElementFxChain"]
  sched --> preview
  build --> render["Renderizado<br/>OfflineAudioContext en el navegador sin cabeza<br/>applyAudioFxChain"]
  sched --> render

  preview --> heard["lo que escuchas mientras desplazas"]
  render --> wav["WAV procesado<br/>+ chainTailSeconds para que la mezcla deje pasar la cola"]
  wav --> mix["motor · audioMixer<br/>el carril de volumen horneado en este PCM, no en el grafo"]
  mix --> out["la mezcla renderizada"]

  edit["editar el atributo durante la reproducción"] -.->|MutationObserver| preview

La configuración del tallado nunca se lee durante la reproducción — la cadena y los carriles que produjo son lo que se reproduce. data-fx-carve existe para que se pueda cambiar la fuerza en un tallado existente en lugar de adivinarla de nuevo a partir de los filtros.

Dentro de una cama tallada, la señal pasa primero por los cortes, luego por el ajuste de nivel, luego por cualquier cosa que hayas construido tú mismo — razón por la cual un limitador que agregas sigue actuando como el último techo:

flowchart LR
  src["cama decodificada"] --> p1["pico<br/>400 Hz"]
  p1 --> p2["pico<br/>1 kHz"]
  p2 --> p3["pico<br/>1.6 kHz"]
  p3 --> g["ganancia<br/>ajuste de nivel"]
  g --> hand["tus propios efectos<br/>p. ej. limitador"]
  hand --> dest["ganancia de pista, luego salida"]

  l1["carril fx.n1.gain"] -.->|"envolvente del<br/>nivel de la voz en esa banda"| p1
  l4["carril fx.n4.gain"] -.->|"cuánto<br/>ducka la cama en general"| g

Un tallado estático es el mismo grafo con valores fijos y sin carriles.

Primero, descubre qué está mal

La tabla a continuación comienza desde "suena retumbante" — lo que presupone que alguien ya escuchó y lo dijo. Si te dan un archivo y "arregla esto", no tienes tal frase y no puedes escuchar, así que tienes que medir. Una regla lo gobierna todo:

El espectro absoluto de una sola voz desconocida no puede ser diagnosticado. Los formantes son ±10 dB, los fundamentales recorren 85–255 Hz y las oraciones disminuyen 5–6 dB al final. Cada uno de esos se lee como un defecto por sí mismo, y cada uno de ellos es el hablante.

Así que compara, y compara contra algo dentro del mismo archivo: el original limpio si existe, de lo contrario las pausas — lo que sea audible en un silencio es aditivo, y el espectro del silencio es el canal en lugar de la voz. Comparar contra un espectro promedio publicado o una voz de control sintetizada no funciona: dos hablantes difieren más que la mayoría de los defectos, y ambas respuestas erróneas en la evaluación detrás de esta guía provinieron exactamente de eso.

Cuando no hay original ni silencio utilizable, un defecto tonal estático está legítimamente subdeterminado. Dilo y ofrece las lecturas que encajen, en lugar de elegir una y construir una cadena basada en ella.

Comandos, trampas y recetas comprobadas: references/diagnosis.md. Léelo antes de diagnosticar un archivo que nadie ha descrito.

Comienza por el síntoma

Una vez que conoces la banda y el tipo, nombra qué está mal con el audio. La mayoría del audio malo es uno o dos de estos, y cada uno tiene una respuesta ya incluida:

Suena comoRecurre a
Zumbido o golpeteo debajorumble-cut, o un highpass a 80 Hz
Retumbante, pectoralTame Boominess trabajo (200 Hz)
Apagado, detrás de cartónReduce Mud trabajo (250 Hz)
Palabras difíciles de entenderAdd Clarity trabajo (3 kHz), o talla la cama
Áspero y cansadoSoften Harshness trabajo (3.2 kHz)
Algunas palabras mucho más fuertes que otrasEvenness en un compresor, o Even Out Levels
Sonido de ambiente entre frasesroom-gate
Voz y música peleandoTallado de voz — no un EQ en ninguna
Seco, grabado en ninguna parteroom-tight o room-natural
Simplemente "amateur"voice-clean, que son cuatro de los anteriores en orden

Catálogo completo, qué contiene cada preset, el vocabulario de bandas y qué está deliberadamente NO cubierto (de-essing, eliminación de ruido, coincidencia de tono): references/presets.md.

Resta antes de sumar, nivela después de filtrar, relaciones después del nivel, carácter y techo al final. Cada paso cambia lo que el siguiente escucha — un compresor configurado antes de un pasa altos pasa su tiempo persiguiendo retumbos.

Recurre a una familia por el problema, no por el nombre

Filtros (highpass, lowpass, peaking, lowshelf, highshelf) deciden qué frecuencias puede ocupar una pista. Esta es la primera herramienta para dos fuentes que chocan, porque los choques ocurren en bandas: una cama y una voz ambas quieren 1–3 kHz, y quitar eso de la cama le cuesta a la cama mucho menos que bajar todo el volumen le cuesta a la mezcla. Un pasa altos en una voz es la solución estándar para el retumbo; un pasa bajos oscurece o amortigua deliberadamente.

Dinámicos (gain, compressor, limiter, gate) deciden cómo se comporta el nivel de una pista a lo largo del tiempo. La compresión reduce la distancia entre lo fuerte y lo suave para que las partes suaves puedan subir. Un limitador es un techo — no moldea nada, garantiza que nada pase. Una puerta elimina lo que está por debajo de un umbral, que es cómo silencias el sonido de ambiente entre frases. gain es una etapa de nivel simple, y es lo que monta un carril de automatización cuando una pista tiene que apartarse.

No lineales (saturate, bitcrush) cambian la forma de la onda, lo que agrega armónicos que no estaban allí. Recurre a ello cuando una pista necesita carácter o asperezan más que corrección — y recuerda que es generativo: hace que una fuente delgada sea más densa, no más limpia.

Tiempo (delay, reverb, chorus, phaser) pone una pista en un espacio o le da amplitud. Estos son los que más fácilmente arruinan una mezcla, porque una cola o una copia desafinada ocupa el mismo espacio que necesita una voz. Úsalos en la cosa que debería sentarse detrás de otra cosa, y mantén la cantidad de efecto húmedo más baja de lo que suena bien de forma aislada.

La cadena es serial: cada efecto procesa lo que el anterior produjo. Así que el filtrado correctivo va temprano, el carácter en el medio, y un limitador al final donde pueda actuar realmente como un techo.

Tallado de voz

El problema que resuelve. Una cama musical debajo de una voz hace que la voz sea difícil de seguir. El reflejo es duckear toda la cama, lo que funciona pero le cuesta a la cama toda su presencia — la música se vuelve débil durante toda la voz en off. Pero la voz no necesita todo el espectro. Necesita las pocas bandas que realmente ocupa. El tallado toma solo esas, y la cama conserva su extremo bajo y su tope, así que sigue siendo música mientras la voz sigue siendo inteligible.

Es una relación, no un efecto. La configuración vive en la cama — la pista que se procesa — y nombran las voces a las que escuchar, exactamente como lo hace un compresor de cadena lateral: seleccionas la pista que se vuelve más baja y eliges qué la hace más baja. Nunca pongas un tallado en una pista de voz. Una voz tallada contra sí misma es un error, no una elección sutil de mezcla.

Cada voz, no una de ellas. sources es una lista, porque una cama suele correr debajo de una secuencia completa — un narrador, una respuesta de entrevista, un segundo presentador. Son sumadas en el propio reloj de la cama antes de que se mida nada (mixCarveSources), así que un análisis cubre todas: las bandas provienen de todo el discurso que hay, y las envolventes suben dondequiera que alguno de ellos esté ocurriendo. Las voces que nunca suenan mientras la cama lo hace se excluyen; no pueden enmascararla.

Un mando. strength es 0..1 y deriva todo: qué tan profundo cortar, cuántas bandas, qué tan anchas, hasta qué punto favorecer la inteligibilidad sobre la energía vocal bruta, hasta dónde puede caer el nivel, hasta dónde debajo de la voz apuntar. Esos seis se mueven juntos en cualquier mezcla real — un tallado suave es un corte superficial en pocas bandas con poco ducking, uno fuerte es más profundo en más bandas con más — así que son una relación escrita una vez, en carveProfile. El valor predeterminado es 0.25 — un corte de 6 dB en tres bandas con 6 dB de margen de nivel, audible sin sonar como un agujero. A 0.5 el corte alcanza 10 dB, que es donde un tallado comienza a escucharse como un efecto en lugar de como espacio para la voz; por encima de eso es territorio deliberado para una cama fuerte debajo de una voz suave. 0 es solo espectral — una banda, sin ajuste de nivel.

Tallado por defecto. Una cama que suena debajo de una narración quiere un tallado; no es un paso de pulido al que llegar si hay tiempo. Coloca ambas pistas, ejecuta el comando a continuación, escucha. Sáltalo solo cuando no haya narración para que la música se siente debajo — un video musical, una tarjeta de título, un montaje cortado a la pista.

Siempre sigue a la voz. No hay modo estático: una profundidad fija adelgaza la cama a través de cada pausa, y una vez que has escuchado ambas, no hay razón para dudar...

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.

Skills relacionados