dots.tts 语音生成 · T8star-Aix
Dots.tts Generate — turn text into 48 kHz audio in ComfyUI, with or without a reference voice
- model
- voice
- sampling
- 生成音频
- 生成信息 JSON
This is the node you're here for. T8_DotsTTS_Generate takes text, a dots.tts model handle, and - optionally - a reference voice, and hands back a standard ComfyUI AUDIO tensor at 48 kHz. No API keys, no cloud, no per-character pricing; the whole thing runs on your GPU. For the state of open TTS in ComfyUI, that's a bigger deal than it sounds - most of the ecosystem's voice work still funnels through a handful of node packs bolted onto the side (see the audio-generation overview in the knowledge base), and dots.tts is one of the strongest open models you can run fully local.
Here's the mental model: a text-only generation and a voice clone are the same node. If you don't connect a voice, you get dots.tts's default prosody on whatever text you typed. Connect a T8_DotsTTS_VOICE (from the VoicePrompt node) and it clones - either a continuation clone when you also supply the reference transcript, or an x-vector-only clone when you don't. The model input comes from T8_DotsTTS_ModelLoader, and which checkpoint you loaded decides whether you're in quality mode (SOAR, tunable sampling) or speed mode (MF 2-Steps, locked parameters).
The inputs that matter:
text- what gets spoken. Multiline, and it honors dynamic prompts. Empty text is rejected before anything runs.language-inheritby default (follows the model), or pick explicitly from a list that includes ZH, EN, YUE, JA, KO and a long tail of others. Set it when the model guesses wrong.seed- a standard ComfyUI seed with control-after-generate, so you can lock or randomize per run.voice(optional) - wire in a VoicePrompt output to clone.sampling(optional) - aT8_DotsTTS_Samplingoutput. Skip it and the node uses each model's default contract.
Outputs are audio (the AUDIO tensor - preview it, save it, feed it to a video node) and generation_info, a JSON string with the details of what ran. Wire that to a text preview if you want to see the model, seed and sampling actually used.
How a typical workflow looks
Model loader → Generate → a Save Audio node (or straight into a video's audio track). To clone a voice, add VoicePrompt fed by your reference clip. That's the whole thing.
Installing
Install the pack via ComfyUI Manager (search dots-tts-t8), or clone into custom_nodes and pip install -r requirements.txt. The dependency list is deliberately light - ComfyUI owns torch/transformers - but the weights aren't bundled, so you must download them once:
python scripts\download_models.py --model soar --comfyui-root D:\ComfyUI
…or drop the checkpoint folders into ComfyUI/models/TTS/dots.tts/ yourself. The loader will refuse to run with missing weights, which trips up a lot of first-timers.
Where people get burned
Text normalization is the sneaky one. On Windows the pack can't auto-install WeTextProcessing (its pynini dependency has no Windows wheel), so normalization defaults off - "2026" may come out as raw digits. Expand numbers and units yourself before feeding text in, or use the Pronunciation node to rewrite them. Also, on Python 3.13 nothing here runs; the pack supports 3.10–3.12. And if your first generation feels slow, that's the lazy model load plus maybe torch.compile if you flipped optimize on - both are one-time costs.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| model | T8_DOTS_TTS_MODEL | — | |
| text | STRING | 欢迎使用 dots.tts,来自 T8star-Aix。 | — |
| language | COMBO | inherit | 27 options: inherit, auto_detect, none, ZH, EN, YUE, +21 |
| seed | INT | 420–4294967295 | — |
| voiceopt | T8_DOTS_TTS_VOICE | — | |
| samplingopt | T8_DOTS_TTS_SAMPLING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| 生成音频 | AUDIO | — |
| 生成信息 JSON | STRING | — |