ComfyUI Node

Chatterbox VC

Put a recording in someone else's voice — no text, no training

By sm079·Created about a year ago·Updated about a year ago· 1
Chatterbox VC
  • reference_voice
  • target_voice
  • AUDIO
device

The sibling node in the same pack, doing a genuinely different job. Where Chatterbox TTS turns text into speech, Chatterbox VC takes an existing recording and changes whose voice it sounds like - the words, pacing and prosody stay, the timbre becomes someone else's. Zero-shot, no fine-tuning, no training data, no text input at all. Its entire interface is two audio clips and a device dropdown.

What it's for

Voice conversion (VC) is the second half of the cloning story, and it's the part people forget exists until they need it. Jobs it actually handles well: dubbing a clip with a different voice, swapping a character's voice in a render, or taking bland generic TTS output and re-voicing it with a cloned reference. It's also the fastest way to demo voice cloning without typing a single sentence.

How it works

Same S3Gen vocoder as the TTS node, minus the text model - which is why it's the lighter half of the pack. First run pulls about a gigabyte (s3gen.pt plus the built-in conds.pt) instead of the TTS node's 2.1 GB. The source clip gets resampled to 16 kHz and encoded into speech tokens: that's the content, the words themselves. Your target clip gets embedded as the timbre condition. S3Gen then re-renders the source tokens through the target voice at 24 kHz. It's resynthesis, so you're hearing the vocoder's rendering of the result, not an untouched copy of either input - and the output is only as good as what the tokenizer heard in the source.

The naming trap (read this before wiring)

Two AUDIO inputs, and the names will trip you up: reference_voice is the clip whose speech gets converted - the words you're keeping - while target_voice is the voice you want them delivered in. In the code, reference_voice is passed as the content audio and target_voice becomes the synthesis conditioning. Most people wire it backwards the first time. If the result sounds like neither voice, swap the two.

That's the whole node: reference_voice, target_voice, device (cuda/cpu), and one AUDIO output. Send it to a core SaveAudio node, or keep it in the graph for dubbing or avatar workflows.

Installing it

Same pack as Chatterbox TTS - one install, both nodes. In ComfyUI Manager, search comfyui-chatterbox, or:

cd ComfyUI/custom_nodes
git clone https://github.com/sm079/comfyui-chatterbox

Restart ComfyUI. Dependencies (librosa, omegaconf, conformer, diffusers) install automatically, and the weights download to your Hugging Face cache on first run.

Gotchas

  • Your target clip is cut to its first ten seconds. The code takes DEC_COND_LEN - ten seconds of the target - as the entire timbre conditioning. Keep the target short and clean; anything past ten seconds is ignored.
  • Same per-run reload as the TTS node. from_pretrained runs on every execution, so each conversion pays a model load from disk.
  • Pinned to the base English checkpoint, exactly like its sibling - no Turbo or Multilingual wiring here.
  • CPU technically works, but a vocoder plus tokenizer on CPU is slow; use cuda.

The honest version

This is the obscure half of an already-obscure pack, and the naming is genuinely unhelpful. But if you want local, zero-shot voice conversion and can't be bothered with a bigger suite, there's not much else this lean. Two clips in, a converted clip out, no training loop.

Categoryaudio

Inputs (3)

NameTypeDefaultDescription
reference_voiceAUDIO
target_voiceAUDIO
deviceCOMBO2 options: cuda, cpu

Outputs (1)

NameTypeDescription
AUDIOAUDIO