⚙️ Fish Audio S2 Pro Engine
80+ languages with fine-grained emotion tags
- speaker2
- TTS_engine
Fish Audio S2 Pro is the "I need real breadth and nuance" engine. 80+ languages, zero-shot voice cloning, native multi-speaker dialogue, and - the interesting part - free-form emotion and prosody tags you drop right into the text at the sub-word level. It's a large model (~8–10GB depending on checkpoint), so it's not the one you reach for to knock out a quick English clip, but when you want expressive, multilingual, conversational output it earns its footprint. This node configures it and outputs a TTS_ENGINE for 🎤 TTS Text or 📺 TTS SRT.
How it works
S2 Pro is an LLM-style TTS (hence the temperature/top_p/repetition_penalty/context_length controls). It clones a voice zero-shot from a reference and reads your text, honoring inline tags for emotion and prosody as it generates rather than as a separate editing pass. Because it's a big transformer, it exposes real production controls: precision, quantization to fit smaller GPUs, and torch compile for speed. The suite runs it in the main Transformers 5 environment and tears the process down to clear VRAM when you're done.
The inputs and outputs that matter
- model (
s2-proors2-pro-fp8, defaults2-pro) - the full BF16 checkpoint or a lighter community FP8 one. FP8 trades a little quality for a smaller memory footprint. - temperature (0.1–1, default 0.8), top_p (default 0.8), repetition_penalty (default 1.1) - LLM sampling; defaults are tuned. Raise
repetition_penaltyif it loops. - multi_speaker_mode (
Native Multi-SpeakerorCustom Character Switching, default Native) - Native does a single-pass dialogue with real conversational flow; Custom is the standard per-character generation with full tag support. - language_prompting (
Auto Inline TagorOff, default Auto) - whether it auto-inserts language tags for you.
The performance/memory group is where you'll actually intervene on a modest GPU: quantization (none, bnb_int8, bnb_nf4) lets you quantize the official checkpoint on load to fit less VRAM; precision (bfloat16/float16) and compile (torch.compile, on by default for speed) round it out. native_chunk_length, max_new_tokens, and context_length govern how much text it handles at once. speaker2 is a wildcard input for a second dialogue voice. Output is one TTS_engine.
Installing it
Comes with TTS Audio Suite. Easiest: ComfyUI Manager → search TTS Audio Suite → install → restart, which runs the pack's install.py and handles the dependency conflicts (NumPy, librosa, s3tokenizer) and Python 3.13. Manual: cd ComfyUI/custom_nodes && git clone https://github.com/diodiogod/TTS-Audio-Suite.git, then python install.py from inside the folder with your ComfyUI venv active (run the script, not a bare requirements install). Linux: portaudio19-dev libsamplerate0-dev first. The model (~8–10GB) auto-downloads into ComfyUI/models/TTS/fish_audio_s2_pro/ on first use. There's a "Fish Audio S2 Pro Integration" example workflow demonstrating cloning, native dialogue, and inline control. Note the model ships under the Fish Audio Research License - check it before any commercial use.
Common issues
- Out of VRAM. It's a big model. Set
quantizationtobnb_nf4(orbnb_int8), or use thes2-pro-fp8checkpoint. Both cut memory at a small quality cost. The suite's process teardown on "Clear VRAM" also helps between runs. - First run stalls, then a torch compile pause. The download is ~10GB, and with
compileon the first generation eats extra time compiling the graph - subsequent runs are faster. Not a hang. - Emotion tags not landing. S2 Pro reads free-form sub-word emotion/prosody tags in the text; if you're not seeing an effect, check you're using its tag syntax (see the pack's engine docs) and not another engine's.
- Overkill for simple English. If you just need a clean English clip, ChatterBox or F5 loads faster and lighter. Save S2 Pro for when you actually need the 80-language reach or the fine emotion control.
- License. Research License, not MIT like the pack code. Relevant if you're shipping something commercial.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | s2-pro | Fish Audio S2 model selection. Options prefixed with local: are already present in configured ComfyUI TTS model folders; unprefixed options are downloadable checkpoints. |
| device | COMBO | auto | 3 options: auto, cuda, cpu |
| temperature | FLOAT | 0.800.1–1 | — |
| top_p | FLOAT | 0.800.1–1 | — |
| repetition_penalty | FLOAT | 1.100.9–2 | — |
| native_chunk_length | INT | 200100–1000 | Official UTF-8 byte limit for grouping native speaker turns. |
| max_new_tokens | INT | 102464–4096 | — |
| context_length | COMBO | 8192 | Native context and KV-cache size. Larger values support longer dialogue but use substantially more VRAM. |
| normalizeopt | BOOLEAN | true | Official English/Chinese number normalization. |
| cache_referenceopt | BOOLEAN | true | Cache encoded reference codes inside the Fish runtime. |
| precisionopt | COMBO | bfloat16 | 2 options: bfloat16, float16 |
| compileopt | BOOLEAN | true | Enable the official torch.compile path (recommended). The first generation is slower, but later runs are much faster; testing showed about 6 it/s to 41 it/s, roughly a 6.8x speedup. This can also be tested with BNB quantization, although bitsandbytes compatibility may vary by version. |
| quantizationopt | COMBO | none | Optional on-the-fly quantization for the official s2-pro checkpoint. • none: Full checkpoint loading • bnb_int8: BitsAndBytes INT8 load-time quantization • bnb_nf4: BitsAndBytes NF4 load-time quantization BNB quantization reuses the official checkpoint and requires CUDA plus bitsandbytes. It is ignored for the separate s2-pro-fp8 checkpoint. |
| multi_speaker_modeopt | COMBO | Native Multi-Speaker | Native Multi-Speaker sends all character turns in one Fish dialogue request. This preserves native multi-turn context and long-form behavior. Custom Character Switching generates every parsed character segment independently as local speaker 0, using only that character's reference. This can reduce speaker leakage but loses cross-turn context and requires more generation calls. |
| language_promptingopt | COMBO | Auto Inline Tag | Fish has no native language parameter, so the suite can optionally prepend a natural-language inline instruction for resolved segment languages. • Auto Inline Tag: alias/default languages like de or fr become Fish prompt tags such as <German> • Off: keep Fish language fully text-only and ignore alias/default language switching |
| speaker2opt | * | Optional second speaker reference. Speaker 1 is always the Unified node narrator/opt_narrator input. Additional speaker inputs appear automatically. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| TTS_engine | TTS_ENGINE | — |