Nodes/dots.tts · T8star-Aix/dots.tts 长文本生成 · T8star-Aix
ComfyUI Node

dots.tts 长文本生成 · T8star-Aix

LongText — feed dots.tts a whole script, get back one seamless 48 kHz file

By T8mars·Created 23 days ago·Updated 14 days ago· 5
dots.tts 长文本生成 · T8star-Aix
  • model
  • voice
  • sampling
  • 拼接音频
  • 分段信息 JSON
text第一段内容。<pause=800ms>第二段内容,会使用同一个音色继续生成。
languageinherit
seed42
max_segment_tokens120
segment_gap_ms200

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_tokens isn'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_run on 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.

CategoryT8star-Aix/Audio/dots.tts

Inputs (8)

NameTypeDefaultDescription
modelT8_DOTS_TTS_MODEL
textSTRING第一段内容。<pause=800ms>第二段内容,会使用同一个音色继续生成。
languageCOMBOinherit27 options: inherit, auto_detect, none, ZH, EN, YUE, +21
seedINT420–4294967295
max_segment_tokensINT12016–512
segment_gap_msINT2000–10000
voiceoptT8_DOTS_TTS_VOICE
samplingoptT8_DOTS_TTS_SAMPLING

Outputs (2)

NameTypeDescription
拼接音频AUDIO
分段信息 JSONSTRING