A drag-and-drop macOS app that turns any song into a file your Teenage Engineering SP-1 stem player can load. Drop an MP3, wait, drag the finished WAV into the SP-1 stem loader. That's it.
It does the tedious parts for you:
song.mp3
│
▼ demucs split into 4 stems → vocals · drums · bass · other
▼ ffmpeg merge to one 8-channel, 24-bit, 48 kHz WAV
▼ librosa detect BPM, write it into the filename
▼
~/Music/SP-1 Stem Foundry/Ready/song 128BPM.wav
The SP-1 wants a single 24-bit / 48 kHz / 8-channel WAV (4 stereo stems),
not separate files — and it auto-reads the tempo if the filename contains
something like 128BPM. Separator produces exactly that.
The 8 output channels are laid out the way the SP-1 expects:
| Channels | Stem |
|---|---|
| 1 / 2 | vocals (1) |
| 3 / 4 | drums (2) |
| 5 / 6 | bass (3) |
| 7 / 8 | other (4) |
Change STEM_ORDER in app/Resources/engine.py to remap.
Prerequisites:
- macOS 10.15+ (Apple Silicon recommended — Demucs runs on the MPS GPU)
- Python 3.10+ — install via Homebrew:
brew install python@3.12 - FFmpeg:
brew install ffmpeg— required, becausetorchcodec(which Demucs uses to write stems) links against the FFmpeg libraries at runtime
git clone https://github.com/AnttiHero/Separator.git
cd Separator
./build.sh
open "SP-1 Stem Foundry.app"First launch builds a private Python environment and downloads the audio
engine (Demucs + PyTorch, ~2 GB). That takes a few minutes, once. Every launch
after that is instant. The environment lives in
~/Library/Application Support/SP-1 Stem Foundry/ and the setup log is there
too if anything goes wrong.
- Pick an engine:
htdemucs(fast) orhtdemucs ft(fine-tuned, slower). - Drop an audio file on the window (or click to browse). MP3, WAV, FLAC, M4A.
- The status LED pulses orange while it works, turns green when done.
- Click reveal in finder and drag the WAV into the SP-1 stem loader.
The first song is slower than the rest — Demucs downloads its model weights on the very first separation.
app/
Info.plist app bundle metadata
launcher.sh bootstraps the venv on first run, then starts the app
Resources/
app.py pywebview shell + JS bridge
engine.py the pipeline: demucs → ffmpeg merge → bpm
ui/index.html the interface
requirements.txt
assets/
icon.svg source artwork
AppIcon.icns built icon
build-icon.sh regenerate the .icns from the .svg
build.sh assembles "SP-1 Stem Foundry.app"
Beta. Verified end-to-end on Apple Silicon (macOS, Python 3.12, MPS): a song runs through Demucs → merge → BPM and produces a correct 8-channel / 48 kHz / 24-bit WAV with the stems in the right channels. Issues and PRs welcome.
- Built on Demucs for source separation, with a nod to Demucs-GUI.
- Made for the SP-1 stem loader by Tim Knapen and solderless.
- Teenage Engineering and SP-1 are trademarks of their respective owners. This is an unofficial, independent tool.
MIT — see LICENSE.