Stemd separates a mixed track into its parts: vocals, drums, bass and the rest of the music. It runs the models on your own GPU, Metal on Apple silicon or CUDA on NVIDIA.
Stemd is two things in one program:
- A desktop app. Drop a file on the window and the stems appear in a folder beside it.
- A separation server. Other machines on the network find it by mDNS and send it audio over HTTP. A DJ player or a script on a small board can use the GPU of the Mac or PC next to it.
In the window
- Drop a track, or click to choose one. Stems land besides the track in
<track>-stems/. - Choose the parts:
harmonics,vocalsanddrumsby default, or splitharmonicsintobassandother. - FLAC, WAV, MP3 or raw PCM output, at 24, 44.1, 48 or 96 kHz.
- In any lossless format the stems sum back to the original track bit for bit.
- Three presets: Fast, Balanced and Quality. See Presets.
- A running or queued drop can be stopped from its row.
- Built-in updates: Sparkle on macOS, a silent Setup on Windows, a notice on Linux.
As a server
- Plain HTTP on port
8420: raw PCM in, stems out. The contract is in docs/api.md. - Announces itself over mDNS as
_stemd._tcp, so a client needs no address. --headlessruns it without a window, on a desktop or a server.- Sessions separate a track piece by piece around a playhead. A player can start on the part under the needle before the whole track is done.
- One job queue and one cache for drops and clients. A track separated once is a cache hit the next time, from a drop or a client.
model_idin/v1/healthnames the exact weights and settings behind the stems, so a client can key its own stem cache on it.- The server switch in the status bar turns the API off without closing the app.
stemd-cliis the reference client:stemd-cli path/to/track.wav
| platform | download | needs |
|---|---|---|
| macOS | stemd-<version>-macos-arm64.dmg |
macOS 14 or later, Apple silicon |
| Windows | stemd-<version>-setup.exe or -windows-x64.zip |
NVIDIA driver 580 or later, else CPU |
| Linux | .deb, .rpm, .AppImage, x86_64 or aarch64 |
glibc 2.35 or later, NVIDIA driver 580 or later |
Every link opens the latest release. The first run downloads the model weights, 168 MB to 942 MB depending on the preset.
macOS. Open the disk image and drag Stemd to Applications. The app is signed and notarized, and the ticket is stapled, so the first launch needs no network.
Windows. Run setup.exe. It installs for the current user without
administrator rights; the first page offers an install for all users. The zip
is for running without an installer.
For GPU separation, tick the CUDA box on the last page of the installer, or
run install-cuda.cmd later. It fetches about 1.2 GB of NVIDIA's runtime,
pinned by digest. Without it Stemd runs on the CPU, much slower.
Linux. Each package carries the CUDA runtime and cuDNN; the NVIDIA driver is the only other requirement.
| Debian, Ubuntu | sudo apt install ./stemd-*-linux-x86_64.deb |
| Fedora, RHEL 10 | sudo dnf install ./stemd-*-linux-x86_64.rpm |
| anything else | chmod +x stemd-*.AppImage && ./stemd-*.AppImage |
Supported: Ubuntu 22.04, Debian 12, Fedora 36, RHEL 10 and later. The aarch64 build targets NVIDIA Arm machines such as DGX Spark and Grace Hopper, and needs an NVIDIA GPU.
| preset | model | download | drums | bass | other | harmonics | vocals | RTX 3090 Ti | M1 Pro |
|---|---|---|---|---|---|---|---|---|---|
| Fast | htdemucs v4 |
168 MB | 8.27 | 8.17 | 5.14 | 8.62 | 8.92 | 106x | 18x |
| Balanced | htdemucs_ft |
672 MB | 8.49 | 8.40 | 5.20 | 8.78 | 9.28 | 55x | 8x |
| Quality | stemd RoFormer | 251 MB | 11.07 | 7.97 | 6.52 | 11.54 | 11.34 | 18x | 3.6x |
- Parts: SDR in dB, higher is better. Global SDR over the first 12 MUSDB18-HQ
test tracks, full length, from the shipped server.
drumsis rebuilt from the mix, as the window writes it. - Speed: times realtime on a warm 64 s clip. The first separation after launch takes about twice as long while the GPU kernels compile.
- Fast is the default. It won a listening test on real material against the other two.
Method and notes: docs/evaluation.md.
| stems | <track>-stems/, beside the track |
| models | the user data directory, downloaded once |
| cache | recent results, capped at 4 GB, emptied at every start |
Repeating a track already separated returns the cached result: entries are keyed by the audio and by everything else that changes the output.
Needs cmake, Rust 1.89 or later, and a recursive clone. Per-platform
toolchains, packaging and every flag are in
docs/building.md.
git clone --recurse-submodules https://github.com/nsaintot/stemd
cargo build --release| docs/building.md | building, packaging and every flag |
| docs/api.md | the HTTP contract for writing a client |
| docs/internals.md | cache, queue, discovery, model loading |
| docs/evaluation.md | how the models were chosen and measured |
| docs/models.md | where the weights come from, and their licence |
Dual-licensed under MIT and Apache-2.0. Use whichever of the two you prefer.
The model weights are not covered by either and state their own terms; see the
models-v2 and
models-v3 releases.
stemd_roformer, which Quality runs, is CC BY-NC 4.0.
The MP3 encoder is LAME 3.100, which is under the GNU Library General Public License version 2 and links statically, so redistributing a built binary carries that obligation.
crates/stemd-core/data/mode1_*.bin are measurements of third-party hardware
rather than authored code, so the grant above does not purport to cover them.
They are used for one conversion, 44.1 to 96 kHz, and only when a request asks
for it, so that a client subtracting stems from its own mix gets the same filter
on both sides.

