Communitygithub.com

HyperFrames Audio — Montage Audio

Utilisez cette compétence lorsque l'audio est déjà placé dans une composition HyperFrames et nécessite un mixage : fondu d'ouverture/fermeture, fondu enchaîné, gain de piste ou volume, automatisation du volume, ducking, fond musical qui combat une voix (voix-over), effets sur une piste (égaliseur, compresseur, limiteur, porte, saturation, délai, réverbération, chorus, phaser, bitcrush), enveloppes d'automatisation dessinées sur le volume d'une piste ou tout paramètre d'effet, ou un bus de sous-mixage transportant une chaîne, un fader et une horloge d'automatisation pour plusieurs pistes à la fois (`<hf-audio-group>`). Ne pas utiliser pour sourcer ou générer de l'audio — trouver de la musique de fond, des bruitages 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 HyperFrames Audio — Montage Audio ?

HyperFrames Audio est une compétence spécialisée pour le mixage audio au sein de l'environnement HyperFrames. Elle permet d'appliquer des fondus d'ouverture/fermeture, des enchaînements (crossfade), du gain ou volume de piste, de l'automatisation, du ducking (voix-over), ainsi qu'une chaîne complète d'effets (EQ, compresseur, limiteur, gate, saturation, délai, réverbération, chorus, phaser, bitcrush) via l'attribut `data-fx-chain`. L'automatisation (enveloppes) s'effectue avec `data-automation`. Le ducking est géré par l'attribut `data-fx-carve`, qui crée des creux dans la piste audio pour laisser passer la voix. Cette compétence fonctionne avec les outils d'édition de clips (`/hyperframes-core`) et de sourcing média (`/media-use`). Elle offre un aperçu en temps réel (Preview) et un rendu final (Render) via le même graphe audio Web Audio, garantissant la cohérence du son. Elle prend en charge les groupes de pistes (`<hf-audio-group>`), les bus de sous-mixage et les recettes prêtes à l'emploi (presets) pour résoudre des problèmes courants comme les bruits sourds, les sons nasillards ou la voix qui se perd dans la musique.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AntlersSam/saas-launch-video-kit/tree/HEAD/skills/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

Installation du plugin : Avant les commandes de configuration ou de fraîcheur, suivez les règles d'exécution du plugin lorsque cette compétence se trouve dans un plugin HyperFrames. Les installations autonomes conservent les instructions de mise à jour ci-dessous.

HyperFrames Audio

Un mixage est un ensemble de relations, pas une pile de processeurs. Deux pistes qui sonnent correctement seules peuvent être inécoutables ensemble, et la solution n'est presque jamais "baisser l'une" — il s'agit de trouver sur quoi elles se battent et de 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 exécutent le même graphe audio Web Audio — le studio dans un contexte en direct, le moteur dans un contexte hors ligne dans le navigateur qu'il pilote déjà. Il n'y a qu'une implémentation de chaque effet, donc ce que vous entendez en défilant est ce qui est écrit. Vous ne réglez jamais deux fois.

Le timing des clips reste du ressort de /hyperframes-core : les coupures audio/vidéo et les plages source utilisent data-start, data-duration et data-media-start, et les fondus enchaînés chevauchent les clips sur différentes pistes. Cette compétence gère le fondu d'ouverture/fermeture des pistes placées, les enveloppes de fondu enchaîné, le gain/volume de piste, l'automatisation du volume et des effets, le ducking/voix-over, 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..10) est sûre pour le rendu de l'image et du son à hauteur préservée lorsque les éléments audio/vidéo correspondants utilisent le même timing, le même décalage source et la même vitesse. Une rampe de vitesse est une piste rate dans data-automation (voir docs/reference/speed-ramps) ; elle l'emporte sur la constante et préserve la hauteur sonore dans l'aperçu et le rendu. HyperFrames ne fournit pas de synchronisation de forme d'onde automatique ou de correction de dérive. Pour des recettes de coupure/fondu enchaîné/re-timing copiables, utilisez /hyperframes-core → references/creator-editing-recipes.md.

Trois attributs contiennent tout, sur l'élément audio/vidéo lui-même — ou, pour les deux premiers, sur un bus <hf-audio-group> (voir "Un bus pour plusieurs pistes") :

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

Les familles d'effets livrées sont le gain, l'EQ (passe-haut, passe-bas, peak, shelfs), le compresseur, le limiteur, la porte, la saturation, le délai, la réverbération, le chorus, le phaser et le bitcrush.

Le JSON exact pour chacun, et les règles qu'une piste 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, tâches nommées et profils à un bouton, ainsi qu'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 des tâches nommées nomme généralement déjà le problème.

Comment tout s'assemble

Deux surfaces d'édition écrivent ces attributs ; deux exécutants les lisent via les mêmes constructeurs. Ce milieu partagé est la raison pour laquelle l'aperçu prédit le rendu.

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

  subgraph AUTEUR["Édition — les seules choses qui écrivent les attributs"]
    panel["Studio<br/>Contrôle du carve voix-over"]
    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 ATTR["Écrits sur l'élément du fond"]
    carveAttr["data-fx-carve<br/>source · force · dynamique"]
    chainAttr["data-fx-chain<br/>peaking xN + gain, tagué fromCarve"]
    autoAttr["data-automation<br/>une piste par paramètre sculpté"]
  end

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

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

  chainAttr --> build
  autoAttr --> sched

  build --> apercu["Aperçu<br/>AudioContext en direct<br/>attachElementFxChain"]
  sched --> apercu
  build --> rendu["Rendu<br/>OfflineAudioContext dans le navigateur headless<br/>applyAudioFxChain"]
  sched --> rendu

  apercu --> entendu["ce que vous entendez en défilant"]
  rendu --> wav["WAV traité<br/>+ chainTailSeconds pour que le mix laisse passer le tail"]
  wav --> mix["moteur · audioMixer<br/>la piste de volume est cuite dans le PCM ici, pas dans le graphe"]
  mix --> out["le mix rendu"]

  edit["éditer l'attribut en pleine lecture"] -.->|MutationObserver| apercu

Les réglages propres du carve ne sont jamais lus lors de la lecture — la chaîne et les pistes qu'il a produites sont ce qui joue. data-fx-carve existe pour que la force puisse être modifiée sur un carve existant au lieu d'être devinée à partir des filtres.

À l'intérieur d'un fond sculpté, le signal traverse d'abord les creux, puis l'adaptation de niveau, puis tout ce que vous avez construit vous-même — c'est pourquoi un limiteur que vous ajoutez agit toujours comme le plafond final :

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

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

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

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

Le tableau ci-dessous part de "ça sonne sourd" — ce qui suppose que quelqu'un a déjà écouté et l'a dit. On vous donne un fichier et "réparez ça", vous n'avez pas cette phrase et vous ne pouvez pas écouter, donc vous devez mesurer. Une règle gouverne tout cela :

Le spectre absolu d'une seule voix inconnue ne peut pas être diagnostiqué. Les formants sont de ±10 dB, les fondamentaux vont de 85 à 255 Hz, et les phrases chutent de 5 à 6 dB en se terminant. Chacun de ces éléments ressemble à un défaut en soi, et chacun est le locuteur.

Comparez donc, et comparez à 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, pas 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 qui a guidé cette directive provenaient exactement de cela.

Lorsqu'il n'y a ni original ni 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 pratiques : references/diagnosis.md. Lisez-le avant de diagnostiquer un fichier que personne n'a décrit.

Partez du symptôme

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

Ça ressemble àUtilisez
Bourdonnement ou bruit sourd en dessousrumble-cut, ou un highpass à 80 Hz
Sourd, caverneuxTame Boominess job (200 Hz)
Étouffé, comme derrière du cartonReduce Mud job (250 Hz)
Mots difficiles à comprendreAdd Clarity job (3 kHz), ou sculptez le fond
Dur et fatiguantSoften Harshness job (3.2 kHz)
Certains mots beaucoup plus forts que d'autresEvenness sur un compresseur, ou Even Out Levels
Son de pièce entre les phrasesroom-gate
La voix et la musique se battentVoix-over carve — 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 est délibérément PAS couvert (dé-ess, suppression de bruit, correspondance de tonalité) : references/presets.md.

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

Choisissez une famille par le problème, pas par le nom

Filtres (highpass, lowpass, peaking, lowshelf, highshelf) décident quelles fréquences une piste peut occuper. C'est le premier outil pour deux sources qui entrent en collision, car les collisions se produisent par bandes : un fond et une voix veulent tous deux 1–3 kHz, et retirer cela du fond coûte bien moins au fond 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 la distance 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 dépasse. Une porte supprime ce qui est en dessous d'un seuil, ce qui est la façon de faire taire le son de pièce entre les phrases. gain est un étage de niveau simple, et c'est ce qu'une piste d'automatisation pilote lorsqu'une piste doit se déplacer.

Non linéaires (saturate, bitcrush) modifient la forme d'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 qu'elles sont génératives : elles rendent 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 détruisent le plus facilement un mix, car une queue ou une copie désaccordée occupe le même espace dont une voix a besoin. Utilisez-les sur la chose qui doit se trouver derrière quelque chose d'autre, et gardez la quantité humide plus basse qu'elle ne sonne correctement en isolation.

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

Voix-over carve

Le problème qu'il résout. Un fond musical sous une voix rend la voix difficile à suivre. Le réflexe est de baisser tout le fond, ce qui fonctionne mais coûte au fond toute sa présence — la musique devient molle pour toute la durée de la voix-over. 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 fond garde ses graves et ses aigus, donc il reste de la musique pendant que la voix est toujours intelligible.

C'est une relation, pas un effet. Les réglages vivent sur le fond — 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 choisissez ce qui la rend plus silencieuse. Ne mettez jamais un carve sur une piste vocale. Une voix sculptée contre elle-même est un bug, pas un choix de mix subtil.

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

Un carve contre plus d'un identifiant de clip est faux. Groupez les clips et sculptez contre le groupe. C'est un invariant, pas un conseil. Nommer les clips un par un doit être exhaustivement correct et ne reste correct que jusqu'à la prochaine édition — un quatrième clip de narration ajouté plus tard joue en dehors de la conscience du carve, et le fond ne s'abaisse pas silencieusement. Nommer le groupe à la place résout l'appartenance au moment de l'analyse, donc un clip ajouté au groupe plus tard est couvert sans toucher à sources du tout :

<!-- grouper la narration, puis sculpter le fond contre le groupe -->
<audio id="vo-intro" data-audio-group="voiceover" …></audio>
<audio id="vo-middle" data-audio-group="voiceover" …></audio>
<audio id="vo-outro" data-audio-group="voiceover" …></audio>

<audio id="music" data-fx-carve='{"enabled":true,"sources":["voiceover"],"strength":0.8}' …></audio>

Une liste sources nommant deux identifiants de clip simples ou plus au lieu d'un groupe est attrapée par la règle de lint audio_carve_ungrouped_sources — cela fonctionne toujours, mais c'est la version qui pourrit silencieusement lorsqu'un clip est ajouté.

Gardez le groupe de carve comme un groupe vocal : pas de fond, pas de bruitage, pas de musique. Un identifiant de groupe dans sources se résout en chaque membre actuel à chaque analyse, donc le groupe que vous nommez est le groupe que vous obtenez plus tard — pas les pistes qui ont été mesurées lorsqu'il a été écrit. Deux façons dont cela mord :

  • Le fond dans son propre groupe source. Il est donné à lui-même comme une voix et sculpté contre son propre contenu — la règle "ne jamais sculpter une piste contre elle-même" arrive une réanalyse plus tard.
  • Un clip de bruitage ou de musique dans le groupe vocal. Il entre dans la sidechain à l'analyse suivante et le fond commence à s'abaisser sous un whoosh, même si l'exécution qui a écrit l'attribut ne l'a jamais mesuré.

Les deux sont invisibles au moment où le carve est écrit : l'analyse additionne les voix qu'elle a détectées et ne passe jamais par la résolution de groupe, donc le premier passage est réellement correct et seul le suivant est erroné. Donnez donc à chaque rôle son propre groupe — music pour le fond, voiceover pour la narration, sfx pour les effets — et gardez le groupe nommé dans sources ne contenant que des voix.

carve.mjs refuse d'écrire la forme de groupe lorsqu'il voit l'un ou l'autre cas, enregistre les identifiants de clip et dit

…

[tronqué pour la traduction]

Individual skills in this repo

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

AntlersSam/saas-launch-video-kit

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.

AntlersSam/saas-launch-video-kit

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.

AntlersSam/saas-launch-video-kit

Use the HyperFrames CLI development loop: init, add, catalog, capture, lint, check, snapshot, compare, grade-compare, preview, play, present, beats, keyframes, single or batch render, publish, cloud, cloudrun, feedback, lambda, doctor, browser, info, upgrade, skills, compositions, timeline, history, clean, docs, benchmark, telemetry, transcribe, auth, tts, and remove-background. Also use when diagnosing build or render failures. validate, inspect, and layout are deprecated aliases; use check. Covers local, HeyGen-hosted cloud, AWS Lambda, and Google Cloud Run rendering.

AntlersSam/saas-launch-video-kit

The HyperFrames composition contract — build one renderable project. Use for composition structure, the `data-*` timing attributes, `class="clip"`, tracks, sub-compositions, variables, framework-owned media playback, deterministic-render rules, and validation. Read before writing composition HTML.

Skills associés