๐ค TTS Text
The one node every engine plugs into
- TTS_engine
- opt_narrator
- audio
- generation_info
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 itnoneif you're feeding a voice throughopt_narratorinstead. - 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.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| TTS_engine | TTS_ENGINE | TTS engine configuration from ChatterBox Engine or F5 TTS Engine nodes | |
| text | STRING | Hello! 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_voice | COMBO | none | Fallback 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. |
| seed | INT | 10โ4294967295 | Seed 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_chunkingopt | BOOLEAN | true | Enable text chunking for long texts. When enabled, long texts are split into smaller chunks for more stable generation. |
| max_chars_per_chunkopt | INT | 400100โ1000 | Maximum characters per chunk when chunking is enabled. Smaller chunks = more stable but potentially less coherent speech. |
| chunk_combination_methodopt | COMBO | auto | Method to combine audio chunks: 'auto' chooses best method, 'concatenate' joins directly, 'silence_padding' adds silence between chunks, 'crossfade' smoothly blends chunks. |
| silence_between_chunks_msopt | INT | 1000โ500 | Silence duration between chunks in milliseconds when using 'silence_padding' combination method. Longer silences = more distinct separation between chunks. |
| enable_audio_cacheopt | BOOLEAN | true | If enabled, generated audio segments will be cached in memory to speed up subsequent runs with identical parameters. |
| batch_sizeopt | INT | 00โ32 | Parallel 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)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | โ |
| generation_info | STRING | โ |