dots.tts 长文本生成 · T8star-Aix
LongText — feed dots.tts a whole script, get back one seamless 48 kHz file
- model
- voice
- sampling
- 拼接音频
- 分段信息 JSON
TTS models have a practical length limit - feed Generate a five-page script and you'll hit the ceiling, get truncation, or produce audio that drifts. T8_DotsTTS_LongText is the node that doesn't care: it takes your whole script, chops it into model-sized segments by token count, synthesizes each one through the same runtime, and stitches them into a single 48 kHz AUDIO tensor. It's the node you reach for with narration, an audiobook chapter, or any voiceover longer than a paragraph.
How it works is the interesting part. The node splits on the model's own tokenizer - max_segment_tokens (default 120) is the per-segment cap, and it tries to break at punctuation so you don't get a cut mid-word. Chinese and English punctuation both count. Each segment is synthesized with a seed deterministically derived from your starting seed, which is how you keep a run reproducible: same seed, same text, same split, same audio. The generation_info JSON records the full segment list and concatenation details, so you can audit exactly where every break landed.
Two controls shape the seams:
segment_gap_ms(default 200) - the automatic silence inserted between segments. Zero gives you tight, rapid-fire narration; a few hundred ms reads more naturally.- Explicit pauses - and here's the feature worth knowing before the rest of the pack. You can drop
<pause=800ms>or<pause=1.2s>right into the text and the node inserts that exact silence, up to 60 seconds. This is how you get a deliberate dramatic beat or a timed gap without relying on segment boundaries.
Everything else is standard issue: model from the loader, optional voice from VoicePrompt, optional sampling, and a language combo (default inherit). One voice flows through all segments automatically - that's the point of the same-runtime reuse - so a 2,000-character narration stays one consistent speaker, not a sequence of fresh clones.
Where it fits
For short one-liners, Generate is simpler. The moment your text needs deliberate pacing or runs long, LongText beats stringing Generate nodes together - no manual batching, no re-cloning per chunk, and the pauses are first-class syntax instead of silent gaps you craft with other nodes. If you're doing subtitled multi-character work rather than one long narrator, T8_DotsTTS_Project is the sibling that handles per-line timing and roles; LongText is the single-speaker marathon runner.
Gotchas
max_segment_tokensisn't a quality knob. Lower it if a segment keeps overflowing the model's real context; don't chase a specific number for "quality."- Text normalization defaults off on Windows (no pynini wheel), so spell out digits and units yourself - or the audio will say them raw.
- The whole script runs through one model instance, which means one long run holding VRAM. If you're tight on memory, that's what
release_after_runon the loader is for.
Installation is the pack install (Manager → dots-tts-t8 or clone + pip install -r requirements.txt) plus a downloaded SOAR or MF 2-Steps checkpoint - nothing extra specific to this node.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | T8_DOTS_TTS_MODEL | — | |
| text | STRING | 第一段内容。<pause=800ms>第二段内容,会使用同一个音色继续生成。 | — |
| language | COMBO | inherit | 27 options: inherit, auto_detect, none, ZH, EN, YUE, +21 |
| seed | INT | 420–4294967295 | — |
| max_segment_tokens | INT | 12016–512 | — |
| segment_gap_ms | INT | 2000–10000 | — |
| voiceopt | T8_DOTS_TTS_VOICE | — | |
| samplingopt | T8_DOTS_TTS_SAMPLING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| 拼接音频 | AUDIO | — |
| 分段信息 JSON | STRING | — |