Nodes/ComfyUI_Seed-VC/Seed Voice Conversion
ComfyUI Node

Seed Voice Conversion

Voice swap in ComfyUI without training a thing — the Seed-VC node

By billwuhao·Created about a year ago·Updated about a year ago· 67
Seed Voice Conversion
  • source_audio
  • ref_audio
  • audio
steps30
speed1.0
inference_cfg_rate0.7
f0_conditionfalse
auto_f0_adjusttrue
pitch_shift0
unload_modeltrue

The one-sentence pitch: drop in a clip of you talking or singing, drop in a five-second clip of someone else speaking, and get back the first clip performed in the second person's voice - same words, same rhythm, no training. That's Seed-VC, Plachta's voice conversion model (yes, the GPT-SoVITS person), and SeedVCRun is the single-node ComfyUI wrapper for it. It's from billwuhao, the same author behind the ComfyUI_DiffRhythm and ComfyUI_AudioTools packs, so it sits in the 🎤MW/MW-Seed-VC menu section alongside his other audio stuff.

This is not text-to-speech, and it's worth being clear on the difference, because it changes which node you reach for. Kokoro, Chatterbox, and F5-TTS (the ones the KB covers) generate speech from text. Seed-VC converts existing audio from one voice to another. If you want a character voice for a generated video, you still need a TTS node to make the line first. If you want to re-voice a recording - an AI cover, a dub, a skit where "you" are now someone else - this is the tool. The community shorthand for it is "singing voice replacement from one-shot samples," which is the one job RVC also does but only after you train a model per voice. No training here.

How it actually works

The wrapper bundles the whole Plachtaa/seed-vc stack, so the pipeline is real and it's a chunky one:

  1. A Whisper encoder pulls out the content features of your source audio (what's being said), resampled to 16kHz.
  2. CAMPPlus extracts a speaker embedding from the reference clip - the timbre/style vector that is "the voice."
  3. A DiT with conditional flow matching (a diffusion transformer, the same CFM family as F5-TTS) generates a mel spectrogram conditioned on that content + speaker embedding.
  4. BigVGAN renders the mel back into a waveform.

There are two model paths under the hood. The default 22.05kHz one (whisper-small + wavenet DiT) handles speech. Flipping f0_condition on swaps in a second, 44.1kHz whisper-base DiT plus RMVPE pitch extraction for singing - that's why the author's tooltip on the toggle just says "must set to true for singing voice conversion." Long audio is processed in overlapping chunks with crossfades rather than in one shot, so it won't choke on a full song.

The inputs that matter

  • source_audio / ref_audio - both plain AUDIO inputs, so feed them from ComfyUI's LoadAudio node. Reference gets truncated to 25 seconds, which is plenty.
  • f0_condition - tick it for singing, leave it off for speech. The single most important toggle.
  • auto_f0_adjust - on by default, and it snaps the converted singer's pitch level to the reference's median. Leave it on for a cover in the target's key; turn it off if you want to keep the original singer's pitch.
  • pitch_shift - semitones, −24 to +24, for nudging the result when the key's still off.
  • steps (30 default), inference_cfg_rate (0.7), speed (0.5–2.0×) - diffusion steps, CFG, and tempo. Defaults are sane; drop steps toward 10 for quick previews.

One output: audio (AUDIO), straight into SaveAudioMP3 or SaveAudio.

Installing - and the gotcha

Via ComfyUI Manager, search ComfyUI_Seed-VC, or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/billwuhao/ComfyUI_Seed-VC.git
cd ComfyUI_Seed-VC
# use python_embeded on the portable build:
./python_embeded/python.exe -m pip install -r requirements.txt

Here's the part people get burned on: none of the models are auto-downloaded. This pack assumes you're used to ComfyUI auto-fetching weights, and it doesn't. You must manually grab four files into ComfyUI/models/TTS/Seed-VC/ - the two DiT checkpoints (...whisper_small_wavenet...pth and ...whisper_base_f0_44k...pth), campplus_cn_common.bin, and rmvpe.pt - plus three whole folders under ComfyUI/models/TTS/: bigvgan_v2_22khz_80band_256x, bigvgan_v2_44khz_128band_512x, and the full whisper-small directory (all its config.json / tokenizer.json files, not just model.safetensors). Every link is in the README. If the node loads but instantly errors, it's almost always a missing or mistyped model path here.

Troubleshooting

  • First run is slow. SeedVCRun loads two DiT checkpoints, Whisper, both BigVGANs, CAMPPlus and RMVPE on init. That's several GB of weights warming up, so don't panic at the pause.
  • unload_model defaults to true, which frees the VRAM after every run - but it also means every run re-loads everything. Set it false when you're iterating on the same session and want speed; keep it true when you're on a tight card.
  • Requirements friction. torch, torchaudio, and transformers aren't in the pack's requirements.txt - it assumes ComfyUI's own environment provides them. Always install with ComfyUI's Python (the python_embeded line above), not your system Python.
  • Singing sounds wrong - you forgot f0_condition. It's the toggle, not you.
Category🎤MW/MW-Seed-VC

Inputs (9)

NameTypeDefaultDescription
source_audioAUDIO
ref_audioAUDIO
stepsINT301–200
speedFLOAT1.00.5–2
inference_cfg_rateFLOAT0.70–1
f0_conditionBOOLEANfalseMust set to true for singing voice conversion / 歌声转换时必须勾选
auto_f0_adjustBOOLEANtrue
pitch_shiftINT0-24–24
unload_modelBOOLEANtrue

Outputs (1)

NameTypeDescription
audioAUDIO