Communitygithub.com

MattiaIppoliti/tia-skills

À utiliser lorsque l'audio déjà placé dans une composition HyperFrames doit être mixé : fondu d'ouverture/fermeture, fondu enchaîné, gain ou volume de piste, automation de volume, ducking, un lit musical qui lutte contre une voix (carving de voix), effets sur une piste (EQ, compresseur, limiteur, gate, saturation, delay, reverb, chorus, phaser, bitcrush), ou enveloppes d'automation dessinées sur le volume ou tout paramètre d'effet d'une piste. Ne pas utiliser pour sourcer ou générer de l'audio — trouver une BGM, un SFX ou faire une voix off relève de `/media-use`. Ne pas utiliser pour le timing des clips ou la disposition des pistes, qui relèvent de `/hyperframes-core`.

Qu'est-ce que tia-skills ?

Ce skill est dédié au mixage audio dans l'écosystème HyperFrames, un framework de composition vidéo basé sur Remotion et React. Il n'ajoute pas d'effets visuels mais expose un ensemble d'outils audio professionnels pour traiter les pistes audio déjà placées dans une composition : fondu d'ouverture/fermeture, fondu enchaîné, gain, volume, automation, ducking (réduction de niveau), carving de voix (creusement spectral automatique d'un lit musical pour laisser passer une voix), et une chaîne d'effets incluant l'égalisation (EQ), la compression, la saturation, la réverbération, le delay, le chorus, le phaser, le bitcrush, etc. Il s'appuie sur le Web Audio API, avec une implémentation unique utilisée à la fois dans l'aperçu en direct et lors du rendu final, garantissant que ce que vous entendez en scrubbant est exactement ce qui sera écrit dans le fichier rendu. Le skill fonctionne via des attributs HTML spécifiques (`data-fx-chain`, `data-automation`, `data-fx-carve`) placés sur les éléments audio/vidéo, et inclut un module de carving de voix dynamique qui analyse spectralement le signal de la voix pour y adapter automatiquement le lit musical. Il gère également des enveloppes d'automation pour le volume et les paramètres d'effets, et fournit des références détaillées (diagnostic, paramètres, préréglages) pour guider l'utilisateur dans le diagnostic et le traitement des problèmes audio.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

⚠ Statut du contrat : le savoir-faire est actuel, le code ne l'est pas

Le framework de sortie de cette pile est Remotion + React (/hyperframes-core). Le savoir-faire en animation s'applique toujours : timing, choix d'easing, la forme d'un mouvement, les règles nommées et les plans. Le code ne s'applique pas : les exemples et adaptateurs sont écrits pour le runtime retiré HTML + timeline GSAP en pause.

Traduction en lisant :

IciDans 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}}), réglé à l'œil
une timeline en pause à window.__timelines[id]rien ; chaque valeur est une fonction de useCurrentFrame()
data-start / data-duration sur un clip<Sequence from> / durationInFrames, en trames
une keyframe CSS ou une transitionstyle en ligne dérivé de la trame (l'animation CSS ne se rend pas)

Ne collez jamais un exemple de ce skill dans un projet Remotion sans le modifier.

HyperFrames Audio

Un mix est un ensemble de relations, pas une pile de processeurs. Deux pistes qui sonnent bien chacune de leur côté peuvent être inécoutables ensemble, et la solution n'est presque jamais « baisser l'une » — c'est trouver ce sur quoi elles se disputent et le donner à celle qui en a besoin. Chaque outil ici existe pour exprimer une de ces relations.

Les effets vivent sur l'élément en tant que data-fx-chain, et l'aperçu et le rendu utilisent le même graphe Web Audio — le studio dans un contexte en direct, le moteur dans un contexte hors ligne à l'intérieur du navigateur qu'il pilote déjà. Il y a une seule implémentation pour chaque effet, donc ce que vous entendez en scrubbant est ce qui sera écrit. Vous ne réglez jamais deux fois.

Le timing des clips reste /hyperframes-core : les coupes audio/vidéo et les plages source utilisent data-start, data-duration et data-media-start, et les fondus enchaînés superposent les clips sur différentes pistes. Ce skill gère le fondu d'ouverture/fermeture des pistes placées, les enveloppes de fondu enchaîné, le gain de piste/volume de piste, l'automation du volume et des effets, le ducking/carving de voix, et la chaîne d'effets. /media-use gère le sourçage, la génération et le prétraitement.

La constante data-playback-rate (0.1..5) est sûre pour le rendu de l'image et du son préservé en hauteur lorsque les éléments audio/vidéo correspondants utilisent le même timing, le même décalage source et la même vitesse. Les variations de vitesse de la source ne sont pas prises en charge car il n'y a pas d'enveloppe de vitesse ; prétraitez un actif synchronisé dérivé. HyperFrames ne fournit pas de synchronisation de forme d'onde automatique ni de correction de dérive. Pour les recettes copiables de coupe/fondu enchaîné/re-timing, utilisez /hyperframes-core → references/editing-recipes.md.

Trois attributs portent tout, directement sur l'élément audio/vidéo :

AttributContient
data-fx-chainles effets, dans l'ordre du signal
data-automationles enveloppes sur le volume de cette piste ou ses paramètres d'effets
data-fx-carveles paramètres propres du carve, pour pouvoir le redériver

Les familles d'effets livrées sont le gain, l'égalisation (passe-haut, passe-bas, escent, étagères), le compresseur, le limiteur, le gate, la saturation, le delay, la réverbération, le chorus, le phaser et le bitcrush.

Le JSON exact pour chacun, et les règles qu'une voie doit satisfaire : references/attributes.md. Chaque effet avec ses paramètres, plages et unités : references/fx-registry.md. Comment déterminer ce qui ne va pas avec un fichier que vous ne pouvez pas entendre : references/diagnosis.md. Préréglages, travaux nommés et profils à un seul bouton, plus un tableau symptôme-à-solution : references/presets.md — lisez-le avant de construire une chaîne à la main, car l'un des préréglages ou travaux nommés nomme généralement déjà le problème.

Comment tout s'assemble

Deux surfaces de création écrivent ces attributs ; deux runtimes les lisent à travers les mêmes constructeurs. Ce milieu partagé est la raison pour laquelle l'aperçu prédit le rendu.

flowchart TB
  voice["piste voix<br/>fichier média"]
  bed["lit musical<br/>fichier média"]

  subgraph AUTHOR["Création — les seules choses qui écrivent les attributs"]
    panel["Studio<br/>Contrôle du carve de voix"]
    script["scripts/carve.mjs<br/>détecte la paire, dynamique par défaut"]
    analysis["core/audioCarve.ts<br/>carveProfile · analyseCarveBands<br/>analyseCarveDuck · analyseCarveDynamics"]
    panel --> analysis
    script --> analysis
  end

  voice --> analysis
  bed --> analysis

  subgraph ATTRS["Écrits sur l'élément du lit musical"]
    carveAttr["data-fx-carve<br/>source · intensité · dynamique"]
    chainAttr["data-fx-chain<br/>peaking xN + gain, tagués fromCarve"]
    autoAttr["data-automation<br/>une voie par paramètre carvé"]
  end

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

  subgraph SHARED["Une seule implémentation, lue par les deux"]
    build["audioFxGraph.ts · buildFxChain"]
    sched["audioFxAutomation.ts · scheduleChainAutomation"]
  end

  chainAttr --> build
  autoAttr --> sched

  build --> preview["Aperçu<br/>AudioContext en direct<br/>attachElementFxChain"]
  sched --> preview
  build --> render["Rendu<br/>OfflineAudioContext dans le navigateur sans tête<br/>applyAudioFxChain"]
  sched --> render

  preview --> heard["ce que vous entendez en scrubbant"]
  render --> wav["WAV traité<br/>+ chainTailSeconds pour que le mix laisse passer la queue"]
  wav --> mix["moteur · audioMixer<br/>la piste de volume est intégrée dans le PCM ici, pas dans le graphe"]
  mix --> out["le mix rendu"]

  edit["édition de l'attribut pendant la lecture"] -.->|MutationObserver| preview

Les propres paramètres du carve ne sont jamais lus à la lecture — la chaîne et les voies qu'il a produites sont ce qui est joué. data-fx-carve existe pour que l'intensité puisse être modifiée sur un carve existant plutôt que d'être devinée à partir des filtres.

À l'intérieur d'un lit musical carvé, le signal passe d'abord par les creux, puis l'égalisation de niveau, puis tout ce que vous avez construit vous-même — c'est pourquoi un limiteur que vous ajoutez agit toujours comme le dernier plafond :

flowchart LR
  src["lit musical décodé"] --> p1["peaking<br/>400 Hz"]
  p1 --> p2["peaking<br/>1 kHz"]
  p2 --> p3["peaking<br/>1.6 kHz"]
  p3 --> g["gain<br/>égalisation de niveau"]
  g --> hand["vos propres effets<br/>ex. limiteur"]
  hand --> dest["gain de piste, puis sortie"]

  l1["voie fx.n1.gain"] -.->|"enveloppe du niveau<br/>de la voix dans cette bande"| p1
  l4["voie fx.n4.gain"] -.->|"à quel point le lit<br/>baisse globalement"| g

Un carve statique est le même graphe avec des valeurs fixes et aucune voie.

D'abord, déterminer ce qui ne va pas

Le tableau ci-dessous part de « ça sonne creux » — ce qui présuppose que quelqu'un a déjà écouté et l'a dit. Si on vous remet un fichier et vous dit « corrigez ça », vous n'avez pas cette phrase et vous ne pouvez pas écouter, donc vous devez mesurer. Une règle régit tout :

Le spectre absolu d'une seule voix inconnue ne peut être diagnostiqué. Les formants sont à ±10 dB, les fondamentaux vont de 85 à 255 Hz, et les phrases diminuent de 5 à 6 dB à mesure qu'elles se terminent. Chacune de ces variations ressemble à un défaut en soi, et chacune est due au locuteur.

Donc comparez, et comparez par rapport à quelque chose dans le même fichier : l'original propre s'il existe, sinon les pauses — tout ce qui est audible dans un silence est additif, et le spectre du silence est celui du canal plutôt que de la voix. Comparer à un spectre moyen publié ou à une voix de contrôle synthétisée ne fonctionne pas : deux locuteurs diffèrent plus que la plupart des défauts, et les deux mauvaises réponses dans l'évaluation derrière ces conseils proviennent exactement de cela.

Lorsqu'il n'y a pas d'original ni de silence utilisable, un défaut tonal statique est véritablement sous-déterminé. Dites-le et proposez les lectures qui correspondent, plutôt que d'en choisir une et de construire une chaîne dessus.

Commandes, pièges et recettes éprouvées : references/diagnosis.md. Lisez-le avant de diagnostiquer un fichier que personne n'a décrit.

Partir du symptôme

Une fois que vous connaissez la bande et le type, nommez ce qui ne va pas avec audio. La plupart des mauvais audios sont un ou deux de ceux-ci, et chacun a une réponse intégrée :

Ça ressemble àUtilisez
Bourdonnement ou bruit sourd en dessousrumble-cut, ou un highpass à 80 Hz
Creux, poitrinantTame Boominess travail (200 Hz)
Sourd, derrière du cartonReduce Mud travail (250 Hz)
Mots difficiles à distinguerAdd Clarity travail (3 kHz), ou carvez le lit
Âpre et fatigantSoften Harshness travail (3.2 kHz)
Certains mots beaucoup plus forts que d'autresEvenness sur un compresseur, ou Even Out Levels
Bruit de pièce entre les phrasesroom-gate
Voix et musique qui se battentCarve de voix — pas un EQ sur l'un ou l'autre
Sec, enregistré nulle partroom-tight ou room-natural
Juste « amateur »voice-clean, qui est quatre des ci-dessus dans l'ordre

Catalogue complet, contenu de chaque préréglage, vocabulaire des bandes, et ce qui n'est DÉLIBÉRÉMENT PAS couvert (dé-essing, suppression de bruit, correspondance de tonalité) : references/presets.md.

Soustrayez avant d'ajouter, nivelez après avoir filtré, relations après le niveau, caractère et plafond en dernier. Chaque étape change ce que la suivante entend — un compresseur réglé avant un passe-haut passe son temps à courir après le grondement.

Utilisez une famille en fonction du problème, pas du nom

Filtres (highpass, lowpass, peaking, lowshelf, highshelf) décident quelles fréquences une piste est autorisée à occuper. C'est le premier outil pour deux sources qui se heurtent, car les collisions se produisent dans des bandes : un lit musical et une voix veulent tous deux 1–3 kHz, et retirer cela du lit coûte bien moins au lit que de baisser le tout ne coûte au mix. Un passe-haut sur une voix est la solution standard pour le grondement ; un passe-bas assombrit ou étouffe délibérément.

Dynamiques (gain, compressor, limiter, gate) décident comment le niveau d'une piste se comporte dans le temps. La compression réduit l'écart entre le fort et le faible pour que les parties faibles puissent remonter. Un limiteur est un plafond — il ne façonne rien, il garantit que rien ne le dépasse. Un gate supprime ce qui est en dessous d'un seuil, ce qui est la façon de faire taire le bruit de pièce entre les phrases. gain est un simple étage de niveau, et c'est ce qu'une piste d'automation utilise lorsqu'une piste doit se déplacer.

Non linéaires (saturate, bitcrush) modifient la forme de l'onde, ce qui ajoute des harmoniques qui n'étaient pas là. Utilisez-les lorsqu'une piste a besoin de caractère ou de grain plutôt que de correction — et rappelez-vous que c'est génératif : cela rend une source fine plus dense, pas plus propre.

Temporels (delay, reverb, chorus, phaser) placent une piste dans un espace ou lui donnent de la largeur. Ce sont ceux qui gâchent le plus facilement un mix, car une queue ou une copie désaccordée occupe la même pièce qu'une voix qui en a besoin. Utilisez-les sur ce qui doit se trouver derrière autre chose, et gardez la quantité de wet plus faible que ce qui sonne bien isolément.

La chaîne est en série : chaque effet traite ce que le précédent a produit. Donc les filtres correctifs vont tôt, le caractère au milieu, et un limiteur en dernier là où il peut réellement agir comme un plafond.

Carve de voix

Le problème qu'il résout. Un lit musical sous une voix rend la voix difficile à suivre. Le réflexe est de baisser tout le lit, ce qui fonctionne mais coûte au lit toute sa présence — la musique devient molle pendant toute la voix off. Mais la voix n'a pas besoin de tout le spectre. Elle a besoin des quelques bandes qu'elle occupe réellement. Le carve ne prend que celles-ci, et le lit conserve ses basses fréquences et ses aigus, donc il reste musical tout en rendant la voix intelligible.

C'est une relation, pas un effet. Les paramètres vivent sur le lit — la piste qui est traitée — et ils nomment les voix à écouter, exactement comme un compresseur sidechain : vous sélectionnez la piste qui devient plus silencieuse et vous choisissez ce qui la rend plus silencieuse. Ne mettez jamais un carve sur une piste de voix. Une voix carvée contre elle-même est un bug, pas un choix de mix subtil.

Toutes les voix, pas une seule d'entre elles. sources est une liste, car un lit musical passe généralement sous une séquence entière — un narrateur, la réponse d'une interview, un second présentateur. Elles sont additionnées sur l'horloge propre du lit avant que quoi que ce soit ne soit mesuré (mixCarveSources), donc une analyse les couvre toutes : les bandes proviennent de toute la parole présente, et les enveloppes montent partout où elle se produit. Les voix qui ne jouent jamais pendant que le lit joue sont laissées de côté ; elles ne peuvent pas le masquer.

Un seul bouton. strength va de 0 à 1 et dérive tout : la profondeur de la coupe, le nombre de bandes, la largeur, à quel point favoriser l'intelligibilité par rapport à l'énergie vocale brute, à quel point le niveau peut chuter, à quel point viser en dessous de la voix. Ces six éléments bougent ensemble dans tout mix réel — un carve doux est une coupe peu profonde dans peu de bandes avec peu de ducking, un fort est plus profond dans plus de bandes avec plus — donc ils forment une seule relation écrite une fois, dans carveProfile. La valeur par défaut est 0.25 — une baisse de 6 dB dans trois bandes avec 6 dB de marge de niveau, audible sans sonner comme un trou. À 0.5, la baisse atteint 10 dB, ce qui est le point où un carve commence à être perçu comme un effet plutôt que comme un espace pour la voix ; au-dessus, c'est un territoire délibéré pour un lit musical fort sous une voix faible. 0 est spectral uniquement — une bande, pas d'égalisation de niveau du tout.

Carvez par défaut. Un lit musical jouant sous une narration mérite un carve ; ce n'est pas une étape de polissage à faire s'il y a du temps. Placez les deux pistes, exécutez la commande ci-dessous, écoutez. Sautez-le uniquement lorsqu'il n'y a pas de narration sous laquelle le lit musical doit se placer — une vidéo musicale, un carton titre, un montage coupé sur la piste.

Il suit toujours la voix. Il n'y a pas de mode statique : une profondeur fixe appauvrit le lit musical à chaque pause, et une fois que vous avez entendu les deux, il n'y a aucune raison d'hésiter.

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 associés