CLI audio source separation powered by Ultimate Vocal Remover โ separate vocals, instruments, drums from any audio
Project description
๐ง Separate vocals, instruments, drums, bass & more from any audio
Command-line audio source separation powered by UVR
๐จ๐ณ ไธญๆ | ๐ฌ๐ง English | ๐ณ Docker
โจ Features
๐ธ MDX-Net Runner
|
๐ฅ Demucs Runner
|
๐ค VR Runner
|
๐ Highlights
| Feature | Description |
|---|---|
| ๐ฏ GUI-Identical | Exactly replicates UVR GUI behavior |
| โก GPU Accelerated | NVIDIA CUDA & AMD DirectML support |
| ๐ง Zero Config | Auto-detect model parameters |
| ๐ฆ Batch Ready | Perfect for automation & pipelines |
| ๐๏ธ Bit Depth Control | 16/24/32-bit PCM, 32/64-bit float |
| ๐ฅ Auto Download | Official UVR model registry with auto-download |
| ๐ก๏ธ Robust Error Handling | GPU fallback, retry, fuzzy matching |
๐ Design Philosophy
![]()
This project is a headless automation layer for Ultimate Vocal Remover.
It does NOT reimplement any separation logic.
It EXACTLY REPLICATES UVR GUI behavior โ model loading, parameter fallback, and auto-detection.โ If a model works in UVR GUI, it works here โ no extra config needed.
๐ค Why uvr-headless-runner?
Built for maximum flexibility. Load any custom model without waiting for upstream updates.
๐จ Full Custom Model SupportDirectly load any |
๐ฅ๏ธ Headless & Remote ReadyBuilt for seamless integration into |
๐ฅ By Users, For UsersDesigned by audio enthusiasts who |
๐ Requirements
| Component | Requirement |
|---|---|
| Python | 3.9.x (3.10+ not fully tested) |
| GPU | NVIDIA CUDA or AMD DirectML (optional) |
| OS | Windows / Linux / macOS |
๐ง Installation
๐ฆ Option 1: Poetry (Recommended)
# Clone repository
git clone https://github.com/chyinan/uvr-headless-runner.git
cd uvr-headless-runner
# Install dependencies
poetry install
# GPU support (NVIDIA)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
# ONNX GPU (optional)
pip install onnxruntime-gpu
๐ฆ Option 2: pip + venv
# Clone repository
git clone https://github.com/chyinan/uvr-headless-runner.git
cd uvr-headless-runner
# Create virtual environment
python -m venv venv
source venv/bin/activate # Linux/macOS
# venv\Scripts\activate # Windows
# Install dependencies
pip install -r requirements.txt
# GPU support (NVIDIA)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
๐ด AMD GPU (DirectML)
# Install DirectML support
pip install torch-directml
# Use with --directml flag
python mdx_headless_runner.py -m model.ckpt -i song.wav -o output/ --directml
โ ๏ธ DirectML is experimental. NVIDIA CUDA recommended for best performance.
โ Verify Installation (Native Python Only)
python -c "import torch; print(f'PyTorch: {torch.__version__}'); print(f'CUDA: {torch.cuda.is_available()}')"
๐ก Skip this if using Docker - the container includes all dependencies.
๐ณ Option 3: Docker Hub (Recommended - No Build Required!)
Fastest way to get started - just pull and run!
# Pull pre-built image from Docker Hub
docker pull chyinan/uvr-headless-runner:latest
# Run directly (GPU mode)
docker run --rm --gpus all \
-v ~/.uvr_models:/models \
-v $(pwd):/data \
chyinan/uvr-headless-runner:latest \
uvr-mdx -m "UVR-MDX-NET Inst HQ 3" -i /data/song.wav -o /data/output/
# Run directly (CPU mode)
docker run --rm \
-v ~/.uvr_models:/models \
-v $(pwd):/data \
chyinan/uvr-headless-runner:latest \
uvr-mdx -m "UVR-MDX-NET Inst HQ 3" -i /data/song.wav -o /data/output/ --cpu
Or install CLI wrappers for native experience:
# One-click install (auto-detects GPU)
./docker/install.sh # Linux/macOS
.\docker\install.ps1 # Windows
# Then use like native commands
uvr-mdx -m "UVR-MDX-NET Inst HQ 3" -i song.wav -o output/
uvr-demucs -m htdemucs -i song.wav -o output/
uvr-vr -m "UVR-De-Echo-Normal" -i song.wav -o output/
๐ผ Quick Start
MDX-Net / Roformer / SCNet
# Basic separation
python mdx_headless_runner.py -m "model.ckpt" -i "song.flac" -o "output/" --gpu
# Vocals only (24-bit)
python mdx_headless_runner.py -m "model.ckpt" -i "song.flac" -o "output/" --gpu --vocals-only --wav-type PCM_24
Demucs
# All 4 stems
python demucs_headless_runner.py --model htdemucs --input "song.flac" --output "output/" --gpu
# Vocals only
python demucs_headless_runner.py --model htdemucs --input "song.flac" --output "output/" --gpu --stem Vocals --primary-only
VR Architecture
# Basic separation (model in database)
python vr_headless_runner.py -m "model.pth" -i "song.flac" -o "output/" --gpu
# Custom model (not in database)
python vr_headless_runner.py -m "model.pth" -i "song.flac" -o "output/" --gpu \
--param 4band_v3 --primary-stem Vocals
๐ฅ Model Download Center
All runners now include automatic model downloading from official UVR sources - just like the GUI!
List Available Models
# List all MDX-Net models
python mdx_headless_runner.py --list
# List only installed models
python mdx_headless_runner.py --list-installed
# List models not yet downloaded
python mdx_headless_runner.py --list-uninstalled
# Same for Demucs and VR
python demucs_headless_runner.py --list
python vr_headless_runner.py --list
Download Models
# Download a specific model (without running inference)
python mdx_headless_runner.py --download "UVR-MDX-NET Inst HQ 3"
python demucs_headless_runner.py --download "htdemucs_ft"
python vr_headless_runner.py --download "UVR-De-Echo-Normal by FoxJoy"
Auto-Download on Inference
# Just use the model name - it will download automatically if not installed!
python mdx_headless_runner.py -m "UVR-MDX-NET Inst HQ 3" -i "song.flac" -o "output/" --gpu
# Demucs models auto-download too
python demucs_headless_runner.py --model htdemucs_ft --input "song.flac" --output "output/" --gpu
Model Info & Fuzzy Matching
# Get detailed info about a model
python mdx_headless_runner.py --model-info "UVR-MDX-NET Inst HQ 3"
# Typo? Get suggestions!
python mdx_headless_runner.py --model-info "UVR-MDX Inst HQ"
# Output: Did you mean: UVR-MDX-NET Inst HQ 1, UVR-MDX-NET Inst HQ 2, ...
Features
| Feature | Description |
|---|---|
| ๐ Official Registry | Syncs with UVR's official model list |
| ๐ Resume Downloads | Interrupted downloads can be resumed |
| โฑ๏ธ Retry with Backoff | Automatic retry on network errors |
| ๐พ Disk Space Check | Pre-checks available space before download |
| ๐ Fuzzy Matching | Suggests similar model names on typos |
| โ Integrity Check | Validates downloaded files |
๐ก๏ธ Error Handling & GPU Fallback
All runners include robust error handling with automatic GPU-to-CPU fallback:
# If GPU runs out of memory, automatically falls back to CPU
python mdx_headless_runner.py -m "model.ckpt" -i "song.flac" -o "output/" --gpu
# Output on GPU error:
# ============================================================
# ERROR: GPU memory exhausted
# ============================================================
# Suggestion: Try: (1) Use --cpu flag, (2) Reduce --batch-size...
#
# Attempting to fall back to CPU mode...
Error Messages
Errors now include clear explanations and suggestions:
| Before | After |
|---|---|
FileNotFoundError |
Audio file not found: song.wav |
CUDA out of memory |
GPU memory exhausted. Try: --cpu or reduce --batch-size |
Model not found |
Model 'xyz' not found. Did you mean: UVR-MDX-NET...? |
๐ CLI Progress Display
All runners feature a professional CLI progress system with real-time feedback:
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ UVR Audio Separation โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Model โ UVR-MDX-NET Inst HQ 3 โ
โ Input โ song.flac โ
โ Output โ ./output/ โ
โ Device โ CUDA:0 โ
โ Architecture โ MDX-Net โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โ น Downloading model: UVR-MDX-NET Inst HQ 3
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 100% โข 245.3 MB โข 12.5 MB/s โข 0:00:00
โ Model downloaded
โ น Running inference
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 42% โข 0:01:23 โข 0:01:52
โ Inference complete
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โ Processing completed in 3:15 โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
Output files:
โข output/song_(Vocals).wav
โข output/song_(Instrumental).wav
Features
| Feature | Description |
|---|---|
| ๐ฅ Download Progress | Real-time speed, ETA, and transfer stats for model downloads |
| ๐ฏ Inference Progress | Chunk-based progress tracking during audio processing |
| โฑ๏ธ Time Estimates | Elapsed time and remaining time (ETA) display |
| ๐จ Rich Output | Beautiful terminal UI with rich library |
| ๐ณ Docker Compatible | Works seamlessly inside containers |
| ๐ Graceful Fallback | Falls back to basic output if rich unavailable |
Progress Library Support
The system automatically selects the best available library:
rich(preferred) - Full-featured progress bars with colorstqdm(fallback) - Standard progress bars- Basic (no deps) - Simple text-based progress
Install rich for the best experience:
pip install rich
Quiet Mode
Disable progress output for scripting:
python mdx_headless_runner.py -m model.ckpt -i song.wav -o output/ --quiet
๐๏ธ MDX-Net Runner
Command Line Arguments
| Argument | Short | Default | Description |
|---|---|---|---|
--model |
-m |
Required | Model file path (.ckpt/.onnx) |
--input |
-i |
Required | Input audio file |
--output |
-o |
Required | Output directory |
--gpu |
Auto | Use NVIDIA CUDA | |
--directml |
Use AMD DirectML | ||
--overlap |
0.25 |
MDX overlap (0.25-0.99) | |
--overlap-mdxc |
2 |
MDX-C/Roformer overlap (2-50) | |
--wav-type |
PCM_24 |
Output: PCM_16/24/32, FLOAT, DOUBLE | |
--vocals-only |
Output vocals only | ||
--instrumental-only |
Output instrumental only |
๐ All Arguments
| Argument | Description |
|---|---|
--name -n |
Output filename base |
--json |
Model JSON config |
--cpu |
Force CPU |
--device -d |
GPU device ID |
--segment-size |
Segment size (default: 256) |
--batch-size |
Batch size (default: 1) |
--primary-only |
Save primary stem only |
--secondary-only |
Save secondary stem only |
--stem |
MDX-C stem select |
--quiet -q |
Quiet mode |
Examples
# Roformer with custom overlap
python mdx_headless_runner.py \
-m "MDX23C-8KFFT-InstVoc_HQ.ckpt" \
-i "song.flac" -o "output/" \
--gpu --overlap-mdxc 8
# 32-bit float output
python mdx_headless_runner.py \
-m "model.ckpt" -i "song.flac" -o "output/" \
--gpu --wav-type FLOAT
๐ฅ Demucs Runner
Supported Models
| Model | Version | Stems | Quality |
|---|---|---|---|
htdemucs |
v4 | 4 | โญโญโญ |
htdemucs_ft |
v4 | 4 | โญโญโญโญ Fine-tuned |
htdemucs_6s |
v4 | 6 | โญโญโญโญ +Guitar/Piano |
hdemucs_mmi |
v4 | 4 | โญโญโญ |
mdx_extra_q |
v3 | 4 | โญโญโญ |
Command Line Arguments
| Argument | Short | Default | Description |
|---|---|---|---|
--model |
-m |
Required | Model name or path |
--input |
-i |
Required | Input audio file |
--output |
-o |
Required | Output directory |
--gpu |
Auto | Use NVIDIA CUDA | |
--segment |
Default | Segment size (1-100+) | |
--shifts |
2 |
Time shifts | |
--stem |
Vocals/Drums/Bass/Other/Guitar/Piano | ||
--wav-type |
PCM_24 |
Output bit depth | |
--primary-only |
Output primary stem only |
Stem Selection
| GUI Action | CLI Command |
|---|---|
| All Stems | (no --stem) |
| Vocals only | --stem Vocals --primary-only |
| Instrumental only | --stem Vocals --secondary-only |
Examples
# 6-stem separation
python demucs_headless_runner.py \
--model htdemucs_6s \
--input "song.flac" --output "output/" \
--gpu
# High quality with custom segment
python demucs_headless_runner.py \
--model htdemucs_ft \
--input "song.flac" --output "output/" \
--gpu --segment 85
๐ค VR Architecture Runner
Command Line Arguments
| Argument | Short | Default | Description |
|---|---|---|---|
--model |
-m |
Required | Model file path (.pth) |
--input |
-i |
Required | Input audio file |
--output |
-o |
Required | Output directory |
--gpu |
Auto | Use NVIDIA CUDA | |
--directml |
Use AMD DirectML | ||
--window-size |
512 |
Window size (320/512/1024) | |
--aggression |
5 |
Aggression setting (0-50+) | |
--wav-type |
PCM_16 |
Output: PCM_16/24/32, FLOAT, DOUBLE | |
--primary-only |
Output primary stem only | ||
--secondary-only |
Output secondary stem only |
๐ All Arguments
| Argument | Description |
|---|---|
--name -n |
Output filename base |
--param |
Model param name (e.g., 4band_v3) |
--primary-stem |
Primary stem name (Vocals/Instrumental) |
--nout |
VR 5.1 nout parameter |
--nout-lstm |
VR 5.1 nout_lstm parameter |
--cpu |
Force CPU |
--device -d |
GPU device ID |
--batch-size |
Batch size (default: 1) |
--tta |
Enable Test-Time Augmentation |
--post-process |
Enable post-processing |
--post-process-threshold |
Post-process threshold (default: 0.2) |
--high-end-process |
Enable high-end mirroring |
--list-params |
List available model params |
Model Parameters
When the model hash is not found in the database, you need to provide parameters manually:
# List available params
python vr_headless_runner.py --list-params
# Use custom params
python vr_headless_runner.py -m "model.pth" -i "song.flac" -o "output/" \
--param 4band_v3 --primary-stem Vocals
# VR 5.1 model with nout/nout_lstm
python vr_headless_runner.py -m "model.pth" -i "song.flac" -o "output/" \
--param 4band_v3 --primary-stem Vocals --nout 48 --nout-lstm 128
Examples
# High quality with TTA
python vr_headless_runner.py \
-m "UVR-MDX-NET-Voc_FT.pth" \
-i "song.flac" -o "output/" \
--gpu --tta --window-size 1024
# Aggressive separation
python vr_headless_runner.py \
-m "model.pth" -i "song.flac" -o "output/" \
--gpu --aggression 15 --post-process
# 24-bit output
python vr_headless_runner.py \
-m "model.pth" -i "song.flac" -o "output/" \
--gpu --wav-type PCM_24
๐ Output Structure
output/
โโโ song_(Vocals).wav # Vocals
โโโ song_(Instrumental).wav # Instrumental (MDX)
โโโ song_(Drums).wav # Drums (Demucs)
โโโ song_(Bass).wav # Bass (Demucs)
โโโ song_(Other).wav # Other (Demucs)
โโโ song_(Guitar).wav # Guitar (6-stem)
โโโ song_(Piano).wav # Piano (6-stem)
๐ Python API
from mdx_headless_runner import run_mdx_headless
from demucs_headless_runner import run_demucs_headless
from vr_headless_runner import run_vr_headless
# MDX separation
run_mdx_headless(
model_path='model.ckpt',
audio_file='song.wav',
export_path='output',
use_gpu=True,
verbose=True # Print progress
)
# Output: output/song_(Vocals).wav, output/song_(Instrumental).wav
# Demucs separation (vocals only)
run_demucs_headless(
model_path='htdemucs',
audio_file='song.wav',
export_path='output',
use_gpu=True,
demucs_stems='Vocals', # or 'All Stems' for all
primary_only=True,
verbose=True
)
# Output: output/song_(Vocals).wav
# VR Architecture separation
run_vr_headless(
model_path='model.pth',
audio_file='song.wav',
export_path='output',
use_gpu=True,
window_size=512,
aggression_setting=5,
is_tta=False,
# For unknown models, provide params manually:
# user_vr_model_param='4band_v3',
# user_primary_stem='Vocals'
)
# Output: output/song_(Vocals).wav, output/song_(Instrumental).wav
๐ก Note: Functions process audio and save to
export_path. Check output directory for results.
๐ Troubleshooting
โ GPU not detected
# Check CUDA
python -c "import torch; print(torch.cuda.is_available())"
# Reinstall PyTorch with CUDA
pip uninstall torch torchvision torchaudio
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
โ Model not found
Option 1: Use automatic download (recommended)
# List available models
python mdx_headless_runner.py --list
# Download the model
python mdx_headless_runner.py --download "UVR-MDX-NET Inst HQ 3"
# Or just use it - auto-downloads!
python mdx_headless_runner.py -m "UVR-MDX-NET Inst HQ 3" -i song.wav -o output/
Option 2: Manual download
Default locations:
- MDX:
./models/MDX_Net_Models/ - Demucs:
./models/Demucs_Models/v3_v4_repo/ - VR:
./models/VR_Models/
โ Network/Download errors
# Force refresh model registry
python model_downloader.py --sync
# Check network connectivity
python -c "import urllib.request; urllib.request.urlopen('https://github.com')"
The downloader includes:
- Automatic retry (3 attempts with exponential backoff)
- Resume interrupted downloads
- Fallback to cached registry
โ VR model hash not found
If your VR model isn't in the database, provide parameters manually:
# List available params
python vr_headless_runner.py --list-params
# Specify param and primary stem
python vr_headless_runner.py -m "model.pth" -i "song.wav" -o "output/" \
--param 4band_v3 --primary-stem Vocals
Common params: 4band_v3, 4band_v2, 1band_sr44100_hl512, 3band_44100
โ Poor output quality
- Try increasing
--overlapor--overlap-mdxc - For Demucs, increase
--segment(e.g., 85) - Ensure correct model config with
--json
๐ Acknowledgments
|
Anjok07 & aufr33 |
Facebook Research |
Woosung Choi |
tsurumeso |
Special thanks to ZFTurbo for MDX23C & SCNet.
๐ License
MIT License
Copyright (c) 2022 Anjok07 (Ultimate Vocal Remover)
Copyright (c) 2026 UVR Headless Runner Contributors
Contributing & Support
Pull Requests and Issues are welcome! Whether it's bug reports, feature suggestions, or code contributions, we greatly appreciate them all.
If you find this project helpful, please give us a Star โญ - it's the best support for us!
Made with โค๏ธ for the audio separation community
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file uvr_headless_runner-1.1.0.tar.gz.
File metadata
- Download URL: uvr_headless_runner-1.1.0.tar.gz
- Upload date:
- Size: 1.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
624a226d694854ea34fab1dd72233089e40c6c0795a0d1feb73df9d48f5adccc
|
|
| MD5 |
a698761607c6e5bb328cfda18c42861a
|
|
| BLAKE2b-256 |
0ae68f2006015ed12b6199b2b851d38ddbdf284a227ac9afeae98e8e377993fb
|
File details
Details for the file uvr_headless_runner-1.1.0-py3-none-any.whl.
File metadata
- Download URL: uvr_headless_runner-1.1.0-py3-none-any.whl
- Upload date:
- Size: 2.0 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d5bc99e3800c8c5022a5e689a282a5e57e7ffb1b48db35ed47559841403575a
|
|
| MD5 |
bb25d74216a0332f75f758cef653e5b7
|
|
| BLAKE2b-256 |
23c6abae802697471c19ef39c6ad95f63a166c054353ac8d9ec373124b6c5dfa
|