Communitygithub.com

AntlersSam/saas-launch-video-kit

Verwenden, wenn Audio in einer HyperFrames-Komposition bereits platziert ist und gemischt werden muss: Ein-/Ausblendungen, Überblendungen, Spurlautstärke, Lautstärkeautomatisierung, Ducking, eine Musikuntermalung, die mit einer Voiceover kämpft (Voiceover-Carve), Effekte auf einer Spur (EQ, Kompressor, Limiter, Gate, Sättigung, Delay, Hall, Chorus, Phaser, Bitcrush), Automatisierungshüllkurven auf der Lautstärke oder einem Effektparameter einer Spur oder ein Submix-Bus, der eine Kette, einen Fader und eine Automatisierungsuhr für mehrere Spuren gleichzeitig trägt (`<hf-audio-group>`). Nicht verwenden für das Sourcing oder die Erzeugung von Audio – das Finden von Hintergrundmusik, Soundeffekten oder das Erstellen eines Voiceovers ist Aufgabe von `/media-use`. Nicht verwenden für Clip-Timing oder Spurlayout, das Aufgabe von `/hyperframes-core` ist.

Was ist saas-launch-video-kit?

Diese Fähigkeit ist darauf spezialisiert, vorhandenes Audio in einer HyperFrames-Komposition professionell zu mischen, wobei der Fokus auf Beziehungen zwischen den Tönen liegt und nicht nur auf einer Aneinanderreihung von Effekten. Sie unterstützt alle gängigen Mischaufgaben: Ein- und Ausblendungen auf Spuren, Überblendungen zwischen Clips, Spurlautstärke- und Lautstärkeautomatisierung, Ducking und Voiceover-Carving (um eine Musikuntermalung automatisch um eine Sprachaufnahme herum zu reduzieren). Darüber hinaus können Sie eine vollständige Effektkette auf jeder Spur anwenden, einschließlich Entzerrung, Kompression, Begrenzung, Gate, Sättigung, Delay, Hall, Chorus, Phaser und Bitcrush. Ein besonderes Highlight ist die Unterstützung von `<hf-audio-group>`-Submix-Bussen, die es ermöglichen, eine Effektkette und Automatisierung gleichzeitig auf mehrere Spuren anzuwenden. Die Arbeit mit dieser Fähigkeit ist konsistent: Was Sie während der Vorschau hören, wird genau so gerendert, da eine einzige Implementierung für beide Kontexte verwendet wird. Sie eignet sich nicht für die Audioquellensuche oder -generierung und nicht für das Timing oder Layout von Clips. Für diese Aufgaben sind die separaten Fähigkeiten `/media-use` und `/hyperframes-core` zuständig.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AntlersSam/saas-launch-video-kit/tree/HEAD/skills/hyperframes-audio

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Plugin-Installation: Bevor Sie Setup- oder Frische-Befehle ausführen, befolgen Sie die Plugin-Ausführungsregeln, wenn sich diese Fähigkeit innerhalb eines HyperFrames-Plugins befindet. Bei eigenständigen Installationen bleiben die untenstehenden Update-Anweisungen erhalten.

HyperFrames Audio

Ein Mix ist eine Menge von Beziehungen, kein Stapel von Prozessoren. Zwei Spuren, die alleine jeweils richtig klingen, können zusammen ungenießbar sein, und die Lösung ist fast nie "eine herunterdrehen" – es geht darum, herauszufinden, worüber sie streiten, und es dem zu geben, der es braucht. Jedes Werkzeug hier existiert, um eine dieser Beziehungen auszudrücken.

Effekte leben auf dem Element als data-fx-chain, und Vorschau und Rendern verwenden denselben Web Audio Graphen – das Studio in einem Live-Kontext, die Engine in einem Offline-Kontext innerhalb des Browsers, den sie bereits steuert. Es gibt eine Implementierung jedes Effekts, sodass das, was Sie beim Scrubbing hören, auch das ist, was geschrieben wird. Sie stimmen nie zweimal ab.

Das Clip-Timing bleibt bei /hyperframes-core: Audio-/Video-Trimmungen und Quellbereich verwenden data-start, data-duration und data-media-start, und Überblendungen überlappen Clips auf verschiedenen Spuren. Diese Fähigkeit verwaltet platziertes Spur-Ein-/Ausblenden, Überblendungshüllkurven, Spurverstärkung/Spurlautstärke, Lautstärke- und Effektautomation, Ducking/Voiceover-Einschnitt und die Effektkette. /media-use verwaltet Quellen, Generierung und Vorverarbeitung.

Die Konstante data-playback-rate (0.1..10) ist render-sicher für Bild und tonhöhenerhaltenen Ton, wenn übereinstimmende Audio-/Video-Elemente dieselbe Timing-, Quell-Offset- und Rate verwenden. Ein Geschwindigkeitsrampe ist eine rate-Spur in data-automation (siehe docs/reference/speed-ramps); sie überschreibt die Konstante und behält die Tonhöhe in Vorschau und Rendern bei. HyperFrames bietet keine automatische Wellenform-Synchronisation oder Drift-Korrektur. Für kopierbare Schnitt-/Überblendungs-/Neuzeit-Rezepte verwenden Sie /hyperframes-core → references/creator-editing-recipes.md.

Drei Attribute tragen alles auf dem Audio-/Video-Element selbst – oder, für die ersten beiden, auf einem <hf-audio-group>-Bus (siehe "Ein Bus für viele Spuren"):

AttributEnthält
data-fx-chaindie Effekte, in Signalreihenfolge
data-automationHüllkurven für die Lautstärke dieser Spur oder deren Effektparameter
data-fx-carvedie eigenen Einstellungen des Einschnitts, sodass er neu abgeleitet werden kann

Die ausgelieferten Effektfamilien sind: Verstärkung, EQ (Hochpass, Tiefpass, Spitzenfilter, Shelf-Filter), Kompressor, Begrenzer, Gate, Sättigung, Delay, Hall, Chorus, Phaser und Bitcrush.

Genaues JSON für jeden und die Regeln, die eine Spur erfüllen muss: references/attributes.md. Jeder Effekt mit seinen Parametern, Bereichen und Einheiten: references/fx-registry.md. Wie man herausfindet, was mit einer Datei nicht stimmt, die man nicht hören kann: references/diagnosis.md. Presets, benannte Jobs und Ein-Knopf-Profile, sowie eine Symptom-zu-Fix-Tabelle: references/presets.md – lesen Sie dies, bevor Sie eine Kette von Hand bauen, denn eines der Presets oder benannten Jobs benennt normalerweise bereits das Problem.

Wie es zusammenpasst

Zwei Autoren-Oberflächen schreiben diese Attribute; zwei Laufzeitumgebungen lesen sie durch dieselben Builder. Diese gemeinsame Mitte ist der Grund, warum die Vorschau das Rendern vorhersagt.

flowchart TB
  voice["Sprachspur<br/>Mediendatei"]
  bed["Musikbett<br/>Mediendatei"]

  subgraph AUTHOR["Autoring – das Einzige, was Attribute schreibt"]
    panel["Studio<br/>Voiceover-Einschnitt-Steuerung"]
    script["scripts/carve.mjs<br/>erkennt das Paar, standardmäßig dynamisch"]
    analysis["core/audioCarve.ts<br/>carveProfile · analyseCarveBands<br/>analyseCarveDuck · analyseCarveDynamics"]
    panel --> analysis
    script --> analysis
  end

  voice --> analysis
  bed --> analysis

  subgraph ATTRS["Auf das Bettelement geschrieben"]
    carveAttr["data-fx-carve<br/>source · strength · dynamic"]
    chainAttr["data-fx-chain<br/>peaking xN + gain, getaggt fromCarve"]
    autoAttr["data-automation<br/>eine Spur pro eingeschnittenen Parameter"]
  end

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

  subgraph SHARED["Eine Implementierung, von beiden gelesen"]
    build["audioFxGraph.ts · buildFxChain"]
    sched["audioFxAutomation.ts · scheduleChainAutomation"]
  end

  chainAttr --> build
  autoAttr --> sched

  build --> preview["Vorschau<br/>Live AudioContext<br/>attachElementFxChain"]
  sched --> preview
  build --> render["Rendern<br/>OfflineAudioContext im kopflosen Browser<br/>applyAudioFxChain"]
  sched --> render

  preview --> heard["was Sie beim Scrubbing hören"]
  render --> wav["verarbeitete WAV<br/>+ chainTailSeconds, damit der Mix den Nachhall durchlässt"]
  wav --> mix["Engine · audioMixer<br/>Lautstärke-Spur hier im PCM eingebacken, nicht im Graphen"]
  mix --> out["der gerenderte Mix"]

  edit["Bearbeiten des Attributs während der Wiedergabe"] -.->|MutationObserver| preview

Die eigenen Einstellungen des Einschnitts werden nie bei der Wiedergabe gelesen – die Kette und Spuren, die er erzeugt hat, sind das, was abgespielt wird. data-fx-carve existiert, damit die Stärke an einem bestehenden Einschnitt geändert werden kann, anstatt sie aus den Filtern zurückraten zu müssen.

In einem eingeschnittenen Bett durchläuft das Signal zuerst die Absenkungen, dann den Level-Ausgleich, dann alles, was Sie selbst gebaut haben – weshalb ein von Ihnen hinzugefügter Begrenzer immer noch als letzte Decke fungiert:

flowchart LR
  src["dekodiertes Bett"] --> p1["peaking<br/>400 Hz"]
  p1 --> p2["peaking<br/>1 kHz"]
  p2 --> p3["peaking<br/>1.6 kHz"]
  p3 --> g["gain<br/>Level-Ausgleich"]
  g --> hand["Ihre eigenen Effekte<br/>z.B. Begrenzer"]
  hand --> dest["Spurverstärkung, dann Ausgang"]

  l1["Spur fx.n1.gain"] -.->|"Hüllkurve des Sprachpegels<br/>in diesem Band"| p1
  l4["Spur fx.n4.gain"] -.->|"wie weit das Bett<br/>insgesamt duckt"| g

Ein statischer Einschnitt ist derselbe Graph mit festen Werten und überhaupt keinen Spuren.

Zuerst herausfinden, was falsch ist

Die Tabelle unten beginnt mit „es klingt dröhnig“ – was voraussetzt, dass bereits jemand zugehört und das gesagt hat. Wenn Sie eine Datei erhalten mit der Anweisung „beheben Sie dies“, haben Sie keinen solchen Satz und können nicht zuhören, also müssen Sie messen. Eine Regel gilt für alles:

Das absolute Spektrum einer einzelnen unbekannten Stimme kann nicht diagnostiziert werden. Formanten sind ±10 dB, Grundfrequenzen liegen bei 85–255 Hz, und Sätze fallen um 5–6 dB ab, wenn sie enden. Jedes davon liest sich als Defekt für sich, und jedes davon ist der Sprecher.

Also vergleichen, und vergleichen mit etwas innerhalb derselben Datei: dem sauberen Original, falls vorhanden, sonst den Pausen – was immer in einer Lücke hörbar ist, ist additiv, und das Spektrum der Lücke ist der Kanal und nicht die Stimme. Der Vergleich mit einem veröffentlichten Durchschnittsspektrum oder einer synthetisierten Kontrollstimme funktioniert nicht: Zwei Sprecher unterscheiden sich mehr als die meisten Defekte, und beide falschen Antworten in der Bewertung, die dieser Anleitung zugrunde liegt, kamen genau daher.

Wenn es kein Original und keine nutzbare Stille gibt, ist ein statischer tonaler Defekt wirklich unterbestimmt. Sagen Sie das und bieten Sie die passenden Messwerte an, anstatt einen auszuwählen und darauf eine Kette zu bauen.

Befehle, Fallstricke und ausgearbeitete Rezepte: references/diagnosis.md. Lesen Sie es, bevor Sie eine Datei diagnostizieren, die niemand beschrieben hat.

Vom Symptom ausgehen

Sobald Sie das Band und die Art kennen, benennen Sie, was mit dem Audio falsch ist. Die meisten schlechten Audios sind ein oder zwei davon, und jedes hat eine mitgelieferte Antwort:

Es klingt wieGreifen Sie zu
Brummen oder dumpfes Dröhnen darunterrumble-cut, oder ein highpass bei 80 Hz
Dröhnig, brustbetontZähme Dröhnigkeit-Job (200 Hz)
Gedämpft, hinter PappeReduziere Matsch-Job (250 Hz)
Wörter schwer zu verstehenFüge Klarheit hinzu-Job (3 kHz), oder schneiden Sie das Bett ein
Scharf und anstrengendWeiche Schärfe-Job (3.2 kHz)
Manche Wörter viel lauter als andereGleichmäßigkeit auf einem Kompressor oder Gleiche Pegel aus
Raumklang zwischen Sätzenroom-gate
Stimme und Musik kämpfenVoiceover-Einschnitt – kein EQ auf einem von beiden
Trocken, nirgendwo aufgenommenroom-tight oder room-natural
Einfach „Amateur“voice-clean, was vier der obigen in Reihenfolge ist

Vollständiger Katalog, was jedes Preset enthält, das Bandvokabular und was bewusst NICHT abgedeckt ist (De-Essing, Rauschentfernung, Tonanpassung): references/presets.md.

Subtrahieren Sie, bevor Sie hinzufügen, pegeln Sie nach dem Filtern aus, Beziehungen nach dem Pegel, Charakter und Decke zuletzt. Jeder Schritt ändert, was der nächste hört – ein Kompressor, der vor einem Hochpass eingestellt wurde, verbringt seine Zeit damit, Dröhnen zu jagen.

Greifen Sie nach einer Familie basierend auf dem Problem, nicht dem Namen

Filter (highpass, lowpass, peaking, lowshelf, highshelf) entscheiden, welche Frequenzen eine Spur belegen darf. Dies ist das erste Werkzeug für das Zusammenstoßen zweier Quellen, weil Kollisionen in Bändern stattfinden: Ein Bett und eine Stimme wollen beide 1–3 kHz, und diese dem Bett zu nehmen, kostet das Bett weit weniger, als das Ganze herunterzudrehen dem Mix kostet. Ein Hochpass auf einer Stimme ist die Standardlösung für Dröhnen; ein Tiefpass verdunkelt oder dämpft absichtlich.

Dynamik (gain, compressor, limiter, gate) entscheiden, wie sich der Pegel einer Spur im Laufe der Zeit verhält. Kompression verringert den Abstand zwischen laut und leise, sodass die leisen Teile angehoben werden können. Ein Begrenzer ist eine Decke – er formt nichts, er garantiert, dass nichts darüber hinauskommt. Ein Gate entfernt, was unter einem Schwellwert liegt, und so schalten Sie Raumklang zwischen Phrasen stumm. gain ist eine einfache Pegelstufe, und sie ist das, was eine Automationsspur reitet, wenn eine Spur aus dem Weg gehen muss.

Nichtlinear (saturate, bitcrush) ändert die Wellenform, was Obertöne hinzufügt, die vorher nicht da waren. Greifen Sie danach, wenn eine Spur Charakter oder Biss statt Korrektur braucht – und denken Sie daran, es ist generativ: Es macht eine dünne Quelle dichter, nicht sauberer.

Zeit (delay, reverb, chorus, phaser) setzt eine Spur in einen Raum oder gibt ihr Breite. Dies sind diejenigen, die am leichtesten einen Mix ruinieren, weil ein Nachhall oder eine verstimmte Kopie denselben Raum belegt, den eine Stimme braucht. Verwenden Sie sie auf dem, was hinter etwas anderem sitzen soll, und halten Sie den Nassanteil niedriger, als es in Isolation richtig klingt.

Die Kette ist seriell: Jeder Effekt verarbeitet, was der vorherige produziert hat. Also geht korrigierendes Filtern früh, Charakter in der Mitte und ein Begrenzer zuletzt, wo er tatsächlich als Decke wirken kann.

Voiceover-Einschnitt

Das Problem, das es löst. Ein Musikbett unter einer Stimme macht die Stimme schwer verfolgbar. Der Reflex ist, das ganze Bett zu ducken, was funktioniert und dem Bett seine gesamte Präsenz kostet – die Musik wird für den gesamten Voiceover schlaff. Aber die Stimme braucht nicht das gesamte Spektrum. Sie braucht die wenigen Bänder, die sie tatsächlich belegt. Der Einschnitt nimmt nur diese, und das Bett behält seinen Tiefen- und Höhenbereich, sodass es immer noch Musik ist, während die Stimme immer noch verständlich ist.

Es ist eine Beziehung, kein Effekt. Die Einstellungen leben auf dem Bett – der Spur, die verarbeitet wird – und sie benennen die Stimmen, auf die gehört wird, genau wie ein Sidechain-Kompressor: Sie wählen die Spur aus, die leiser wird, und legen fest, was sie leiser macht. Setzen Sie nie einen Einschnitt auf eine Sprachspur. Eine Stimme, die gegen sich selbst eingeschnitten wird, ist ein Fehler, keine subtile Mix-Entscheidung.

Jede Stimme, nicht eine davon. sources ist eine Liste, weil ein Bett normalerweise unter einer ganzen Sequenz läuft – einem Erzähler, einer Interviewantwort, einem zweiten Moderator. Sie werden auf der eigenen Uhr des Betts aufsummiert, bevor irgendetwas gemessen wird (mixCarveSources), sodass eine Analyse alle abdeckt: Die Bänder kommen von all der Sprache, die es gibt, und die Hüllkurven steigen, wo immer etwas davon passiert. Stimmen, die nie spielen, während das Bett läuft, werden weggelassen; sie können es nicht maskieren.

Ein Einschnitt gegen mehr als eine Clip-ID ist falsch. Gruppieren Sie die Clips und schneiden Sie gegen die Gruppe ein. Dies ist eine Invariante, kein Tipp. Das Benennen von Clips einzeln muss erschöpfend richtig sein und bleibt nur bis zum nächsten Schnitt richtig – ein vierter Erzählclip, der später hinzugefügt wird, spielt außerhalb des Bewusstseins des Einschnitts, und das Bett duckt nicht leise darunter. Das Benennen der Gruppe stattdessen löst die Mitgliedschaft zum Analysezeitpunkt auf, sodass ein später zur Gruppe hinzugefügter Clip abgedeckt ist, ohne sources überhaupt zu berühren:

<!-- Erzählung gruppieren, dann das Bett gegen die Gruppe einschneiden -->
<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>

Eine sources-Liste, die zwei oder mehr einfache Clip-IDs anstelle einer Gruppe benennt, wird von der audio_carve_ungrouped_sources-Lint-Regel abgefangen – sie funktioniert trotzdem, aber es ist die Version, die still verdirbt, wenn ein Clip hinzugefügt wird.

Halten Sie die Einschnitt-Gruppe eine Sprachgruppe: kein Bett, kein SFX, keine Musik. Eine Gruppen-ID in sources löst sich zu jedem aktuellen Mitglied bei jeder Analyse auf, sodass die Gruppe, die Sie benennen, die Gruppe ist, die Sie später bekommen – nicht die Spuren, die gemessen wurden, als sie geschrieben wurde. Zwei Arten, wie das beißt:

  • Das Bett in seiner eigenen Quellgruppe. Es wird sich selbst als Stimme übergeben und gegen seinen eigenen Inhalt eingeschnitten – die „Schneiden Sie eine Spur nie gegen sich selbst“-Regel, die eine erneute Analyse später eintrifft.
  • Ein SFX- oder Musikclip in der Sprachgruppe. Es tritt bei der nächsten Analyse in die Sidechain ein und das Bett beginnt unter einem „Whoosh“ zu ducken, obwohl der Lauf, der das Attribut schrieb, es nie gemessen hat.

Beide sind im Moment unsichtbar, wenn der Einschnitt geschrieben wird: Die Analyse summiert die erkannten Stimmen und durchläuft nie die Gruppenauflösung, sodass der erste Durchgang echt richtig ist und nur der nächste falsch ist. Geben Sie also jeder Rolle ihre eigene Gruppe – music für das Bett, voiceover für die Erzählung, sfx für die Treffer – und halten Sie die in sources benannte Gruppe nur aus Stimmen bestehend.

carve.mjs weigert sich, die Gruppenform zu schreiben, wenn es einen der beiden Fälle sieht, zeichnet Clip-IDs auf und sagt

…

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.

Verwandte Skills