VR Separate
The 2019 UVR models, still unbeatable at de-echo and denoise
- audio
- params
- stem_1 (Audio)
- stem_1 (String)
- stem_2 (Audio)
- stem_2 (String)
What it does, and when to reach for it
VR Separate runs the old branch of the source-separation world: VR/UVR .pth weights, the architecture behind the classic Ultimate Vocal Remover models. 29 of them here, listed twice (English and Chinese category tags) for 58 menu entries.
Here's the honest framing, because it saves people a wasted afternoon: if you want vocals out of a song, don't start here. A modern mel-band roformer will beat a VR model at that job every time, and this pack ships MSS Separate with the whole roformer catalogue for exactly that. VR models are older, blunter frequency-mask networks.
What they're still genuinely good at is cleanup. De-echo, de-reverb, denoise, hum removal, and the strange and beloved MGM high/low-end models - MGM_MAIN_v4, MGM_HIGHEND_v4, MGM_LOWEND_A_v4 - plus Harmonic_Noise_Separation_yxlllc. Those live in the VR family and have no roformer equivalent. If your input is a phone recording, an archival transfer, or a live recording with a room in it, this is the node. Same for the classic speech-use case of pulling a voice out of a noisy track - the thing people kept asking stem-separation tools for and never quite getting.
Inputs
Straight from the node's schema:
audio- one ComfyUIAUDIOstream.model_name- the 29 VR models. Category tags includelegacy_vr/vr_deecho,vr_denoise,vr_backing_vocal, so the menu is at least self-describing.device-auto,cpu,cuda,mps,mlx.autoprefers CUDA, and MLX on Apple Silicon.download_missing(defaulttrue) andsource(modelscope,huggingface,hf-mirror) - same download behaviour as the MSS nodes, and yes, VR.pthfiles are much smaller than roformer checkpoints.params(optional) - whereVR Paramsgoes. You actually want this node:aggressionandwindow_sizeare the two knobs that decide how much VR removes and how ugly it sounds doing it.device_ids- string,"0"by default, comma-separate for several GPUs.debug- console timing output.
Outputs: exactly two pairs - stem_1 (Audio)/stem_1 (String) and stem_2 (Audio)/stem_2 (String). The names come from pymss's built-in VR model table: Vocals/Instrumental, or for the de-echo models something like No Echo/Echo. The String outputs are those names; wire them into your filename logic.
How it works
Underneath, MSSeparator.from_model_name(...) loads the .pth and its metadata, the waveform goes through the VR inference path in windowed FFT chunks, and the resulting mask is applied back to the original spectrum. The node converts the result to ComfyUI's [batch, channels, samples] layout and tags each stem with its source path and stem name. Progress goes to ComfyUI's own progress bar. Two VR parameters are pinned in code rather than exposed: batch_size defaults to 1 here (the pymss benchmarks used 2, so there's free speed if you raise it), and half precision (use_amp) is always on.
Speed: pymss measures VR models between roughly 90× and 244× realtime on a 5090 - a one-hour recording in 15 to 40 seconds. The models are tiny. This is the cheap node in the pack.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/pymss-project/comfy-mss
python -m pip install pymss # into ComfyUI's Python env
Or ComfyUI Manager → search Comfy-MSS. Models go to ComfyUI/models/pymss (override with COMFY_MSS_MODEL_DIR or PYMSS_MODEL_DIR, or add a pymss group to extra_model_paths.yaml). Restart ComfyUI after installing; the pack registers the model folder on load.
Troubleshooting
- "Nothing happens" on first run - it's downloading the
.pthfrom ModelScope. The not-yet-downloaded models are greyed out in the menu, which is the quickest way to tell. - Harsh, metallic vocals. VR is aggressive by nature. Drop
aggression(default 5) toward 1–3, and turn onhigh_end_processinVR Paramsif the top end sounds like it's been shaved off. - Wrong tool for the job. If you're splitting a full song into stems, stop; go use
MSS Separateand a roformer. Come back here for de-echo, de-reverb and denoise. - v1.0.x workflows fail to load - node types were renamed in v1.1.0. Rebuild.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| model_name | COMBO | 58 options: [legacy_vr/vr_backing_vocal] UVR-BVE-4B_SN-44100-1.pth, [传统 VR 模型/VR 伴唱/和声] UVR-BVE-4B_SN-44100-1.pth, [legacy_vr/vr_deecho] UVR-De-Echo-Aggressive.pth, [传统 VR 模型/VR 去回声] UVR-De-Echo-Aggressive.pth, [legacy_vr/vr_deecho] UVR-De-Echo-Normal.pth, [传统 VR 模型/VR 去回声] UVR-De-Echo-Normal.pth, +52 | |
| device | COMBO | auto | 5 options: auto, cpu, cuda, mps, mlx |
| download_missing | BOOLEAN | true | — |
| source | COMBO | modelscope | 3 options: modelscope, huggingface, hf-mirror |
| paramsopt | PYMSS_VR_PARAMS | — | |
| device_idsopt | STRING | 0 | — |
| debugopt | BOOLEAN | false | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| stem_1 (Audio) | AUDIO | — |
| stem_1 (String) | STRING | — |
| stem_2 (Audio) | AUDIO | — |
| stem_2 (String) | STRING | — |