Nodes/TTS Audio Suite/⚙️ Fish Audio S2 Pro Engine
ComfyUI Node

⚙️ Fish Audio S2 Pro Engine

80+ languages with fine-grained emotion tags

By diodiogod·Created about a year ago·Updated 22 days ago· 1,098
⚙️ Fish Audio S2 Pro Engine
  • speaker2
  • TTS_engine
models2-pro
deviceauto
temperature0.80
top_p0.80
repetition_penalty1.10
native_chunk_length200
max_new_tokens1024
context_length8192
normalizetrue
cache_referencetrue
precisionbfloat16
compiletrue
quantizationnone
multi_speaker_modeNative Multi-Speaker
language_promptingAuto Inline Tag

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-pro or s2-pro-fp8, default s2-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_penalty if it loops.
  • multi_speaker_mode (Native Multi-Speaker or Custom 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 Tag or Off, 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 quantization to bnb_nf4 (or bnb_int8), or use the s2-pro-fp8 checkpoint. 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 compile on 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.
CategoryTTS Audio Suite/⚙️ Engines

Inputs (16)

NameTypeDefaultDescription
modelCOMBOs2-proFish Audio S2 model selection. Options prefixed with local: are already present in configured ComfyUI TTS model folders; unprefixed options are downloadable checkpoints.
deviceCOMBOauto3 options: auto, cuda, cpu
temperatureFLOAT0.800.1–1
top_pFLOAT0.800.1–1
repetition_penaltyFLOAT1.100.9–2
native_chunk_lengthINT200100–1000Official UTF-8 byte limit for grouping native speaker turns.
max_new_tokensINT102464–4096
context_lengthCOMBO8192Native context and KV-cache size. Larger values support longer dialogue but use substantially more VRAM.
normalizeoptBOOLEANtrueOfficial English/Chinese number normalization.
cache_referenceoptBOOLEANtrueCache encoded reference codes inside the Fish runtime.
precisionoptCOMBObfloat162 options: bfloat16, float16
compileoptBOOLEANtrueEnable 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.
quantizationoptCOMBOnoneOptional 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_modeoptCOMBONative Multi-SpeakerNative 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_promptingoptCOMBOAuto Inline TagFish 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)

NameTypeDescription
TTS_engineTTS_ENGINE