Scorewright

Claude composes. The tools render. Original music for your video, spotted to the picture and mixed under your voice.

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.

Subbelow 60 Hz · weight, drops
Bass60–250 Hz · roots, kick
Atmos250 Hz–1.5 kHz · pads, strings
Voice band1.5–4 kHz · kept clear
Melodicpulse, bells, motif
Percussion / airabove 5 kHz · hats, sparkle

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.

  1. AnalyzeDuration, cuts, speech regions, timed words, a contact sheet.
  2. Watch & spotCue in/out, hit points on words and reveals, where silence is better.
  3. DirectionGenre, key/mode, BPM, palette, leitmotif — each with a reason.
  4. Write score.jsonCues, chords, tracks, motifs, SFX, mix targets.
  5. RenderFluidSynth + GeneralUser GS, audio-as-code synths, numpy sound design.
  6. Mix under voiceBed 11–12.6 LU under speech, ducking, 1.5–4 kHz dip.
  7. QCLoudness, true peak, band energy, hit rise, stems sum check, spectrogram.
  8. 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.