Files
Tha.Les bf561a6c81 Lead/backing vocal split, stems relocation fixes, eager model pre-download (#406)
* Add on-demand lead/backing vocal split, fix stems relocation bugs, and eager model pre-download (#275, #403)

Lead/backing vocal split:
- New on-demand POST /api/jobs/{id}/vocal-split endpoint, running UVR-MDX-NET
  Karaoke 2 (audio-separator) as a second pass over Demucs's vocals.wav
- Desktop and mobile UI toggle to request the split, auto-chained once the
  base separation finishes, for both foreground and background jobs
- Mixer shows Lead Vocals / Backing Vocals lanes in place of Vocals once split

Stems relocation fixes (#403):
- user-data.json (library metadata) now lives inside the jobs folder so it
  follows a Settings relocation instead of staying behind in Documents
- The relocation endpoint's settings persist step was silently swallowing
  write failures and reporting false success; it now reports persisted:
  false and the Settings UI shows a clear warning instead

Desktop setup wizard:
- Demucs, beat-this, and the karaoke model now download eagerly during
  first-boot setup instead of lazily on first use

Also:
- Credit audio-separator / Ultimate Vocal Remover in the README per its
  license's attribution requirement, plus a license audit in docs/models.md
- Add models/ to .gitignore

* ci: install build-essential so diffq (audio-separator's dependency) can compile

diffq has no prebuilt wheel for Python 3.11+ on Linux, its last release only
ever shipped cp310 wheels, so uv sync must compile it from source, which
needs gcc. Docker and the Linux desktop release build already install
build-essential for the same reason; the plain lint/test CI container never
needed it before audio-separator (#275) pulled diffq in.

* chore: pin Unraid template to 0.12.0

This PR ships as v0.12.0, per the user's decision given it introduces the
new lead/backing vocal split feature.

---------

Co-authored-by: Thales <>
2026-08-21 17:43:03 +01:00

2.6 KiB

Model licensing notes

Records the license basis for ML checkpoints StemDeck downloads at runtime. Not exhaustive -- only entries where the decision wasn't a simple upstream license file are documented here.

Demucs (htdemucs_6s)

MIT, published by the demucs PyPI package (Meta/Facebook Research). No audit needed -- an unambiguous upstream license.

UVR-MDX-NET Karaoke 2 (on-demand lead/backing vocal split, #275)

  • File: UVR_MDXNET_KARA_2.onnx
  • Distributed via: audio-separator (PyPI, MIT, nomadkaraoke/python-audio-separator), which bundles/downloads models trained as part of the Ultimate Vocal Remover (UVR) project by Anjok07.
  • License: MIT + attribution, per the audio-separator README:

    "If you choose to integrate this project into some other project using the default model or any other model trained as part of the UVR project, please honor the MIT license by providing credit to UVR and its developers."

  • Credit: Ultimate Vocal Remover (Anjok07) -- https://github.com/Anjok07/ultimatevocalremovergui

This is the shipped default (VOCAL_SPLIT_MODEL in app/core/config.py, overridable via STEMDECK_KARAOKE_MODEL).

Rejected alternative: mel_band_roformer_karaoke (aufr33/viperx)

audio-separator's community-trained roformer checkpoint (mel_band_roformer_karaoke_aufr33_viperx_sdr_10.1956.ckpt) has meaningfully better reported SDR than the MDX-Net Karaoke 2 model above, and was the originally preferred choice while scoping this feature. It was rejected after directly verifying:

  • No LICENSE file was ever published for this checkpoint, nor a stated license anywhere in its distribution.
  • It was originally released through UVR's Boosty supporter-paywall page, not as a public open release.
  • The public Hugging Face mirror (jarredou/aufr33-viperx-karaoke-melroformer-model) now returns 401 (gated/removed) -- confirmed directly, not secondhand.

A cleanly-licensed roformer alternative (Kimberley Jensen's Mel-Band-Roformer-Vocal-Model) was also checked and found to have no LICENSE file despite a claim to the contrary surfacing in a web search.

Since StemDeck is free/non-commercial, the practical risk of using an unlicensed-but-freely-shared community checkpoint is low -- but a Boosty-paywall origin is a step past "unlicensed," suggesting the author did not intend it for free redistribution at all, and its already-dead HF mirror makes it an unreliable thing to depend on regardless of the licensing question. STEMDECK_KARAOKE_MODEL remains available as an env override for a deployment that wants to accept that risk itself.