Seed Voice Conversion
Voice swap in ComfyUI without training a thing — the Seed-VC node
- source_audio
- ref_audio
- audio
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:
- A Whisper encoder pulls out the content features of your source audio (what's being said), resampled to 16kHz.
- CAMPPlus extracts a speaker embedding from the reference clip - the timbre/style vector that is "the voice."
- 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.
- 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 plainAUDIOinputs, so feed them from ComfyUI'sLoadAudionode. 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; dropstepstoward 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.
SeedVCRunloads 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_modeldefaults 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, andtransformersaren't in the pack'srequirements.txt- it assumes ComfyUI's own environment provides them. Always install with ComfyUI's Python (thepython_embededline above), not your system Python. - Singing sounds wrong - you forgot
f0_condition. It's the toggle, not you.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| source_audio | AUDIO | — | |
| ref_audio | AUDIO | — | |
| steps | INT | 301–200 | — |
| speed | FLOAT | 1.00.5–2 | — |
| inference_cfg_rate | FLOAT | 0.70–1 | — |
| f0_condition | BOOLEAN | false | Must set to true for singing voice conversion / 歌声转换时必须勾选 |
| auto_f0_adjust | BOOLEAN | true | — |
| pitch_shift | INT | 0-24–24 | — |
| unload_model | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |