Communitygithub.com

EditAtlas/sound-design

Vertone ein fertiges Video mit echten Soundeffekten aus der EditAtlas-Bibliothek (2.278 beschriebene Sounds, öffentlich, von GitHub herunterladbar mit SHA-256-Prüfung). Findet die Momente im Bild, zeigt sie als Einzelbildtafeln, wählt Sounds nach Beschreibung und gemessenen Zahlen aus, platziert sie auf dem genauen Frame mit einer durch die Rolle bestimmten Lautstärke, behält oder ersetzt die eigene Musik und Stimme des Films, rendert ein neues MP4 plus eine separate SFX-WAV und prüft das Ergebnis anhand von Zahlen (Sync, Tempo, Lücken, Lautstärke).

Was ist sound-design?

EditAtlas/sound-design ist ein Skill für KI-Agenten (z. B. Claude Code, Cursor), der es ermöglicht, ein fertiges Video mit echten, bereits aufgenommenen Soundeffekten aus der öffentlichen EditAtlas-Bibliothek zu vertonen, ohne dass der Agent selbst hören kann. Der Skill analysiert das Video auf Szenenwechsel, Bewegungen und Landepunkte, zeigt die relevanten Frames als Bildtafeln an, durchsucht die Soundbibliothek nach passenden Klängen (anhand von Beschreibung und gemessenen Eigenschaften wie Angriffszeit oder Frequenzspektrum) und platziert sie millimetergenau auf dem richtigen Frame. Die Lautstärke wird automatisch an die Rolle des Sounds angepasst (z. B. Foley, Whoosh, Hit) – die Berücksichtigung von Filmton (Musik, Sprache) erfolgt über die Entscheidung, ob der Originalton erhalten bleibt. Das Ergebnis wird als MP4 und separate SFX-WAV ausgegeben und anschließend mit einem Prüfskript auf Synchronität, Tempo, Lücken, Lautstärke und Mono-Kompatibilität getestet. Der Agent kann die Ergebnisse nicht hören, sondern muss sich auf die Messwerte und visuelle Darstellungen (Wellenform, Spektrogramm) verlassen – das fördert eine bewusste, messbare Arbeitsweise und verhindert subjektive Klangurteile.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/EditAtlas/skills/tree/HEAD/skills/sound-design

In Ihrer bevorzugten KI fragen

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

Dokumentation

Sound Design: echte Klänge auf einem fertigen Video

Das Ziel: Der Film klingt, als hätte ein Cutter mit einer guten Bibliothek ihn geschnitten. Jeder Sound ist eine echte Datei aus EditAtlas, auf einem Frame platziert, den du angesehen hast, mit einer Lautstärke, die du in Zahlen begründen kannst.

Zwei Dinge gelten während des gesamten Prozesses, also plane entsprechend:

  • Du kannst nicht hören. Du wählst Sounds anhand ihrer Beschreibungen und gemessenen Zahlen aus (sounds.py info), prüfst Platzierung und Lautstärke mit check.py und übergibst der Person eine kurze Liste von Momenten zum Anhören. Sage niemals, ein Sound „klingt gut"; sage, was gemessen wurde und was noch Ohren braucht.
  • Du darfst nicht erfinden. Arbeite nur mit dem Video, das dir die Person gegeben hat. Wenn es kein Video gibt, frage danach. Wenn ein Moment einen Sound benötigt, den die Bibliothek nicht hat, lasse ihn still und erwähne das im Bericht.

Alle Skripte befinden sich in scripts/ (Python 3.9+, numpy, Pillow für die Einzelbildtafeln, FFmpeg mit ffprobe im PATH). Führe sie mit dem Pfad des Skill-Ordners aus, von einem eigenen Arbeitsverzeichnis aus (work/, result/); schreibe niemals in das Projekt der Person oder in diesen Skill-Ordner.

python SKILL/scripts/moments.py FILM.mp4 --out work/moments             # moments.json, sheet.png, overview.png
python SKILL/scripts/moments.py FILM.mp4 --at 10.4 --out work/at        # Frames alle 0,1 s um eine Zeit
python SKILL/scripts/sounds.py search "Glas klirrt" --max-dur 2         # IDs aus dem öffentlichen Index
python SKILL/scripts/sounds.py info sfx-ID sfx-ID                       # einmal herunterladen, SHA-256, gemessene Zahlen
python SKILL/scripts/sounds.py sheet sfx-ID sfx-ID --out work/c.png     # Wellenform + Spektrogramm der Kandidaten
python SKILL/scripts/mix.py work/cues.json --out result/FILM_sfx.mp4    # MP4 + _track.wav + _resolved.json
python SKILL/scripts/check.py result/FILM_sfx_resolved.json --moments work/moments/moments.json --listen-out result/listen.wav

Sounds stammen von https://raw.githubusercontent.com/EditAtlas/sfx/main/ und werden in ~/.cache/editatlas-sfx zwischengespeichert (EDITATLAS_SFX_CACHE verschiebt ihn). Mit einem lokalen Clone von EditAtlas/sfx übergibst du --mirror PATH (vor dem Unterbefehl für sounds.py) und es wird nichts heruntergeladen.

1. Betrachte den Film und seinen Ton

Führe moments.py aus. Es meldet den vorhandenen Ton (has_audio, LUFS, wie viel davon still ist) und findet drei Arten von Momenten anhand von Pixeldifferenzen: cut (Szenenwechsel), move (Bewegung beginnt oder erreicht ihren Höhepunkt), land (Bewegung stoppt: etwas kommt zur Ruhe). Öffne dann overview.png und sheet.png mit dem Read-Tool: Die Zahlen übersehen weiche Animationen (ein Badge, das über ein stilles Gesicht skaliert, erzeugt keinen Schnitt) und melden Verwacklungen übermäßig. Wo es darauf ankommt, zeichne die Frames um eine Zeit mit --at T und finde den genauen Frame, an dem das Objekt erscheint, landet oder sich dreht.

Entscheide, was der eigene Ton des Films ist:

Was du in den Zahlen hörst und siehstCue-Sheet
Kein Ton, oder silent_share nahe 1"keep_audio": false: die Sounds tragen den Film; er wird auf etwa -16 LUFS gebracht
Nur Musik"keep_audio": true: Sounds liegen etwa 3 LU darunter; setze Akzente möglichst auf den Beat
Jemand spricht (Untertitel, ein Gesicht, ein Ansteckmikrofon)"keep_audio": true, "under_voice": true: etwa 8 LU unter der Stimme; weniger, leisere Sounds
Synthetische Pieptöne bereits im Mix eingebranntFrage nach: Ersetzen benötigt die Stems; das Überlagern mit echten Sounds verdoppelt sie

Frage die Person, wenn nicht klar ist, ob der Ton des Films erhalten bleiben soll.

2. Schreibe die Ereignisliste basierend auf dem, was du gesehen hast

Eine Zeile pro Moment, der einen Sound verdient: Zeit, was passiert, welche Art von Sound. Denke wie ein Cutter:

  • Ein Objekt, das erscheint (Badge, Chip, Button, Bildunterschrift): ein kurzer Pop, Tick oder sanfter Ding, anchor: start.
  • Ein Objekt, das quer bewegt oder ein Übergang: ein Whoosh, dessen lautester Punkt auf der Ankunft liegt, anchor: peak.
  • Ein Objekt, das mit Gewicht landet (Logo, Produkt, Stempel): ein Hit oder dumpfer Schlag auf dem Frame, an dem es stoppt, anchor: peak.
  • Ein reales Objekt auf dem Bildschirm (Glas, Eis, Papier, Schlüssel, ein Getränk): der passende Foley-Sound, kein UI-Sound.
  • Erfolgs-/Fehlerzustände: ein Ding für Ja, ein kurzer Summer oder Alarm für Nein. Eine Familie von Interface-Sounds pro Film.
  • Etwas, das sich aufbaut: ein Riser, dessen Ende auf dem Höhepunkt landet, anchor: end.

Nicht jede Bewegung braucht einen Sound. Tempo- und Geschmacksregeln mit Zahlen findest du in references/taste.md; lies es vor dem ersten Cue-Sheet einer Sitzung.

3. Wähle Sounds: lies, messe, vergleiche

  1. Suche. Wenn der EditAtlas MCP verbunden ist, rankt search_sfx besser (es versteht auch Vietnamesisch); andernfalls sounds.py search. Titel vermeiden bewusst die Wörter ihrer Quelldateien („Kameraauslöser" ist „Lens Aperture Tick"), also suche nach dem, was der Sound ist, und probiere Synonyme und den Kategoriefilter.
  2. sounds.py info auf 2–4 Kandidaten. Lese: audible_s (wie lange er wirklich zu hören ist; die Datei kann länger sein), attack_s (0,0x = schneidet ein, 0,3+ = schwillt an), peak_t_s, centroid_hz (unter ~1500 dunkel, über ~6000 hell), mono_loss_db (unter -6 heben sich die Kanäle auf einem Telefon auf; mix.py spielt dann den lauteren Kanal ab).
  3. sounds.py sheet, wenn zwei Kandidaten gleich klingen: eine scharfe vertikale Linie ist ein Klick, eine Verschmierung ist ein Whoosh, Energie am Boden ist Gewicht.
  4. Wähle nach dem, was sich bewegt und was es berührt, dann nach der Länge: Ein 0,3 s Chip-Pop darf kein 1,8 s Cartoon-Pop sein. Verwende max_len, um eine lange Datei mit einem Fade zu verkürzen.
  5. Wiederholte Momente einer Art (drei Chips) möchten verschiedene Aufnahmen einer Familie (Tiny Plop 05, 06, Empty Plop 06), nicht dreimal dieselbe Datei.

Die Bibliothek ist an manchen Stellen dünn (gemessen 2026-11-07): kein Flüssigkeitsgießen oder Zischen, kein Raumton, kein Stempel, wenige Wassertropfen und dumpfe Schläge. Wähle den nächstgelegenen ehrlichen Sound und nenne die Lücke im Bericht, anstatt einen falschen zu erzwingen.

4. Schreibe das Cue-Sheet und rendere

{
  "video": "work/film.mp4",
  "keep_audio": false,
  "under_voice": false,
  "cues": [
    {"t": 0.30, "id": "sfx-988dafbd36", "role": "whoosh", "label": "Titel landet"},
    {"t": 0.62, "id": "sfx-mi630472",  "role": "foley", "anchor": "start", "max_len": 0.9, "gain_db": -2, "label": "Eis ins Glas"},
    {"t": 8.30, "id": "sfx-fs339114",  "role": "hit", "label": "Flasche landet"},
    {"t": 0.00, "id": "sfx-c7d271e90f", "role": "ambience", "bed": true}
  ]
}
  • t ist der Frame des Moments in Sekunden. role setzt die Lautstärke und den Standard-Anker (references/taste.md).
  • anchor: start setzt den hörbaren Start auf t, peak den lautesten Punkt, end das hörbare Ende.
  • Pro Cue: gain_db (relativ zur Rollenlautstärke), max_len, fade_in, fade_out, offset_in, pan (-1..1).
  • "bed": true: eine lange, gleichmäßige Atmo unter dem gesamten Film bei -54 dBFS (kaum hörbar). Nur für Filme, deren Ton nur aus SFX besteht; niemals unter Sprache oder Musik. Sie überblendet in sich selbst, wenn der Film länger ist.

Führe mix.py aus. Es gibt jeden Sound mit seiner Landezeit und Spitzenlautstärke aus und notiert, wenn ein Moment so früh war, dass der Sound innerhalb seiner Datei beginnen musste.

5. Prüfe, behebe, prüfe erneut

Führe check.py nach jedem Rendering aus; Exit-Code 1 bedeutet, dass es etwas beanstandet hat. Es liest die WAV-Titel, die mix.py neben _resolved.json geschrieben hat, also bewahre diese Dateien zusammen, wenn du Ergebnisse kopierst. Es findet jeden Sound im gerenderten Track anhand seiner eigenen Wellenform, daher ist sync real: Alles, was um mehr als einen Frame abweicht, ist ein Fehler im Sheet. Es misst auch Gesten pro 10 s, die längste Lücke, schwere Hits, Wiederholungen, digitale Stille, Master-Lautstärke und True Peak, Mono-Fold-Down und wie viele starke Bildmomente einen Sound erhalten haben.

Behebe jede Beanstandung (füge einen Sound in die Lücke ein, tausche eine Wiederholung aus, verschiebe ein Cue) oder entscheide, dass sie richtig ist, und begründe dies im Bericht („Die 7,8 s Lücke ist ein Sprechabschnitt, die Stimme trägt ihn"). Hinweise auf langsame Angriffe sind Tipps: Wenn der Moment der Höhepunkt des Sounds ist, wechsle dieses Cue zu anchor: peak. Zwei oder drei Durchgänge sind normal.

6. Liefere

Gib der Person:

  1. FILM_sfx.mp4 und FILM_sfx_track.wav (nur Sounds, volle Länge, zum Unterlegen unter ihren eigenen Schnitt).
  2. Eine kurze Tabelle: Zeit, Moment, Soundtitel und ID, warum dieser Sound.
  3. Die Zahlen von check.py (Tempo, längste Lücke, LUFS, True Peak) und was jede verbleibende Beanstandung bedeutet.
  4. Die Hörliste (listen.wav schneidet diese Momente in eine Datei): „Auf Kopfhörern und einmal auf einem Telefon hören".
  5. Die Lücken: stille Momente und Sounds, die die Bibliothek nicht hatte.

Schreibe den Bericht in der Sprache der Person. Behaupte nicht, dass du zugehört hast.

Optional: die echte-SFX-Engine

Clipwings real-sfx-Skill (MIT-Skripte, von Alexander Korbanov) erledigt die gleiche Aufgabe mit einer schwereren Engine: getippte Cue- Listen, Synth-Layer-Entfernung, Beat-Raster, eine 9-Achsen-Kritik. Er kann die gesamte EditAtlas-Bibliothek als sein Hauptpaket verwenden. Siehe references/real-sfx.md für den Adapter und was verifiziert wurde.

Verwandte Skills