⚙️ Echo-TTS Engine
Diffusion voice cloning with a speaker-drift brake
- TTS_engine
Echo-TTS is the diffusion-based option in the suite - a DiT model that does English voice cloning from a reference clip. Two things make it its own animal: it's built to shine on short chunks (roughly 30 seconds or less per generation), and it has an explicit control for a problem that plagues chunked TTS - the voice slowly drifting into a different person across a long passage. That control is "Force Speaker KV," and it's the whole selling point.
Standard drill: this is a config node. It outputs a TTS_engine you feed into 🎤 TTS Text or 📺 TTS SRT.
How it works
Being diffusion, Echo generates over a number of denoising num_steps rather than autoregressively, and it uses classifier-free guidance with two separate scales - one steering toward the text, one toward the speaker's identity. When you stitch several chunks together for longer text, later chunks can lose the reference speaker's character; force_speaker_kv pins the speaker's key/value attention state so identity holds across the seams. There's a stack of presets in the node precisely because this model has a lot of dials, and the presets encode known-good combinations so you don't have to guess.
The inputs and outputs that matter
If you only touch a few things, touch these:
preset- start here.Customexposes everything; theIndependent-*-CFGpresets are ready-made recipes (high/low CFG, with or without the "Flat" schedule). Try a preset before hand-tuning.num_steps(default 40) - diffusion steps. More = potentially cleaner but slower; 40 is a sane middle.cfg_scale_text(3) andcfg_scale_speaker(8) - how hard it pushes toward the words vs. toward the target voice. If cloning is weak, the speaker scale is your lever.force_speaker_kv(off by default) - flip it on for multi-chunk / longer text to stop the voice from wandering.speaker_kv_scaleand its companions tune how aggressively.
The rest - truncation_factor, rescale_k, rescale_sigma, cfg_min_t/cfg_max_t, sequence_length - are exactly the kind of internals the presets exist to set for you. Leave them alone until you have a specific reason.
Output is TTS_engine → TTS Text or TTS SRT.
Installing it
Ships in the pack. ComfyUI Manager → "TTS Audio Suite" → install → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/diodiogod/TTS-Audio-Suite.git
cd TTS-Audio-Suite
python install.py
First generation auto-downloads ~7.1GB (base model + DAC codec) to ComfyUI/models/TTS/echo-tts-base/.
Common issues & troubleshooting
Check the license before you ship anything. This is the big one. Echo-TTS weights are CC-BY-NC-SA - non-commercial. The suite's own code is MIT, but each engine keeps its own terms, and Echo's are not commercial-friendly. If you're making something you'll sell or monetize, use a different engine (ChatterBox and the Chatterbox Multilingual model are MIT, for instance).
It's painfully slow. Echo runs but crawls on CPU. Use CUDA for any real work - the README calls CPU "very slow for real workloads," and that's not an exaggeration for a diffusion model.
The voice changes partway through long text. That's the drift Echo is designed to fight. Turn on force_speaker_kv and, if needed, raise speaker_kv_scale. Also just keep chunks short - Echo is happiest at ~30s or less per generation, so let the unified chunking split long scripts rather than forcing giant single passes.
English only. Don't expect other languages to come out right - Echo is an English model. For multilingual cloning, look at Higgs v3, CosyVoice, or the Chatterbox Multilingual model.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| preset | COMBO | Custom | Sampler preset (overrides steps/CFG/truncation/rescale fields). Independent-High-Speaker-CFG: steps=40, cfg_text=3, cfg_speaker=8, trunc=1.0, rescale_k=1.0 Independent-High-Speaker-CFG-Flat: steps=40, cfg_text=3, cfg_speaker=8, trunc=0.8, rescale_k=1.2 (flattened tail) Independent-High-CFG: steps=40, cfg_text=8, cfg_speaker=8, trunc=1.0, rescale_k=1.0 Independent-High-CFG-Flat: steps=40, cfg_text=8, cfg_speaker=8, trunc=0.8, rescale_k=1.2 Independent-Low-CFG: steps=40, cfg_text=3, cfg_speaker=3, trunc=1.0, rescale_k=1.0 Independent-Low-CFG-Flat: steps=40, cfg_text=3, cfg_speaker=3, trunc=0.8, rescale_k=1.2 Custom: use the values set manually below. |
| device | COMBO | auto | Device to run Echo-TTS on: - auto: Use CUDA if available, else CPU - cuda: Force NVIDIA GPU (falls back to CPU if unavailable) - cpu: CPU-only (very slow) Note: CUDA recommended; Echo-TTS is non-commercial (CC-BY-NC-SA). |
| num_steps | INT | 401–200 | Number of sampling steps. Higher can improve quality but increases time and VRAM. |
| cfg_scale_text | FLOAT | 3.00–20 | Text guidance scale. Higher pushes closer to the prompt; too high can sound harsh. |
| cfg_scale_speaker | FLOAT | 8.00–20 | Speaker guidance scale. Higher pushes closer to reference voice; too high can degrade quality. |
| cfg_min_t | FLOAT | 0.500–1 | CFG lower bound (0–1). Guidance is active when t >= cfg_min_t. |
| cfg_max_t | FLOAT | 1.000–1 | CFG upper bound (0–1). Guidance is active when t <= cfg_max_t. |
| truncation_factor | FLOAT | 1.00–5 | Truncation factor for initial noise. Lower can reduce diversity; higher can increase variation. |
| rescale_k | FLOAT | 1.00–10 | Temporal score rescale k (see Echo-TTS rescaling). Only used if both rescale_k and rescale_sigma are set. |
| rescale_sigma | FLOAT | 3.00–10 | Temporal score rescale sigma (see Echo-TTS rescaling). Only used if both rescale_k and rescale_sigma are set. |
| force_speaker_kv | BOOLEAN | false | Enable speaker KV scaling to more strongly match the reference voice. Higher values may reduce quality. Auto-disabled for short text fragments (< 20 chars) to prevent noisy tails. |
| speaker_kv_scale | FLOAT | 1.50–10 | KV Scale (>1 = stronger speaker influence). Used only when Force Speaker is enabled. |
| speaker_kv_max_layers | INT | 240–24 | Max layers to apply KV scaling (0–24). Used only when Force Speaker is enabled. |
| speaker_kv_min_t | FLOAT | 0.900–1 | KV Min t (0–1). Scaling is active until t drops below this value. |
| sequence_length | INT | 64064–2048 | Sample latent length. 640 is ~30s (max seen during training). Best results at ≤30s; longer text uses unified chunking (best-effort). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| TTS_engine | TTS_ENGINE | — |