Nodes/Comfy-MSS/VR Separate
ComfyUI Node

VR Separate

The 2019 UVR models, still unbeatable at de-echo and denoise

By pymss-project·Created 4 months ago·Updated a day ago· 22
VR Separate
  • audio
  • params
  • stem_1 (Audio)
  • stem_1 (String)
  • stem_2 (Audio)
  • stem_2 (String)
model_name
deviceauto
download_missingtrue
sourcemodelscope
device_ids0
debugfalse

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 ComfyUI AUDIO stream.
  • model_name - the 29 VR models. Category tags include legacy_vr/vr_deecho, vr_denoise, vr_backing_vocal, so the menu is at least self-describing.
  • device - auto, cpu, cuda, mps, mlx. auto prefers CUDA, and MLX on Apple Silicon.
  • download_missing (default true) and source (modelscope, huggingface, hf-mirror) - same download behaviour as the MSS nodes, and yes, VR .pth files are much smaller than roformer checkpoints.
  • params (optional) - where VR Params goes. You actually want this node: aggression and window_size are 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 .pth from 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 on high_end_process in VR Params if 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 Separate and 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.
Categoryaudio/pymss

Inputs (8)

NameTypeDefaultDescription
audioAUDIO
model_nameCOMBO58 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
deviceCOMBOauto5 options: auto, cpu, cuda, mps, mlx
download_missingBOOLEANtrue
sourceCOMBOmodelscope3 options: modelscope, huggingface, hf-mirror
paramsoptPYMSS_VR_PARAMS
device_idsoptSTRING0
debugoptBOOLEANfalse

Outputs (4)

NameTypeDescription
stem_1 (Audio)AUDIO
stem_1 (String)STRING
stem_2 (Audio)AUDIO
stem_2 (String)STRING