ZONOS2 Voice Clone
Clone a voice from a clip — no transcript, no training, no API
- zonos2_model
- reference_audio
- audio
This is the node that makes the pack worth installing. You give ZONOS2 Voice Clone a few seconds of someone talking and some text, and it synthesizes that text in their voice - audio-only zero-shot cloning, no reference transcript, no training run, no API call. Everything stays on your GPU.
It works the way IP-Adapter works for faces: the model doesn't look at the reference waveform at all. Instead a speaker encoder (an ECAPA-TDNN model) squeezes your reference clip into a single 2048-dimensional speaker embedding, and ZONOS2 conditions its generation on that fixed vector. Identity transfers, and because the embedding is a fixed point rather than a growing context, cloning is cheap and fast. The flip side, and the README is refreshingly honest about this: accent, cadence, emotion, and other utterance-level prosody don't reliably survive the trip. You get the voice, not necessarily the performance.
Wiring it up
The node takes three required inputs on top of the model:
zonos2_model- from the ZONOS2 Model Loader.text- what the cloned voice says.reference_audio- a native ComfyUIAUDIOnoodle. Feed it from a Load Audio node (the pack's example workflow usesLoadAudio). Best results need 5–30 seconds of clear, single-speaker speech; anything past 60 seconds gets clipped with a warning in the CLI, and very short clips get a recommendation warning too.
Two toggles genuinely change behavior:
clean_speaker_background(defaultfalse) - the official clean/noisy recording flag. Leave it off for ordinary recordings; it's not a denoiser, it describes the source. Enable it only for genuinely studio-clean speech.accurate_mode(defaulttrue) - requests stricter adherence to the embedding, improving identity match at the cost of expressiveness. Turn it off for looser, more expressive delivery. It is not an accent-strength slider.
Below those sit the same sampling controls as the generation node (max_new_tokens, temperature, top_k, top_p, min_p, repetition settings, seed) and the same quality-conditioning buckets. temperature 0.8–1.0 plus a fixed seed is the "make it stop wiggling" combo.
The output is audio - mono, 44.1 kHz, native AUDIO - which wires into Save Audio/SaveAudioMP3 or downstream audio nodes. The speaker encoder is loaded lazily, so the first clone run will take a moment longer than plain generation.
Installing
Same pack as the other two nodes. ComfyUI Manager → ZONOS2 TTS, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Saganaki22/Zonos2_TTS-ComfyUI.git
../venv/bin/python Zonos2_TTS-ComfyUI/install.py
Restart. Needs Transformers 5.0–5.12 (4.x won't work), and the loader handles the model downloads. Also: read the model's acceptable-use policy once before you build anything. Cloning a voice you don't have permission to use is the one line this project draws hard.
Troubleshooting
- Clone sounds weak or wrong → it's usually the reference. Get 5–30 seconds of clean single-speaker speech with minimal silence, set
clean_speaker_backgroundto match the actual recording (not on by reflex), and keepaccurate_modeon. - Voice matches but the accent doesn't → model limitation, not a bug. The embedding is built for identity and discards prosody. Use a reference that clearly demonstrates the accent (ideally in the target language), compare a few fixed seeds, and know that
accurate_modeand temperature can't conjure accent info the embedding never carried. - CLI warning about a long reference → expected; it clips to the first 60 seconds.
- CUDA OOM → the FP8 preset from the loader, unload other models, lower
max_new_tokens.
For getting one specific person's voice out of a short clip, this is currently the most direct path ComfyUI has - just manage your expectations on how they sound, not whose voice it is.
Inputs (21)
| Name | Type | Default | Description |
|---|---|---|---|
| zonos2_model | ZONOS2_MODEL | Connect the zonos2_model output from ZONOS2 Model Loader. | |
| text | STRING | Hello! This is ZONOS2 running natively inside ComfyUI. | UTF-8 text to synthesize. |
| reference_audio | AUDIO | Reference voice AUDIO noodle. 5-30 seconds of clear, single-speaker speech is recommended. Use a sample that clearly demonstrates the accent you want, with little silence, music, or reverb. Audio longer than 60 seconds is clipped to the first 60 seconds with a CLI warning. | |
| clean_speaker_background | BOOLEAN | false | Official ZONOS2 clean/noisy conditioning flag. Leave disabled for ordinary recordings or any audible room tone, noise, reverb, or ambience. Enable only for genuinely clean studio-like speech. |
| accurate_mode | BOOLEAN | true | Enable the official ZONOS2 accurate-cloning token for stricter speaker-embedding adherence. It can improve identity matching, but it does not guarantee transfer of accent, cadence, emotion, or other prosody. Disable for looser, potentially more expressive conditioning. |
| max_new_tokens | INT | 102432–6000 | Maximum DAC-code frames the model may generate. More frames allow longer speech but increase generation time and KV-cache memory. Generation can stop earlier when ZONOS2 emits end-of-audio. |
| temperature | FLOAT | 1.150–2 | Sampling randomness. Lower values are steadier; higher values add variation but can reduce clarity. 0 uses greedy sampling. The official ZONOS2 default is 1.15. |
| top_k | INT | 1060–1026 | Keep only the K most likely tokens in each audio codebook before sampling. 0 disables Top-K filtering. The official default is 106. |
| top_p | FLOAT | 0.000–1 | Keep the smallest token set whose combined probability reaches this value. 0 disables Top-P filtering. ZONOS2 normally uses Min-P instead. |
| min_p | FLOAT | 0.180–1 | Remove tokens whose probability is below this fraction of the most likely token. 0 disables Min-P. The official default is 0.18. |
| repetition_window | INT | 500–512 | Number of recent generated frames checked for repeated audio tokens. 0 disables repetition tracking. |
| repetition_penalty | FLOAT | 1.201–2 | Reduces the probability of recently generated tokens to discourage loops. 1.0 disables the penalty. The official default is 1.2. |
| repetition_codebooks | INT | 8-1–9 | Apply repetition penalty to this many codebooks starting from codebook 0. -1 applies it to all 9; 0 disables it for every codebook. The official default is 8. |
| speaking_rate | COMBO | default | Optional ZONOS2 speaking-rate conditioning in cleaned UTF-8 bytes per second. Lower ranges generally produce slower speech. Default leaves speaking rate unconditioned. |
| loudness_lufs | COMBO | default | Optional target integrated loudness in LUFS. More-negative ranges are quieter; less-negative ranges are louder. Default leaves loudness unconditioned. |
| estimated_snr | COMBO | default | Optional estimated signal-to-noise ratio in dB. Higher ranges bias toward cleaner audio; lower ranges can reproduce noisier recording characteristics. Default leaves SNR unconditioned. |
| maximum_pause | COMBO | default | Optional maximum internal pause duration in seconds. Lower ranges favor tighter delivery; higher ranges permit longer pauses. Default leaves maximum pause unconditioned. |
| estimated_bandlimit_hz | COMBO | default | Optional estimated recording bandlimit in Hz. Higher ranges bias toward wider-band, brighter audio; lower ranges can sound more bandwidth-limited. Default leaves bandlimit unconditioned. |
| leading_silence | COMBO | default | Optional amount of silence before speech begins. Default leaves leading silence unconditioned. |
| trailing_silence | COMBO | 3: 0.25-0.5 | Requested silence after speech ends. Bucket 3 (0.25-0.5 seconds) is the official ZONOS2 default. Select default to leave it unconditioned. |
| seed | INT | 00–9223372036854776000 | Sampling seed. A positive value makes generation repeatable for identical inputs and settings. 0 uses the current random state. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | Voice-cloned mono speech as native ComfyUI AUDIO at 44.1 kHz. |