๐ Voice Changer
Turn one voice into another
- TTS_engine
- source_audio
- narrator_target
- converted_audio
- conversion_info
Text-to-speech makes a voice say new words. Voice conversion is different: it keeps the performance - the timing, the emotion, the exact delivery - and only swaps the identity. You record yourself saying a line with all the right feeling, run it through ๐ Voice Changer with a target voice, and out comes that same line in someone else's voice. This is the node for that, and it's the shared front-end for both RVC conversion and ChatterBox/CosyVoice-style VC.
Reach for it when TTS won't give you the delivery you want. Acting a line yourself and converting it is often faster and more expressive than fighting a TTS engine's prosody.
How it works
Voice Changer is a consumer node, like TTS Text - it doesn't hold a model itself. You give it a conversion engine, a source clip (the performance), and a target voice (the identity), and it does the swap. With RVC, the target is a trained .pth character model from ๐ญ Load RVC Character Model. With ChatterBox/CosyVoice VC, the target is a reference clip. The engine you plug in decides which path you're on.
The clever bit is iterative refinement. Each conversion pass nudges the output closer to the target voice, and the node caches every pass, so bouncing between 3, 5, and 4 passes is instant after the first run instead of recomputing from scratch.
The inputs and outputs that matter
- TTS_engine - the conversion engine. For RVC that's an โ๏ธ RVC Engine; for ChatterBox VC it's a ChatterBox engine set up for conversion. This is required and decides the whole behavior.
- source_audio - the voice you're converting from (your performance).
- narrator_target - the voice you're converting to. For RVC, connect the
rvc_modeloutput of ๐ญ Load RVC Character Model here; for other engines, a reference voice. - refinement_passes (1โ30, default 1) - how many conversion iterations. The README's honest advice: 1โ5 is the useful range, start at 1, then test 2โ5 to find the sweet spot. There's no universal best; more passes push similarity but can over-process. Because of caching, experimenting is cheap.
- max_chunk_duration (default 30s) and chunk_method (
smartorfixed) - how long clips get split for processing.smartsplits on natural pauses and is the better default; dropmax_chunk_durationif you hit memory limits on long audio.
Outputs: converted_audio (to Preview/Save Audio) and conversion_info (a text log).
Installing it
Part of TTS Audio Suite. Easiest: ComfyUI Manager โ search TTS Audio Suite โ install โ restart, which runs the pack's install.py and handles the dependency conflicts (NumPy, librosa, s3tokenizer) plus Python 3.13, including the RVC dependencies specifically. Manual: cd ComfyUI/custom_nodes && git clone https://github.com/diodiogod/TTS-Audio-Suite.git, then python install.py from inside the folder with your ComfyUI venv active - run the script, not just pip install -r requirements.txt, or RVC won't be wired up. Linux: sudo apt-get install portaudio19-dev libsamplerate0-dev first. The repo ships a "Unified ๐ Voice Changer - RVC X ChatterBox" example workflow; start from that.
Common issues
- Nothing to convert with. Voice Changer needs an engine on
TTS_engine. An โ๏ธ RVC Engine here plus a.pthtarget is the standard RVC setup; without the engine there's no conversion method. - Over-processed, robotic result. Too many
refinement_passes. Drop back toward 1โ3. More is not better past a point. - Pitch is wrong after an RVC convert. That's set on the โ๏ธ RVC Engine (
pitchin semitones), not here - a male-to-female or female-to-male swap usually needs ยฑ12. Fix it on the engine node. - Seams on long audio. Try
chunk_method: smartso splits land on pauses, and lowermax_chunk_duration. - Source performance leaks through. Voice conversion copies delivery faithfully, including mistakes and mouth noises. Clean the source first (๐ค Voice Fixer) and act it the way you want it to sound.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| TTS_engine | TTS_ENGINE | TTS/VC engine configuration. Supports ChatterBox TTS Engine, CosyVoice Engine, and RVC Engine for voice conversion. | |
| source_audio | * | The original voice audio you want to convert to sound like the target voice. Accepts AUDIO input or Character Voices node output. | |
| narrator_target | * | The reference voice audio whose characteristics will be applied to the source audio. Accepts AUDIO input or Character Voices node output. | |
| refinement_passes | INT | 11โ30 | Number of conversion iterations. Each pass refines the output to sound more like the target. Recommended: Max 5 passes - more can cause distortions. Each iteration is deterministic to reduce degradation. |
| max_chunk_duration | INT | 300โ300 | Maximum duration (in seconds) for each audio chunk. Prevents OOM on long audio. Set to 0 to disable chunking entirely. Chunks are rejoined with timing-preserving concatenation, so smart splitting is recommended for cleaner joins. |
| chunk_method | COMBO | smart | Chunk split method: 'smart' cuts near silence and is recommended for cleaner boundaries, while 'fixed' cuts at exact intervals and may make joins more audible. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| converted_audio | AUDIO | โ |
| conversion_info | STRING | โ |