⚙️ Dots TTS Engine
Fast multilingual TTS with distilled variants
- TTS_engine
Dots TTS is the speed pick among the newer engines. It covers a wide spread of languages with official auto-detection, and - the useful bit - it ships distilled variants (SOAR and MeanFlow) that generate in far fewer steps than a normal diffusion/flow model, which means faster turnaround without a huge quality hit. At ~6GB it's mid-weight. If you're iterating on multilingual lines and don't want to wait, it's a sensible engine to have wired up. This node configures it and outputs a TTS_ENGINE for 🎤 TTS Text or 📺 TTS SRT.
How it works
Dots is a flow-matching TTS (hence num_steps and guidance_scale). The trick is the distilled checkpoints: dots.tts-soar and dots.tts-mf (MeanFlow) are trained to produce good audio in a handful of steps, where the plain dots.tts-base needs more. That's why the default step count here (10) is so much lower than the 32-ish you see on other flow engines - the distilled variants are built to run short. Language handling is official rather than bolted-on: it auto-detects or you set it explicitly.
The inputs and outputs that matter
- model_variant (
dots.tts-soar,dots.tts-mf,dots.tts-base, default SOAR) - SOAR and MF are the fast distilled variants and the reason to pick this engine; base is the full model. Start on the default. - language (default
Auto, 24 languages) - Auto detects from text, or pin one. There's also aNoneoption to skip language conditioning entirely. - num_steps (1–64, default 10) - generation steps. The low default suits the distilled variants; if you switch to
dots.tts-baseyou'll likely want more steps for clean output. - guidance_scale (0–5, default 1.2) - prompt/conditioning adherence. Modest by default; nudge up if delivery drifts from the reference.
- speaker_scale (0–5, default 1.5) - how strongly it locks onto the reference speaker identity. Raise it if the clone feels loose, lower it if it sounds forced.
max_generate_length caps output length in tokens. The optionals - template_mode (TTS vs Instruction TTS, for instruction-style prompting), precision, normalize_text, and optimize (a speed switch) - are refinements you can leave at defaults. Output is a single TTS_engine.
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) and Python 3.13. 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 a bare requirements install). Linux: portaudio19-dev libsamplerate0-dev first. The Dots checkpoints (~6GB, with tokenizer, vocoder, and speaker encoder) auto-download into ComfyUI/models/TTS/dots_tts/ on first use.
Common issues
- Base variant sounds rough at 10 steps. The low default step count is calibrated for the SOAR/MF distilled models. If you switch to
dots.tts-base, raisenum_stepsaccordingly - the distillation is exactly what lets the others run short. - Weak or drifting clone. Bump
speaker_scale(toward 2–2.5) so it holds the reference identity harder, and make sure you're feeding a clean reference via 🎭 Character Voices. - Wrong language pronunciation.
Autousually gets it, but on short or ambiguous text it can guess wrong - pinlanguageexplicitly. - Not sure it's worth it over F5/ChatterBox. Its edge is speed on multilingual work via the distilled variants. If you're English-only and happy with F5's pace, you may not need it - but for fast iteration across languages it's a nice option.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| model_variant | COMBO | dots.tts-soar | Official Dots checkpoint. • dots.tts-soar: best zero-shot voice cloning • dots.tts-mf: fastest distilled MeanFlow checkpoint; use 4 steps • dots.tts-base: pretrained baseline |
| device | COMBO | auto | Device to run Dots TTS on. • auto: use the best available device • cuda: NVIDIA GPU • cpu: CPU-only (very slow for 2B model) |
| language | COMBO | Auto | Official Dots language tag. • Auto: let Dots detect language from text • None: disable explicit language tagging • Full language names: force the model-side language tag Voice-cloning note: reference/narrator audio works best when the generated language matches the language spoken in the reference. Cross-language cloning can degrade quality, accent, and speaker similarity. |
| num_steps | INT | 101–64 | Flow-matching sampling steps. Official recommendation: 10-32 for base/soar, 4 for mf. |
| guidance_scale | FLOAT | 1.20–5 | Official CFG guidance scale. Higher values can increase energy and instability. |
| speaker_scale | FLOAT | 1.50–5 | Official speaker embedding scale for reference audio conditioning. |
| max_generate_length | INT | 50032–1024 | Official maximum audio patch budget. 500 is roughly 160 seconds of output budget. |
| template_modeopt | COMBO | TTS | Official non-standard Dots template mode from upstream. • TTS: standard Dots speech synthesis template • Instruction TTS: uses the same text field as normal TTS Upstream does not clearly document what behavior difference this mode is meant to produce. It may yield different results, or little noticeable difference, versus standard TTS. Needs testing. |
| precisionopt | COMBO | auto | Runtime precision. • auto: bfloat16 on newer CUDA GPUs, else float16, cpu -> float32 |
| normalize_textopt | BOOLEAN | false | Use Dots native text normalization before inference. |
| optimizeopt | BOOLEAN | false | Enable official Dots runtime optimization / warmup. First load is slower; steady-state inference is faster. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| TTS_engine | TTS_ENGINE | — |