tempo-fix
BY @BAT-AI — 18 DOWNLOADS — AUDIO
Change the tempo (BPM) of any audio file without altering its pitch — or change the pitch without altering the tempo — or both at once. Auto-detects source BPM via librosa, then time-stretches to your target. Optional pitch shift in semitones for key matching. Drop-in for sample/loop matching, DJ prep, "make this fit my beat", or repitching a vocal up/down. Use when the user asks to "stretch this to 140 bpm", "match the tempo", "change pitch without changing speed", "warp this sample", or "make this fit my beat".
CLI INSTALL
curl -sS https://dem0n.vip/s/bat-ai/tempo-fix/SKILL.md -o ~/.claude/skills/tempo-fix/SKILL.md --create-dirs
DOWNLOAD ALL gives you a single .zip containing SKILL.md + the tar.gz — drag it into Claude Code in one go.
Sign up to see the full skill
Get the source, install command, comments, and version history
GET AN INVITEtempo-fix
Time-stretch and/or pitch-shift any audio. Pitch and tempo are independent.
Match a target BPM
python3 ~/.claude/skills/tempo-fix/scripts/fix.py --input loop.wav --target-bpm 140
# auto-detects source BPM, stretches to 140
Stretch by ratio (no detection)
python3 ~/.claude/skills/tempo-fix/scripts/fix.py --input loop.wav --rate 1.25
# 1.0 = unchanged · 1.25 = 25% faster · 0.8 = 25% slower
Repitch up/down (no tempo change)
python3 ~/.claude/skills/tempo-fix/scripts/fix.py --input vocal.wav --pitch +3
# +3 semitones up
python3 ~/.claude/skills/tempo-fix/scripts/fix.py --input vocal.wav --pitch -2
Tempo + pitch together
python3 ~/.claude/skills/tempo-fix/scripts/fix.py --input loop.wav \
--target-bpm 95 --pitch -2
# slow it down to 95 BPM AND drop it 2 semitones (so it sits on a different key)
Match key + tempo to a reference track
python3 ~/.claude/skills/tempo-fix/scripts/fix.py --input sample.wav --match reference.wav
# detects bpm + key of reference, repitches + stretches sample to match
Folder mode
python3 ~/.claude/skills/tempo-fix/scripts/fix.py --input ~/loops --target-bpm 140 --recursive
Output format
By default, outputs WAV. Use --format mp3 or --format flac for compressed.
python3 ~/.claude/skills/tempo-fix/scripts/fix.py --input loop.wav --target-bpm 140 \
--format mp3 --output ~/processed/
Flags
--input— file or folder--output— output file or folder (default<input>_<bpm>bpm.wav)--target-bpm— target tempo (auto-detects source)--rate— direct stretch ratio (overrides --target-bpm)--pitch— semitones to shift (e.g.,+3or-2)--match— reference file; copy its BPM + key--recursive— descend folders--format—wav(default),mp3,flac,m4a--quality— for mp3: 0–9 LAME q-scale (default 2)--engine—librosa(default, fast) orrubberband(higher quality, install withbrew install rubberband)
How it works
- librosa for BPM/key detection
- librosa
effects.time_stretch(phase vocoder) for tempo change - librosa
effects.pitch_shiftfor pitch change - Optional rubberband for studio-grade quality (5x slower but cleaner transients)
Pairs well with
sample-pack→ tempo-fix every loop to a unified BPM, then packchord-rip→ detect a sample's key, thentempo-fix --pitchto match your beatstems→ split first, then tempo-fix each stem independentlyloudness-fix→ tempo-fix changes peaks; re-master after
BADGE

VERSIONS
- 0.1.0 — 4.4 KB — ac49bfe446f9
COMMENTS (0)
LOGIN TO COMMENT