Colour is sound
Every bar above is one frequency band. Height is energy. The colour tells you which part of the mix lives there. The grey ribbon is the voice band: Scorewright carves the music out of it while you speak. A white ring marks a hit point.
Bed or score: the first decision
Bed
For narrated explainers. No melody under speech: a tune is a second voice, and your explanation loses. Pulse, texture, slow harmony and sub. Energy steps at section borders. A few hits on real reveals.
Score
For film and documentary with speech-free stretches. A leitmotif per core idea, developed at story turns. Melody lives in the gaps.
How it works
Claude makes every creative choice in score.json and writes the reason. The script has no default style, tempo or key, so two videos never get the same music.
- AnalyzeDuration, cuts, speech regions, timed words, a contact sheet.
- Watch & spotCue in/out, hit points on words and reveals, where silence is better.
- DirectionGenre, key/mode, BPM, palette, leitmotif — each with a reason.
- Write score.jsonCues, chords, tracks, motifs, SFX, mix targets.
- RenderFluidSynth + GeneralUser GS, audio-as-code synths, numpy sound design.
- Mix under voiceBed 11–12.6 LU under speech, ducking, 1.5–4 kHz dip.
- QCLoudness, true peak, band energy, hit rise, stems sum check, spectrogram.
- ListenClaude cannot hear. You listen; Claude fixes the numbers you point at.
Install
git clone https://github.com/jayaprakash-pixel/scorewright ~/.claude/skills/scorewright cd ~/.claude/skills/scorewright python -m pip install -r requirements.txt # + FluidSynth on PATH, ffmpeg on PATH, GeneralUser-GS.sf2 in soundfonts/ python scripts/scorewright.py doctor # prints "ready"
Then in Claude Code: /scorewright score this video: my_video.mp4. Full steps in the README.