Nodes/TTS Audio Suite/๐ŸŽค TTS Text
ComfyUI Node

๐ŸŽค TTS Text

The one node every engine plugs into

By diodiogodยทCreated 12 months agoยทUpdated 18 days agoยท 1,098
๐ŸŽค TTS Text
  • TTS_engine
  • opt_narrator
  • audio
  • generation_info
โ—„textHello! This is unified TTS with character switching support. [Alice] Hi there! I'm Alice speaking with the selected TTS engine. [Bob] And I'm Bob! This works with any TTS engine. Back to the main narrator voice for the conclusion.โ–บ
โ—„narrator_voicenoneโ–บ
โ—„seed1โ–บ
โ—„enable_chunkingtrueโ–บ
โ—„max_chars_per_chunk400โ–บ
โ—„chunk_combination_methodautoโ–บ
โ—„silence_between_chunks_ms100โ–บ
โ—„enable_audio_cachetrueโ–บ
โ—„batch_size0โ–บ

If you're going to learn one node in this whole pack, it's this one. ๐ŸŽค TTS Text is the hub. On its own it does nothing - it has no idea how to make speech. What it does is take a text prompt plus a TTS_ENGINE you hand it and drive the actual generation. Swap ChatterBox for F5-TTS for VibeVoice for Higgs on the same text by unplugging one node and plugging in another. That "unified" design is the whole reason the suite exists: one text-and-character interface, many engines behind it.

TTS Audio Suite is the sprawling multi-engine voice project by diodiogod (it grew out of his older ChatterBox SRT Voice node, and the rename to "TTS Audio Suite" was a big enough deal that the announcement pulled hundreds of upvotes on r/StableDiffusion). Eighteen engines, one door. This node is the door.

How it works

You build an engine node - say โš™๏ธ ChatterBox TTS Engine or โš™๏ธ F5 TTS Engine - and it outputs a TTS_ENGINE object holding all that engine's settings. You wire that into TTS Text's TTS_engine input, type your script into text, and hit run. TTS Text handles everything engine-agnostic: chunking long text so it doesn't blow up VRAM, character switching, pause tags, language switching, and caching so you don't regenerate lines you didn't touch.

That last part matters more than it sounds. The text field understands the suite's whole tag language. [Alice] and [Bob] switch characters mid-script. [de:Alice] switches language and voice. [pause:1s] drops a beat. The default text in the box literally demonstrates narrator/Alice/Bob switching so you can see the shape before you write your own.

The inputs and outputs that matter

Four required inputs, but really you set two:

  • TTS_engine - the engine config from any โš™๏ธ engine node. This is non-negotiable; without it there's nothing to generate with.
  • text - your script, with tags. Multiline. This is where the character/pause/language syntax lives.
  • narrator_voice - a dropdown of bundled example voices (voices_examples/...), used as the default speaker for untagged lines. Leave it none if you're feeding a voice through opt_narrator instead.
  • seed - same generation seed you know from image work; fix it to make a line reproducible.

The optional inputs are mostly about long text. enable_chunking (on by default) and max_chars_per_chunk (400) decide how the script gets sliced; chunk_combination_method (auto, concatenate, silence_padding, crossfade) controls how the pieces get stitched back together, with silence_between_chunks_ms padding the gaps. enable_audio_cache is the one to leave on - it's what makes re-running after a small edit fast. batch_size defaults to 0 (sequential), and honestly leave it there; the suite's own docs note parallel workers are usually slower on GPU inference.

There's also opt_narrator, a wildcard input that takes a NARRATOR_VOICE from the ๐ŸŽญ Character Voices node - the cleaner way to supply a reference voice with its transcript than picking from the dropdown.

Outputs are audio (wire it to a Preview Audio or Save Audio node) and generation_info (a text log - useful when you want to see what actually happened, which chunk cached, which model loaded).

Installing it

Comes with the pack, so you install the whole suite. Easiest path is ComfyUI Manager: search TTS Audio Suite, install, restart. That's important because Manager runs the pack's install.py for you, and that script is the thing that untangles the dependency mess (NumPy, librosa, the famously cranky s3tokenizer) and handles Python 3.13. Manual works too: cd ComfyUI/custom_nodes && git clone https://github.com/diodiogod/TTS-Audio-Suite.git, then run python install.py from inside the folder with your ComfyUI venv active - don't just pip install -r requirements.txt or you skip the conflict resolution. Linux users grab sudo apt-get install portaudio19-dev libsamplerate0-dev first. Models auto-download on first generation, so the first run of any engine is slow while it pulls weights.

Common issues

The big one: TTS Text throws if it has no engine connected, and beginners forget the engine node is separate. If nothing generates, check that a TTS_ENGINE is actually plugged in. Second: the tag syntax is picky - [Alice] is a character switch, but a stray bracket in normal prose can get eaten as a tag. Third: if a long script sounds like it has seams, that's chunking - bump max_chars_per_chunk or switch chunk_combination_method to crossfade. And if regeneration feels slow even after tiny edits, make sure enable_audio_cache didn't get turned off.

CategoryTTS Audio Suite/๐ŸŽค Text to Speech

Inputs (11)

NameTypeDefaultDescription
TTS_engineTTS_ENGINETTS engine configuration from ChatterBox Engine or F5 TTS Engine nodes
textSTRINGHello! This is unified TTS with character switching support. [Alice] Hi there! I'm Alice speaking with the selected TTS engine. [Bob] And I'm Bob! This works with any TTS engine. Back to the main narrator voice for the conclusion.Text to convert to speech. Use [Character] tags for voice switching. Characters not found in voice folders will use the narrator voice.
narrator_voiceCOMBOnoneFallback narrator voice from voice folders. Used when opt_narrator is not connected. Select 'none' for engines that support direct TTS without voice cloning, such as MOSS.
seedINT10โ€“4294967295Seed for reproducible TTS generation. Same seed with same inputs will produce identical results. Set to 0 for random generation.
opt_narratoropt*Voice reference: Connect Character Voices node output OR direct audio input. Takes priority over narrator_voice dropdown when connected.
enable_chunkingoptBOOLEANtrueEnable text chunking for long texts. When enabled, long texts are split into smaller chunks for more stable generation.
max_chars_per_chunkoptINT400100โ€“1000Maximum characters per chunk when chunking is enabled. Smaller chunks = more stable but potentially less coherent speech.
chunk_combination_methodoptCOMBOautoMethod to combine audio chunks: 'auto' chooses best method, 'concatenate' joins directly, 'silence_padding' adds silence between chunks, 'crossfade' smoothly blends chunks.
silence_between_chunks_msoptINT1000โ€“500Silence duration between chunks in milliseconds when using 'silence_padding' combination method. Longer silences = more distinct separation between chunks.
enable_audio_cacheoptBOOLEANtrueIf enabled, generated audio segments will be cached in memory to speed up subsequent runs with identical parameters.
batch_sizeoptINT00โ€“32Parallel processing workers. 0-1 = sequential (recommended for most cases), 2+ = streaming mode. Note: Streaming may be slower than sequential for small texts. F5-TTS doesn't support streaming yet.

Outputs (2)

NameTypeDescription
audioAUDIOโ€”
generation_infoSTRINGโ€”