FL CosyVoice3 Voice Conversion
Make Anyone Sound Like Anyone Else, Locally in ComfyUI
- model
- source_audio
- target_audio
- audio
This is the voice-changing node in the FL CosyVoice3 pack, and it's the one people misunderstand first. It is not text-to-speech. You give it a clip of someone already speaking plus a reference clip of a voice you want, and it re-voices the speech so it comes out in the target voice's timbre. Same words, same content, different person. That's the whole job, and it runs entirely on your machine - no API, no key, no cloud upload of your audio.
It sits alongside the pack's cloning nodes in the workflow. Where the zero-shot clone nodes synthesize new text in a cloned voice, Voice Conversion takes existing audio and transplants the voice. That makes it the natural fit for dubbing, ADR, changing a character's voice in an existing take, or fixing a clip where the original speaker is unavailable. If you've played with RVC voice-to-voice, this is the same idea but CosyVoice3's take on it, without needing to train a model on a dataset first.
How it works
Under the hood it calls CosyVoice's inference_vc, which is why the model has to support voice conversion - the CosyVoice3 and CosyVoice2 checkpoints do; the old CosyVoice-300M doesn't, and the pack's own README tells you to avoid that model anyway. Both audio inputs are resampled to the model's rate (24 kHz for v2/v3), run through conversion, and returned as a standard ComfyUI AUDIO object.
Two hard limits matter here. Source and target audio each must be 30 seconds or less - the node throws a specific error telling you to trim with the pack's FL Audio Crop node. And the target reference should be clean, isolated speech; the better the target sample, the better the timbre match. This is a timbre transplant, not a full impersonation - accent, pitch contours, and the energy of the original performance mostly survive, so garbage-in-garbage-out applies hard.
The inputs that matter
model- the COSYVOICE_MODEL output of the pack's Model Loader. Nothing works without it.source_audio- the clip whose content you're keeping.target_audio- the clip whose voice you want. The order is easy to flip by accident, and flipping it gives you nonsense, so check before you queue.speed- 0.5× to 2.0×, default 1.0. Leave it alone until the conversion itself sounds right.seed(optional) - default 42; set to-1for random. You'll only touch it if you're hunting for a particular take.
The single output is audio, which you wire into a preview/playback or save node. There's no text anywhere in this node - if you want to change what's said, that's the Zero-Shot or Instruct2 nodes.
Installing it
This node ships in the FL CosyVoice3 pack, so you install the whole pack once:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_FL-CosyVoice3.git
cd ComfyUI_FL-CosyVoice3
pip install -r requirements.txt
ComfyUI Manager works too - search "FL CosyVoice3" and install from there. Then restart ComfyUI. Two things will cost you time: the requirements list is heavy (transformers, onnxruntime, openai-whisper, librosa, modelscope...), and the actual model - around 2GB for the recommended Fun-CosyVoice3-0.5B - downloads automatically on first load into ComfyUI/models/cosyvoice/. The pack vendors its own copy of the CosyVoice codebase, so no separate install needed.
Common gotchas
- "Source audio is too long" - the 30s cap. Trim with Audio Crop; 3–10s of clean speech for the target reference gives the best results.
- First run is slow - the ~2GB model downloads before anything runs, which can look like a hang. Watch the console.
- The order of the two audio inputs - swap them and you get the target's words in the source's voice, which is rarely what you wanted.
- Low-quality target clip, low-quality output - noise, music, or reverb on the reference will bleed into the converted audio.
The pack is one of the few mainstream ways to get CosyVoice3 voice conversion in ComfyUI, and this node is the piece of it that does something none of the other nodes can. If you're doing any voice-to-voice work, it's the one you'll reach for.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COSYVOICE_MODEL | — | |
| source_audio | AUDIO | — | |
| target_audio | AUDIO | — | |
| speed | FLOAT | 1.000.5–2 | — |
| seedopt | INT | 42-1–2147483647 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |