Skip to content
Back to skills

Video Sound

ASecurity

Makes the sound of any video: ElevenLabs voiceover (one file per line, static levelling, a transcript gate that must hear brand names verbatim, word timings for captions), music picked by role and tempo from a beat-mapped library and cut to the film, sound effects from an analysed library of 1,277 redistributable sounds or generated, the stereo mix that ducks music per spoken passage with a static master to -14 LUFS, and the check that every effect is heard. An executor under video-studio. Us...

  • 4 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 11, 2026
content-marketingpythonbashawsgitapi

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 16 files and shows the line behind each finding

Scanned November 11, 2026

npx -y skills add tymoshenko-dmytro/claude-marketing-skills --skill video-sound --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Video Sound?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Video Sound
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tymoshenko-dmytro-video-sound/badge)](https://www.skillsdirectory.com/skills/tymoshenko-dmytro-video-sound)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: video-sound
description: >-
  Makes the sound of any video: ElevenLabs voiceover (one file per line, static levelling, a
  transcript gate that must hear brand names verbatim, word timings for captions), music picked
  by role and tempo from a beat-mapped library and cut to the film, sound effects from an
  analysed library of 1,277 redistributable sounds or generated, the stereo mix that ducks music
  per spoken passage with a static master to -14 LUFS, and the check that every effect is heard.
  An executor under video-studio. Use when a film needs a voice, music, effects or a mix, or when
  video-studio reaches its audio steps. Triggers: "voiceover", "voice the script", "music bed",
  "sound design", "sound effects", "mix the audio", "loudness", "install the sound library".
---

# video-sound

Everything a film sounds like. video-studio decides when sound happens in the work
(audio first, then the mix); this skill decides how. House laws on sound live in
`../video-studio/references/laws.md` (Sound section) and win over anything here.

**Input: the film's `brief.md`** (`../video-studio/references/brief.md`). It owns copy, claims, tone,
material, moments and private data; this skill owns the implementation. If the brief cannot be
met, say so to video-studio - never change it silently.

## Setup (once)

```bash
python3 ${CLAUDE_SKILL_DIR}/scripts/library.py install   # ~150 MB download, SHA-256 checked
python3 ${CLAUDE_SKILL_DIR}/scripts/library.py venv      # tools/.venv: librosa, numpy, scipy, soundfile, matplotlib
python3 ${CLAUDE_SKILL_DIR}/scripts/library.py doctor    # what is missing
PY="${VIDEO_LIBRARY:-$HOME/.local/share/marketing-agent-kit/video-library}/tools/.venv/bin/python"
```

- `ffmpeg` and `ffprobe` on PATH (every script).
- `ELEVENLABS_API_KEY` in the environment or `~/.config/marketing-agent-kit/.env`
  (`connections/elevenlabs-api.md`). Sound generation needs a paid ElevenLabs plan.
- The voice gate needs a Whisper CLI: `mlx-whisper` on Apple Silicon, `openai-whisper` elsewhere.
  `--words` needs `parakeet-mlx` (Apple Silicon only); on other machines use `--align`.

## Library

`$VIDEO_LIBRARY` (default `~/.local/share/marketing-agent-kit/video-library`), shared by every
film. 8 music tracks (5 by Sascha Ende, CC BY 4.0, credit line in its `LICENSES.md`; 3 scratch
synth beds) and 1,277 sound effects: 228 Kenney, 32 keypresses, 11 ElevenLabs-generated interface
and brand-moment sounds, and 1,006 CC0 sounds in 19 functional types from the opus-sound-layer kit
(`sfx/osl/<type>/`: hit, glitch, zap, boom, ui, pop, tick, click, riser, swish, reverse, whoosh,
thump, chime, tap, key, shimmer, transition, paper; each with its peak offset).

- `catalog/CATALOG.md` first (its "By type" table and the kit's default picks), then
  `catalog/sfx.json` and `catalog/music.json`; every `path` is relative to the library root.
- Beat cues per track in `cues/`; every file's licence in `LICENSES.md`.
- **External tracks**: four music entries carry `"external": true` - their licence does not allow
  redistribution, so only their beat grids ship. Use one only when its file is at its `path`;
  `library.py doctor` says how to get each (two are 18 s cuts that `tools/prep_bed.py` re-makes).
- New sounds or music: licence row first (`catalog/sources.json` + `LICENSES.md`), then the file,
  then analyse, then rebuild the catalogue - the library's `README.md`, "Adding your own sounds".
  The tools live in `${CLAUDE_SKILL_DIR}/library-tools/` (copied into `$VIDEO_LIBRARY/tools/` on
  install): `analyze_music_cues.py`, `music_key.py`, `analyze_sfx.py`, `build_catalog.py`,
  `prep_bed.py`, `synth_bed.py`.

## Tools

`$PY` = the library venv (Setup).

| Job | Command |
|---|---|
| Voice, one file per line | `python3 ${CLAUDE_SKILL_DIR}/scripts/gen_voice.py lines.json out_dir --must Acme[,Zoom]` (ElevenLabs; static gain to -18 LUFS; transcript gate; `--words` caption timings (parakeet, European languages); `--align` = word timings from ElevenLabs itself, any language (required for Arabic/Hebrew/CJK; Hebrew needs `--model eleven_v3`); `--speed`, `--stability`) |
| A sound the library lacks | `python3 ${CLAUDE_SKILL_DIR}/scripts/gen_sfx.py sounds.json lib_dir` (ElevenLabs; "dry" for UI; `default` = the starter set of 11 prompts), then analyse and add it to the library |
| The mix | `python3 ${CLAUDE_SKILL_DIR}/scripts/mix.py timeline.json out.wav --duck fg bg [--depth 7] [--merge 1.0]` - voice on `fg`, music on `bg`, effects flat; ducks per passage; static master to `loudness`, then an oversampled true-peak limiter at `--tp-ceiling` (-2 dBTP) with the gain re-solved to the target (-1.9 dBTP survives AAC); writes `<out>.placed.json`. Library files are written `"$VIDEO_LIBRARY/sfx/..."` |
| Put a sound ON a picture event | an event with `"cue": <s>` (or `"frame"`) and `"align": "peak"` - the sound's peak lands on the cue (2 ms envelope; the sidecar's `peak_offset_s` when there is one); `"end"` for risers and reverses. Mark `"visual": "cut\|move\|land\|appear"` (+ `"roi"`, `"hero"`) so video-check can test it against the picture |
| Level and pitch effects against the music and the voice | `$PY ${CLAUDE_SKILL_DIR}/scripts/sfxauto.py timeline.json timeline.resolved.json --duck fg bg`, then mix the resolved file. `"gain": "auto"` = lifted 3.5 dB (hero 5) over the bed in its own band, capped (2-8 kHz, peak); under a voice = texture only, -24 dB, flagged. `"pitch": "auto"` = a tonal effect moved ≤ ±3 st onto the music's key (from the catalogue) |
| Silence before the peak, a build into it | on the effect: `"stop_before": true` (music -24 dB for the 0.4 s before its cue), `"build": true` (music thins through a 300 Hz high-pass over the 2 s before) - mix.py |
| Find a sound and look at it | `$PY ${CLAUDE_SKILL_DIR}/scripts/sfxlib.py browse --type whoosh --like "fast" --max-dur 1.5 --sheet out.png [--ads]` (waveform + spectrogram + peak per pick; prints the timeline path); `sfxlib.py measure <file>` for a new sound |
| Is every effect heard | `$PY ${CLAUDE_SKILL_DIR}/scripts/sfxcheck.py timeline.json` - GAP / OVER / LOW / MASKED, ONSET and TAIL flags |
| The library itself | `python3 ${CLAUDE_SKILL_DIR}/scripts/library.py install \| venv \| path \| doctor` |
| Sounds of camera and editing moves, story-time voice | the **video-moves** skill (`../video-moves/scripts/move_audio.py`) |

The full practice - voice models and settings, ElevenLabs details, music cutting to the
beat grid, effect placement, the mix and loudness targets, what to try next:
`references/audio.md`.

## Sources

- **opus-sound-layer** (github.com/Bodila51/opus-sound-layer @52ac266, MIT): the CC0 sound kit
  (licences re-checked page by page, 38 events left out), peak-aligned placement, the true-peak
  limiter loop, the per-band gain solver (`sfxauto.py`; under a voice it only sets texture), the
  dead stop and filter build, the browse sheet (`sfxlib.py`), the shared-room recipe, and the
  sync/picture/offset check (video-check `soundqa.py`). Their word-following duck is not taken
  (the laws duck per passage). Key detection (`music_key.py`, the idea is theirs) and the whisper
  speech scan of the Freesound set (`speechSuspect` in sfx.json; `sfxlib.py --ads` skips them) are ours.
- **latent-spaces/brag** (MIT): `analyze_music_cues.py`, the Ende tracks' cue presets and the
  Kenney/keyboard analysis.
- **The shared room**: mix.py adds it to the effects by default, off under speech
  (`--room off` disables it) - a blind A/B on a camera-moves test film picked it.

## Adapt it

- **Your voices**: pick ElevenLabs voice ids per language (premade voices work in the API;
  non-English lines need a shared-library voice) and write them into your brand laws.
- **Your names**: pass your product and brand names to `--must` on every take.
- **Your music**: add tracks you hold a licence for under `music/<source>/` (row in
  `catalog/sources.json` and `LICENSES.md` first), or put the four external tracks in
  `music/external/`; then analyse and rebuild the catalogue.
- **Your sounds**: write a `sounds.json` of prompts in your product's sonic style for
  `gen_sfx.py`, and add the results to the library as a source of their own.
- **Your targets**: `"loudness"` per timeline (-14 LUFS suits YouTube, LinkedIn, ads); after your
  first film checked by ear, move `sfxcheck.py`'s 0 dB line to what your ears agreed with.

Files in this skill

  • SKILL.md8.2 KB
  • library-tools/analyze_music_cues.py10.8 KB
  • library-tools/analyze_sfx.py3.8 KB
  • library-tools/build_catalog.py12 KB
  • library-tools/music_key.py3.2 KB
  • library-tools/prep_bed.py2.5 KB
  • library-tools/pyproject.toml313 B
  • library-tools/synth_bed.py3.9 KB
  • references/audio.md16 KB
  • scripts/gen_sfx.py5.1 KB
  • scripts/gen_voice.py19.3 KB
  • scripts/library.py11.4 KB
  • scripts/mix.py13.6 KB
  • scripts/sfxauto.py11.2 KB
  • scripts/sfxcheck.py8 KB
  • scripts/sfxlib.py6.6 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in content-marketing →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.