Communitygithub.com

EditAtlas/sound-design

Conception sonore d'une vidéo finie avec des effets sonores réels issus de la bibliothèque EditAtlas (2278 sons décrits, publics, téléchargeables depuis GitHub avec vérification SHA-256). Trouve les moments dans l'image, permet de les visualiser sous forme de feuilles d'images, sélectionne les sons par description et mesures chiffrées, les place sur l'image exacte à un niveau défini par leur rôle, conserve ou remplace la musique et la voix originales du film, génère un nouveau MP4 ainsi qu'un fichier WAV SFX séparé, et vérifie le résultat avec des indicateurs (synchro, rythme, trous, niveau sonore).

Qu'est-ce que sound-design ?

Ce skill vous permet de concevoir la bande sonore d'une vidéo terminée en utilisant exclusivement des fichiers audio réels provenant de la bibliothèque EditAtlas, sans aucune écoute humaine. Vous analysez d'abord la vidéo avec `moments.py` pour détecter les coupures, mouvements et atterrissages à partir des différences de pixels, et décidez si la piste audio originale doit être conservée (musique, voix) ou remplacée. Vous recherchez ensuite des sons dans le catalogue EditAtlas via `sounds.py search`, consultez leurs mesures objectives (durée audible, attaque, centroïde, perte mono) avec `sounds.py info`, et créez une feuille de repères (cue sheet) JSON. Le rendu est effectué par `mix.py`, produisant un MP4 final et un WAV SFX séparé, puis `check.py` analyse la synchro réelle (décalage < 1 image), le rythme, les trous, les répétitions, la sonie et le pic vrai. Le skill est conçu pour les développeurs et monteurs vidéo qui souhaitent un workflow automatisé, vérifiable et reproductible, sans jamais se fier à une écoute subjective.

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

Demander à votre IA préférée

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

Documentation

Conception sonore : sons réels sur une vidéo finie

L'objectif : le film sonne comme si un monteur disposant d'une bonne bibliothèque l'avait monté. Chaque son est un fichier réel d'EditAtlas, placé sur une image que vous avez regardée, à un niveau que vous pouvez justifier avec des chiffres.

Deux faits restent vrais tout au long du processus, planifiez en fonction :

  • Vous ne pouvez pas entendre. Vous choisissez les sons d'après leurs descriptions et leurs mesures chiffrées (sounds.py info), vérifiez le placement et les niveaux avec check.py, et remettez à la personne une courte liste de moments à écouter. Ne dites jamais qu'un son « sonne bien » ; dites ce qui a été mesuré et ce qui nécessite encore une oreille.
  • Vous ne devez pas inventer. Travaillez uniquement sur la vidéo que la personne vous a donnée. S'il n'y a pas de vidéo, demandez-la. Si un moment nécessite un son que la bibliothèque ne possède pas, laissez-le silencieux et mentionnez-le dans le rapport.

Tous les scripts se trouvent dans scripts/ (Python 3.9+, numpy, Pillow pour les feuilles d'images, FFmpeg avec ffprobe dans le PATH). Exécutez-les avec le chemin du dossier du skill, depuis votre propre dossier de travail (work/, result/) ; n'écrivez jamais dans le projet de la personne ni dans ce dossier de skill.

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        # images toutes les 0,1 s autour d'un instant
python SKILL/scripts/sounds.py search "verre tintement" --max-dur 2     # identifiants depuis l'index public
python SKILL/scripts/sounds.py info sfx-ID sfx-ID                       # téléchargement unique, SHA-256, mesures chiffrées
python SKILL/scripts/sounds.py sheet sfx-ID sfx-ID --out work/c.png     # forme d'onde + spectrogramme des candidats
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

Les sons proviennent de https://raw.githubusercontent.com/EditAtlas/sfx/main/ et sont mis en cache dans ~/.cache/editatlas-sfx (EDITATLAS_SFX_CACHE permet de déplacer le cache). Avec un clone local de EditAtlas/sfx, passez --mirror PATH (avant la sous-commande pour sounds.py) et rien n'est téléchargé.

1. Regarder le film et son son

Exécutez moments.py. Il rapporte le son existant (has_audio, LUFS, la proportion de silence) et trouve trois types de moments à partir des différences de pixels : cut (changement de plan), move (début ou pic de mouvement), land (arrêt du mouvement : quelque chose se pose). Ensuite, ouvrez overview.png et sheet.png avec l'outil Read : les chiffres ne détectent pas les animations douces (un badge qui s'agrandit sur un visage immobile ne crée pas de coupure) et surestiment les vibrations de caméra. Lorsque c'est important, extrayez les images autour d'un instant avec --at T et trouvez l'image exacte où l'élément apparaît, se pose ou tourne.

Décidez ce qu'est le son original du film :

Ce que vous voyez dans les chiffres et l'imageFeuille de repères
Pas de son, ou silent_share proche de 1"keep_audio": false : les sons portent le film ; il est amené à environ -16 LUFS
Musique uniquement"keep_audio": true : les sons se placent environ 3 LU en dessous ; placez les accents sur le temps quand vous le pouvez
Quelqu'un qui parle (sous-titres, visage, micro-cravate)"keep_audio": true, "under_voice": true : environ 8 LU sous la voix ; moins de sons, plus légers
Bips synthétiques déjà intégrés au mixagedemandez : les remplacer nécessite les stems ; superposer des sons réels les double

Demandez à la personne quand il n'est pas clair de conserver ou non le son du film.

2. Écrire la liste d'événements à partir de ce que vous avez vu

Une ligne par moment qui mérite un son : heure, ce qui se passe, quel type de son. Pensez comme un monteur :

  • Un élément qui apparaît (badge, puce, bouton, cartouche de sous-titres) : un petit pop, tic ou ding doux, anchor: start.
  • Un élément qui se déplace ou une transition : un whoosh dont le point le plus fort atterrit sur l'arrivée, anchor: peak.
  • Un élément qui se pose avec du poids (logo, produit, tampon) : un hit ou un bruit sourd sur l'image où il s'arrête, anchor: peak.
  • Un objet réel à l'écran (verre, glace, papier, clés, boisson) : le bruitage correspondant, pas un son d'interface.
  • États de succès/erreur : un ding pour oui, un court buzzer ou une alerte pour non. Une famille de sons d'interface par film.
  • Quelque chose qui monte en intensité : un riser dont la fin atterrit sur le point d'orgue, anchor: end.

Tous les mouvements n'ont pas besoin d'un son. Le rythme et le goût avec des chiffres sont décrits dans references/taste.md ; lisez-le avant la première feuille de repères d'une session.

3. Choisir les sons : lire, mesurer, comparer

  1. Recherchez. Si le MCP EditAtlas est connecté, search_sfx classe mieux (il comprend aussi le vietnamien) ; sinon utilisez sounds.py search. Les titres évitent délibérément les mots de leurs fichiers sources ("camera shutter" devient "Lens Aperture Tick"), donc cherchez par ce qu'est le son et essayez les synonymes ainsi que le filtre de catégorie.
  2. sounds.py info sur 2 à 4 candidats. Lisez : audible_s (combien de temps il est vraiment entendu ; le fichier peut être plus long), attack_s (0.0x = attaque rapide, 0.3+ = gonflement), peak_t_s, centroid_hz (en dessous de ~1500 sombre, au-dessus de ~6000 brillant), mono_loss_db (en dessous de -6 les canaux s'annulent sur un téléphone ; mix.py joue alors le canal le plus fort).
  3. sounds.py sheet lorsque deux candidats lisent les mêmes chiffres : une ligne verticale nette est un clic, une traînée est un whoosh, l'énergie en bas est du poids.
  4. Choisissez en fonction de ce qui bouge et de ce qu'il touche, puis par longueur : un pop de puce de 0,3 s ne doit pas être un pop de dessin animé de 1,8 s. Utilisez max_len pour couper un fichier long, avec un fondu.
  5. Les moments répétés d'un même type (trois puces) nécessitent différentes prises d'une même famille (Tiny Plop 05, 06, Empty Plop 06), pas le même fichier trois fois.

La bibliothèque est limitée à certains endroits (mesuré le 2026-11-07) : pas de versement ou de pétillement de liquide, pas de bruit de fond de pièce, pas de tampon, peu de gouttes d'eau et de bruits sourds. Choisissez le son honnête le plus proche et mentionnez le manque dans le rapport plutôt que d'en forcer un inapproprié.

4. Écrire la feuille de repères et effectuer le rendu

{
  "video": "work/film.mp4",
  "keep_audio": false,
  "under_voice": false,
  "cues": [
    {"t": 0.30, "id": "sfx-988dafbd36", "role": "whoosh", "label": "le titre se pose"},
    {"t": 0.62, "id": "sfx-mi630472",  "role": "foley", "anchor": "start", "max_len": 0.9, "gain_db": -2, "label": "glaçons dans un verre"},
    {"t": 8.30, "id": "sfx-fs339114",  "role": "hit", "label": "la bouteille se pose"},
    {"t": 0.00, "id": "sfx-c7d271e90f", "role": "ambience", "bed": true}
  ]
}
  • t est l'image du moment en secondes. role définit le niveau et l'ancrage par défaut (references/taste.md).
  • anchor : start place le début audible sur t, peak le point le plus fort, end la fin audible.
  • Par repère : gain_db (relatif au niveau du rôle), max_len, fade_in, fade_out, offset_in, pan (-1..1).
  • "bed": true : une ambiance longue et stable sous tout le film à -54 dBFS (à peine entendue). Uniquement pour les films dont le son est uniquement SFX ; jamais sous une voix ou de la musique. Elle s'enchaîne par fondu enchaîné si le film est plus long.

Exécutez mix.py. Il affiche chaque son avec son heure d'atterrissage et son niveau de pic, et note lorsqu'un moment était si précoce que le son a dû commencer à l'intérieur de son fichier.

5. Vérifier, corriger, vérifier à nouveau

Exécutez check.py après chaque rendu ; le code de sortie 1 signifie qu'il a signalé quelque chose. Il lit les pistes WAV que mix.py a écrites à côté de _resolved.json, donc gardez ces fichiers ensemble lorsque vous copiez les résultats. Il trouve chaque son dans la piste rendue par sa propre forme d'onde, donc la sync est réelle : tout décalage de plus d'une image est un bug dans la feuille. Il mesure aussi les gestes par 10 s, le trou le plus long, les hits forts, les répétitions, le silence numérique, la sonie master et le pic vrai, la réduction mono, et le nombre d'images fortes qui ont reçu un son.

Pour chaque signalement, soit corrigez-le (ajoutez un son dans le trou, remplacez une répétition, déplacez un repère), soit décidez qu'il est correct et dites pourquoi dans le rapport (« le trou de 7,8 s est un passage parlé, la voix le porte »). Les notes sur les attaques lentes sont des indices : si le moment est le pic du son, passez ce repère à anchor: peak. Deux ou trois rounds sont normaux.

6. Livrer

Remettez à la personne :

  1. FILM_sfx.mp4 et FILM_sfx_track.wav (sons seuls, durée complète, à placer sous son propre montage).
  2. Un court tableau : heure, moment, titre du son et identifiant, pourquoi ce son.
  3. Les chiffres de check.py (rythme, trou le plus long, LUFS, pic vrai) et ce que chaque signalement restant signifie.
  4. La liste d'écoute (listen.wav regroupe ces moments en un seul fichier) : « écouter au casque et une fois sur un téléphone ».
  5. Les lacunes : moments laissés silencieux et sons manquants dans la bibliothèque.

Rédigez le rapport dans la langue de la personne. Ne prétendez pas avoir écouté.

Optionnel : le moteur real-sfx

Le skill real-sfx de Clipwing (scripts MIT, par Alexander Korbanov) fait le même travail avec un moteur plus lourd : listes de repères typées, suppression de couches de synthé, grilles de temps, une critique en 9 axes. Il peut utiliser toute la bibliothèque EditAtlas comme pack principal. Voir references/real-sfx.md pour l'adaptateur et ce qui a été vérifié.

Skills associés