VoxSplit
voxsplit.borck.dev — hear real separation output, then self-host.
Local-first AI stem separation with a modern web UI. Drop in a song, get back vocals, instrumental, or full 4-stem splits — everything runs on your own machine, no accounts, no uploads to the cloud.
VoxSplit is a greenfield web app built on proven open-source separation engines. It is inspired by Ultimate Vocal Remover GUI and stands on the shoulders of that project and its model authors.
Status
Working proof of concept: upload → separate with per-job progress → play/download stems. Models auto-use the best available accelerator: CUDA on Linux/NVIDIA, MPS on Apple Silicon (torch-based models), CPU everywhere.
Models
Weights are fetched on demand (first use of each model) into data/models/
from the community model repos maintained by the UVR and python-audio-separator
projects. No manual downloads needed.
| Model | Family | Stems | Notes |
|---|---|---|---|
| Mel-Band RoFormer (aufr33/viperx) | RoFormer | 2 | SOTA karaoke quality |
| Mel-Band RoFormer (becruily) | RoFormer | 2 | SOTA karaoke alt |
| Mel-Band RoFormer (KimberleyJSN) | RoFormer | 2 | SOTA vocals |
| UVR-MDX-NET-Inst HQ 3 | MDX-Net | 2 | Fast, high quality |
| Kim Vocal 2 | MDX-Net | 2 | Vocals, male-leaning |
| UVR MDXNET Kara 2 | MDX-Net | 2 | Karaoke-optimized |
| htdemucs_4s | Demucs | 4 | Vocals/drums/bass/other |
Accelerator notes: RoFormer and Demucs run on CUDA/MPS automatically. MDX-Net
runs via onnxruntime — CPU on macOS, CUDA on Linux with audio-separator[gpu].
Quickstart
Requires Python 3.10+ and uv (or plain pip —
see note below).
git clone https://github.com/michael-borck/voxsplit
cd voxsplit
uv venv
source .venv/bin/activate
uv pip install -e .
voxsplit
Without uv: python3 -m venv .venv && source .venv/bin/activate && pip install -e .
Open http://127.0.0.1:8399, drop a .wav/.mp3/.flac, pick a model, hit
Split. The first run downloads the selected model (~60 MB) to data/models/.
Architecture
browser (vanilla JS) ──► FastAPI (backend/main.py)
├── jobs.py thread-safe job store, 1-worker queue
├── engine.py python-audio-separator wrapper (lazy import)
└── data/ uploads, outputs, model weights
- REST API:
POST /api/jobs(upload + model),GET /api/jobs/{id}(status),GET /api/jobs/{id}/files/{name}(stream stem),DELETE /api/jobs/{id}. - Engines: models run via
python-audio-separator, which supports UVR's MDX-Net/VR models, Demucs, and Mel-Band RoFormers.
Credits
This project exists because of the people who built the models and the original app:
- Anjok07 & aufr33 — Ultimate Vocal Remover GUI, the project that made high-quality local stem separation accessible.
- nomadkaraoke — python-audio-separator, the maintained headless engine VoxSplit wraps.
- ZFTurbo — MDX23C weights and Music-Source-Separation-Training.
- Kuielab & Woosung Choi — original MDX-Net AI code.
- tsurumeso — original VR architecture code.
- Alexandre Défossez & Meta (Demucs) — Demucs AI code.
- Bas Curtiz — original UVR logo/icon design.
Deployment (NVIDIA)
On a Linux box with NVIDIA GPUs and Docker + nvidia-container-toolkit:
cd deploy
docker compose up -d --build
Then browse to http://<box-ip>:8399. Model weights persist in deploy/data/.
Roadmap
- Per-job progress reporting (tqdm hooks on torch models)
- Mel-Band RoFormer models (current SOTA)
- Apple Silicon MPS acceleration (automatic for torch models)
- Ensemble mode + post-processing (from UVR's playbook)
- Optional Tauri desktop wrapper
License
MIT — see LICENSE.
Metadata
Release files for voxsplit 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| voxsplit-0.1.0.tar.gz | 15.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| voxsplit-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 29.9 kB
Release files / voxsplit-0.1.0.tar.gz
| Download URL | voxsplit-0.1.0.tar.gz |
|---|---|
| Size | 15.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b8b3057d4fd92c2c40dd0f5b15e46a7b8e057efcdb30c26b7a91ac74ec7f313e
|
|
BLAKE2b-256 checksum How to use checksums |
6da0a604a3d4c7ad4201f30b9b7fdaa9ae40e0b6bd5f91e7e714bc51a09ec4f9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.0
|
Release files / voxsplit-0.1.0-py3-none-any.whl
| Download URL | voxsplit-0.1.0-py3-none-any.whl |
|---|---|
| Size | 14.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9a0f26f382ea99eff8cfdc1241085151d971099819ba18fd1fc9d9488cfb3241
|
|
BLAKE2b-256 checksum How to use checksums |
c416f479397ec21167f6151a38077109149f4a6577f4a8c218551ea8e1122ddb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.0
|