Dataset Viewer
The dataset viewer is not available for this dataset.
The JWT signature verification failed. Check the signing key and the algorithm.
Error code:   JWTInvalidSignature
Exception:    InvalidSignatureError
Message:      Signature verification failed
Traceback:    Traceback (most recent call last):
                File "/src/libs/libapi/src/libapi/jwt_token.py", line 286, in validate_jwt
                  decoded = jwt.decode(
                      jwt=token,
                  ...<2 lines>...
                      options=options,
                  )
                File "/usr/local/lib/python3.14/site-packages/jwt/api_jwt.py", line 368, in decode
                  decoded = self.decode_complete(
                      jwt,
                  ...<8 lines>...
                      leeway=leeway,
                  )
                File "/usr/local/lib/python3.14/site-packages/jwt/api_jwt.py", line 265, in decode_complete
                  decoded = self._jws.decode_complete(
                      jwt,
                  ...<3 lines>...
                      detached_payload=detached_payload,
                  )
                File "/usr/local/lib/python3.14/site-packages/jwt/api_jws.py", line 270, in decode_complete
                  self._verify_signature(
                  ~~~~~~~~~~~~~~~~~~~~~~^
                      signing_input,
                      ^^^^^^^^^^^^^^
                  ...<4 lines>...
                      options=merged_options,
                      ^^^^^^^^^^^^^^^^^^^^^^^
                  )
                  ^
                File "/usr/local/lib/python3.14/site-packages/jwt/api_jws.py", line 417, in _verify_signature
                  raise InvalidSignatureError("Signature verification failed")
              jwt.exceptions.InvalidSignatureError: Signature verification failed

Need help to make the dataset viewer work? Make sure to review how to configure the dataset viewer, and open a discussion for direct support.

StemSplit Stem-Separation Benchmark 2026

A reproducible head-to-head comparison of every popular open-source music source-separation model against the StemSplit production API, evaluated on the standard MUSDB18-HQ test split using BSS Eval v4 and a small set of CC-BY tracks for qualitative listening.

Built and maintained by the StemSplit team. Source code: scripts/hf-benchmark on GitHub.


Leaderboard (median SDR per stem)

model_id bass drums other vocals
htdemucs_ft 10.38 10.11 6.34 9.19
mdx_extra_q 11.42 11.49 7.67 9.04
htdemucs_6s 9.11 9.54 5.74 8.66
htdemucs 9.78 10.01 6.42 8.53
mdx_net_inst_hq3 5.81

Higher is better. SDR is computed with the museval reference implementation (BSS Eval v4) on 1-second windows, exactly the protocol used by SiSEC and the SDX challenges, so these numbers are directly comparable to results reported in the literature.


Configurations

metrics_only (the leaderboard)

A Parquet table — one row per (model, track, stem) — for the full 50-track MUSDB18-HQ test split. No audio is shipped here; MUSDB18 is a research-only corpus and we are not allowed to redistribute it.

Schema:

column type meaning
model_id string matches configs/models.yaml
track_id string folder name in musdb18hq/test/
stem string one of vocals, drums, bass, other
sdr_median float median Signal-to-Distortion Ratio (dB)
sdr_mean float mean SDR (dB)
isr_median float median Image-to-Spatial Ratio (dB)
sir_median float median Signal-to-Interferences Ratio (dB)
sar_median float median Signal-to-Artifacts Ratio (dB)
n_frames int number of evaluation windows
sample_rate int typically 44100
duration_s float input track length in seconds
wall_time_s float inference wall time
rtf float real-time factor (wall_time / duration)
peak_rss_mb int peak resident memory of the runner process
peak_mps_mem_mb int peak Metal allocation (Apple Silicon only)
host_chip string e.g. Apple M4 Pro
host_unified_memory_gb string unified memory size on the test machine
commit_sha string repo SHA the run was produced from
from datasets import load_dataset
ds = load_dataset("StemSplitio/stem-separation-benchmark-2026", "metrics_only")
df = ds["results"].to_pandas()
df.groupby(["model_id", "stem"])["sdr_median"].median().unstack()

audio_samples (planned for v1.2)

A future config will ship a small set of CC-BY-licensed clips with reference and predicted stems, so you can A/B them in the dataset viewer. Sourcing genuinely commercial-friendly 4-stem multitracks in 2026 is non-trivial; see the v1.2 sourcing notes for the plan.


Models

v1.1 (this release)

All five models below produced complete results on the full 50-track MUSDB18-HQ test split.

id family notes
htdemucs Hybrid Transformer Demucs Facebook AI's default 4-stem model
htdemucs_ft Hybrid Transformer Demucs Fine-tuned variant, best vocal/instrumental separation in the Demucs family
htdemucs_6s Hybrid Transformer Demucs 6-stem model (adds piano + guitar). Its other-row SDR is now computed against piano + guitar + other summed back together — see the Changelog for details.
mdx_extra_q Demucs MDX MDX challenge winner, quantised, 4-model ensemble — best bass and drums of the lineup
mdx_net_inst_hq3 MDX-Net Vocal isolator running through audio-separator with the CoreML ONNX provider on Apple Silicon. Only the vocals row is reported (it does not produce drums/bass/other).

Planned for v1.2

id family why deferred
bs_roformer Band-Split Roformer Current SOTA but slow on Apple MPS due to operator fallbacks (~11 hr for the full test set). Will add once we run on CUDA.
mel_band_roformer Mel-Band Roformer Same reason.
spleeter_4stems Spleeter Legacy baseline; TensorFlow install is brittle on Apple Silicon.

See configs/models.yaml on GitHub for exact versions and command lines.


Changelog

v1.1 (current)

  • Added mdx_net_inst_hq3 (vocals-only MDX-Net via audio-separator with the CoreML ONNX execution provider).
  • Fixed htdemucs_6s other-stem evaluation. The 6-stem model splits piano and guitar out of other; the v1 eval pass compared its residual other output directly to MUSDB's other and got a misleading 0.22 dB. v1.1 sums the model's piano + guitar + other predictions back together before SDR, so htdemucs_6s is now directly comparable to its 4-stem siblings.
  • New prediction_components column on every row records the WAV files that were summed to form each stem (e.g. vocals or other+piano+guitar), so the aggregation is fully auditable.

v1

  • Initial release: 4 Demucs-family models × 50 MUSDB18-HQ tracks = 800 rows.
  • Known issues (both fixed in v1.1): missing mdx_net_inst_hq3, htdemucs_6s other-stem evaluation artefact.

What StemSplit uses internally

The StemSplit hosted API runs HT-Demucs under the hood — the same models you can benchmark above. Pick a quality tier and look up its row in the leaderboard:

StemSplit tier Model row in this benchmark When to choose it
FAST htdemucs Speed-priority previews and bulk processing
BALANCED (default) htdemucs_ft Best vocal separation per second of compute
BEST (6-stem) htdemucs_6s When you need piano + guitar separately

In other words: this dataset is also a benchmark of StemSplit's own quality. We didn't add a separate stemsplit_api row because it would just duplicate those numbers.


Use the StemSplit API

If you'd rather not stand up Demucs, ffmpeg, torchcodec, and a GPU yourself, the StemSplit API ships the same models with a single HTTP call. Pricing, quotas, and the full feature set are documented in our developer portal:

Resource URL
🏠 Developer landing stemsplit.io/developers
📘 Getting-started docs (auth, upload, polling) stemsplit.io/developers/docs
📑 API reference (every endpoint, every field) stemsplit.io/developers/reference
🧩 Integration guides (Zapier, n8n, Make, Pipedream, Discord, Audacity, DJ workflows, ...) stemsplit.io/developers/guides

Minimal example — submit a job, poll, download stems:

# 1. Submit
JOB=$(curl -sS -X POST https://stemsplit.io/api/v1/jobs \
  -H "Authorization: Bearer $STEMSPLIT_API_KEY" \
  -F "[email protected]" \
  -F "stems=4")
JOB_ID=$(echo "$JOB" | jq -r .id)

# 2. Poll until completed
while [ "$(curl -sS https://stemsplit.io/api/v1/jobs/$JOB_ID \
  -H "Authorization: Bearer $STEMSPLIT_API_KEY" | jq -r .status)" != "completed" ]; do
  sleep 3
done

# 3. Download every stem
curl -sS https://stemsplit.io/api/v1/jobs/$JOB_ID \
  -H "Authorization: Bearer $STEMSPLIT_API_KEY" \
  | jq -r '.stems | to_entries[] | "\(.key) \(.value)"' \
  | while read stem url; do curl -sSL "$url" -o "$stem.wav"; done

→ Get an API key at stemsplit.io/developers.


Reproducing the results

Everything runs locally on a Mac with Apple Silicon — no CUDA required.

git clone https://github.com/yourusername/musicai
cd musicai/scripts/hf-benchmark
uv venv --python 3.11 && source .venv/bin/activate
uv pip install -e .

# 1. Get the data (~22 GB extracted from a 21 GB Zenodo zip)
python -m src.download_musdb

# 2. Run every enabled model on every track
python -m src.run_all --continue-on-error

# 3. Score with BSS Eval v4
python -m src.eval_metrics

# 4. Assemble the HF dataset (and optionally push)
python -m src.build_dataset
python -m src.push_to_hub --create

Reference wall times measured on an Apple M4 Pro (24 GB unified memory), PyTorch 2.11 with the MPS backend, for the v1.1 lineup. Demucs models use MPS; MDX-Net runs through ONNX Runtime's CoreML execution provider.

Stage Wall time
Download MUSDB18-HQ from Zenodo 32 min
Separate (5 models × 50 tracks) ~2 h 30 min
Eval (museval BSS Eval v4) ~2 h 20 min
Build dataset < 1 s
Total ~5 h 20 min

Why we built this

We run StemSplit — a hosted stem-separation service — and we needed an honest, public, reproducible way to compare ourselves to the state of the art. So we open-sourced it.

Want to ship a separation product without standing up GPU infrastructure? The same models are one HTTP call away — see the Use the StemSplit API section above, or jump straight to the developer docs and API reference.


Licensing

  • This dataset (the metrics, the dataset card, and the CC-BY audio samples) is released under CC-BY-4.0 — please cite us if you use it.
  • The MUSDB18-HQ audio referenced by metrics_only.track_id is not redistributed here. Download it from Zenodo under its own terms.
  • Each separation model retains its own license; see the table above.

Citation

@misc{stemsplit_benchmark_2026,
  title  = {StemSplit Stem-Separation Benchmark 2026},
  author = {StemSplit},
  year   = {2026},
  url    = {https://huggingface.co/datasets/StemSplitio/stem-separation-benchmark-2026}
}
Downloads last month
16

Models trained or fine-tuned on StemSplitio/stem-separation-benchmark-2026

Collection including StemSplitio/stem-separation-benchmark-2026