Raon OpenTTS Generate (Voice Clone)
Clone a voice in ComfyUI with zero training and zero API keys
- raon_model
- ref_audio
- audio
Give this node a few seconds of somebody talking, plus a line of text, and it reads that text back in their voice. That's the whole trick. Raon OpenTTS Generate (Voice Clone) is the payoff node of the Raon-OpenTTS pack: KRAFTON's open-weight, zero-shot voice cloning, running natively inside ComfyUI with no API call, no key, no training run. If you've seen the F5-TTS-style flow-matching crowd, this is the same family - and the same disclaimer that comes with all of it: the weights are CC-BY-NC, so it's for personal and research use, not something you ship in a paid product.
How it works
Under the hood it's a conditional flow-matching (CFM) Diffusion Transformer - the same non-autoregressive lineage as F5-TTS - that generates mel spectrogram frames conditioned on your reference clip, then pushes them through a HiFi-GAN vocoder to turn them into actual 16 kHz audio. No autoregressive next-token loop, so it's fast, and no per-voice training: the reference clip is the conditioning.
A few official defaults are wired in and they're genuinely good, so you can leave them alone at first: 32 steps (NFE for the euler + EPSS ODE), CFG 2.0, sway sampling at -1.0, target RMS 0.1, and a 150 ms cross-fade between chunks. Long text gets split into chunks and generated one at a time, then cross-faded, with the chunk budget auto-estimated from your reference speaker's speech rate. Seed defaults to 42 (0 = random, and it increments per chunk so multi-chunk runs stay reproducible).
The inputs that actually matter
The two you can't skip are ref_audio and ref_text: the voice clip and its exact transcript. Clean speech with little background noise clones best, and the transcript matters more than people expect - this is where most "it sounds off" complaints come from. Feed ref_text from the Raon Whisper Transcribe node rather than typing it by hand; the generate node will outright refuse to run if it's empty.
text- what you want said. Long text is split automatically.ref_audio- the reference clip (AUDIO type, comes straight from a Load Audio node).ref_text- exact transcript of that clip.stepsandcfg_strength- 32 and 2.0 are the official defaults; drop steps if you want speed, raise CFG if the voice sounds flat.do_split/max_chars- leave split on;max_charsat 0 auto-sizes chunks from the speaker's speech rate. Set a positive value only if you want deterministic, speaker-independent chunking.
The output is a single audio (AUDIO) at 16 kHz, so it plugs straight into a save node or anything downstream that eats ComfyUI audio.
Installing it
ComfyUI Manager will find it if you search "ComfyUI-Raon-OpenTTS", or:
cd ComfyUI/custom_nodes
git clone https://github.com/Saganaki22/ComfyUI-Raon-OpenTTS
# then restart ComfyUI
It pulls in the usual TTS stack - torchdiffeq, transformers, accelerate, pydub, soundfile, plus jieba/pypinyin for the text pipeline and comfy-kitchen if you use the quantized build. On first run the loader downloads the model checkpoint (and the HiFi-GAN vocoder) from the drbaph/Raon-OpenTTS-comfyui Hugging Face repo into ComfyUI/models/raon_opentts - only the selected build, not the whole repo. The 1B INT8 build peaks around 1.7 GB VRAM during inference, which is the pleasant surprise of this pack: full voice cloning that doesn't fight your image workflow for the card.
Where people get burned
- Empty
ref_text. The node raises a clear error telling you to run Raon Whisper Transcribe first. It's not being fussy - the transcript is part of the conditioning. - 16 kHz English. The checkpoints are 16 kHz and English-first. Non-English text won't behave, and whatever you clone, the output won't be studio CD quality - it's a voice-over voice, not a song vocal.
- The non-commercial license. CC-BY-NC-4.0 on the weights, matching upstream KRAFTON. Fine for personal and research work; not for a commercial product.
- First-run downloads. The whole thing only happens once, but the first generate can stall while weights land. Watch the console, not just the progress bar.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| raon_model | RAON_OPENTTS_MODEL | — | |
| text | STRING | Hello! This is Raon OpenTTS running natively inside ComfyUI. | Text to synthesize. Long text is split into chunks automatically and cross-faded together. |
| ref_audio | AUDIO | Reference voice clip for zero-shot cloning. Clean speech with little noise works best. | |
| ref_text | STRING | Exact transcript of the reference clip. Strongly improves cloning quality. Use the Whisper Transcribe node to generate it. | |
| steps | INT | 321–64 | NFE steps for the flow-matching ODE (euler + EPSS schedule). 32 is the official default. |
| cfg_strength | FLOAT | 2.000–10 | Classifier-free guidance strength. 2.0 is the official default; 0 disables CFG. |
| sway_sampling_coef | FLOAT | -1.00-2–2 | Sway sampling coefficient for the time schedule. -1.0 is the official default. |
| speed | FLOAT | 1.000.5–2 | Speech-rate multiplier for duration estimation (>1 = faster). |
| seed | INT | 420–2147483647 | 0 uses the current random state. A positive value is repeatable (incremented per text chunk). |
| fix_duration_seconds | FLOAT | 0.00–60 | Force the generated segment length in seconds. 0 estimates it from the reference speech rate (official behaviour). |
| target_rms | FLOAT | 0.100–0.5 | Loudness normalization target for the reference clip (official: 0.1). |
| use_vad_duration | BOOLEAN | true | Estimate the generation length from the VAD-trimmed reference length (official default, robust for quiet speakers) while conditioning on the untrimmed audio. |
| cross_fade_ms | FLOAT | 1500–500 | Cross-fade between generated text chunks in milliseconds (official: 150). |
| do_split | BOOLEAN | true | Split long text into chunks and generate them one by one (cross-faded together). Off = always one chunk, whatever the length. |
| max_chars | INT | 00–2000 | Chunk size budget in UTF-8 bytes. 0 = auto, estimated from the reference speech rate (official behaviour: ref_bytes/ref_seconds x (22 - ref_seconds)). Any positive value forces that budget, so the split becomes deterministic across speakers. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |