Skip to main content
Category: Visual & Media · Version: 1.0.0 · Author: farizanjum · Compatibility: All targets (claude, codex, opencode, gemini, anti-gravity, openclaw, hermes)
Add a full licensed soundtrack to any video for $0. Searches Openverse’s 5.2M free audio files (no API key), beat-matches music to your cuts with librosa, places one sound effect per big move, mixes to -16 LUFS with broadcast-safe peaks, verifies the exported MP4 with FFmpeg, and writes credits.txt automatically. Zero API keys required. Runs entirely on free local tools (ffmpeg, librosa) and the public Openverse API.

Install

What It Does

  • Searches Openverse’s 5.2M audio catalog for commercially usable music and sound effects (cc0, by, pdm from freesound and jamendo only)
  • Downloads selected audio files into sfx/ and appends verbatim license attributions to credits.txt
  • Tracks beats with librosa, isolates the sub-120 Hz kick-drum band, detects off-beat lock numerically, and plots beatgrid.png
  • Aligns scene cuts and title reveals to beat timestamps in beats.json (or shifts music start timing so existing cuts land on the beat)
  • Normalizes every audio layer by measurement: SFX one-shots by true peak (-3.0 dBTP) and music beds by integrated loudness (-20.0 LUFS)
  • Ducks the music bed under voiceover using FFmpeg sidechain compression when speech is present
  • Masters the final mix via two-pass EBU R128 loudnorm to -16.0 LUFS (-4.5 dBTP pre-AAC to leave headroom for encoder overshoot)
  • Verifies the exported MP4 with ebur128, extracts before/after frames at every cue, renders verify/waveform.png, and returns 5 timestamps to check with headphones

Requirements

No API keys required. The public anonymous Openverse API allows ~200 searches/day, and the skill searches once per sound type.

Setup

How to Use

Why Measurement Instead of Guessing

AI agents cannot hear. When an agent mixes audio by guessing volume multipliers or generating sine-wave beeps in code, the result clips, lands off-beat, or drowns out the voiceover. This skill replaces guesswork with three signal-level safeguards:
  • Off-beat lock correction: Beat trackers frequently lock onto hi-hat off-beats instead of the kick drum. beat_grid.py filters the waveform below 120 Hz, compares energy on the detected grid against a half-beat shift, and shifts the grid automatically when the off-beat alignment scores >5% higher.
  • Peak normalization for short SFX: FFmpeg’s loudnorm filter uses a ~3-second rolling window that crushes short one-shots (a 0.5s pop drops by up to 35 dB). sfx_normalize.py measures true peak with ebur128=peak=true, applies exact linear gain to hit -3.0 dBTP, and re-measures to confirm tolerance.
  • AAC encoder headroom: Mastering a WAV to -4.0 dBTP and encoding to 192k AAC adds 0.3-0.6 dB of true-peak overshoot. Two-pass mastering targets -4.5 dBTP on the WAV so the shipped MP4 stays safely below -4.0 dBTP.

Mix Hierarchy

Output

Each run produces:
  1. final.mp4: Video muxed with a 48 kHz / 192k AAC soundtrack mastered to -16 LUFS
  2. credits.txt: Verbatim Openverse attribution lines for every downloaded track (required for CC BY audio)
  3. beats.json & beatgrid.png: Detected tempo (BPM), beat timestamps in seconds, and kick-band alignment plot
  4. verify/waveform.png & cue frames: Exported audio waveform with red cue markers plus before/after video frames (cue_<t>_before.png, cue_<t>_after.png) around every SFX cue
  5. 5 headphone check timestamps: Specific moments in the final video for you to spot-check

Cost Per Run

  • Openverse Audio API: free, no auth (~200 searches/day anonymous limit)
  • Beat tracking, normalization, and verification (librosa, ffmpeg): local execution, $0
  • Total: free

Standalone Scripts

Run the individual audio tools directly from the terminal without an agent:

Project Structure

Plays Well With

License

MIT