Fish S2 Voice Clone TTS
Clone a voice from 10 seconds and have it read anything
- reference_audio
- audio
This is the node most people actually want from the FishAudioS2 pack. Fish S2 Voice Clone TTS is zero-shot voice cloning built on Fish Audio's S2 Pro: you feed it a short clip of someone talking, give it a script, and out comes new speech that sounds like them. No fine-tuning, no training run, no voice embedding file to manage - the reference audio is the model's prompt, and it works in all 83 languages S2 supports. Ten seconds of a clean recording is enough to get a convincing result; the tooltip says 5–30 seconds is the sweet spot, and anything longer just makes the prompt huge and slow.
This is the same "cloned speech is now genuinely local" story the knowledge base tracks through Chatterbox and Higgs - S2 Pro is the heavier end of that line, a 4B model that trades footprint for the best prosody and emotion fidelity of the open pack. The tradeoff is real: this node wants a real GPU, and the model download is measured in tens of gigabytes if you go full precision (start with s2-pro-bnb-nf4 on a 16GB card).
How it works
The mechanism is simple on the surface: the model encodes your reference_audio into a conditioning prompt, then generates the text in that voice, with the same inline [tag] support as the base Fish S2 TTS - [whisper], [laugh], [sad], [volume up] all work mid-sentence in a cloned voice. The one thing that dramatically stabilizes clones is the optional reference_text input: a transcript of what the reference clip actually says. Feed it whenever you can. The README warns that Whisper transcription via MTB nodes is broken with newer transformers versions, so until that fix lands you'll be typing the transcript yourself - annoying, but it takes thirty seconds and measurably tightens the clone.
The inputs that matter
- reference_audio (AUDIO) - the voice you're cloning. 5–30 seconds, clean, no background music. This is a required input, so you'll need an audio source in your graph - load an mp3/wav with ComfyUI's LoadAudio or a VHS loader.
- reference_text (optional, STRING) - transcript of that clip. Strongly recommended.
- text - what you want the clone to say, tags allowed.
- model_path - same eight choices as the rest of the pack;
s2-profor max quality, the BNB or FP8 quants to fit your VRAM. - language -
autodetects, which matters here because your reference voice can be in one language and your output in another. S2 will happily have the same speaker perform across languages.
Output is audio (AUDIO) - save it or feed it to a lip-sync model for a cloned-voice talking head.
Installing and running
Same as the whole pack: ComfyUI Manager → search "FishAudioS2" → install → restart, or git clone https://github.com/Saganaki22/ComfyUI-FishAudioS2.git into custom_nodes/. Dependencies auto-install at first startup (with the descript audio packages deliberately --no-deps to avoid protobuf fights), and the model auto-downloads on first run into ComfyUI/models/fishaudioS2/. Restart once after installing before you go chasing errors - the pack's installer runs before nodes register. And never pip install fish-speech yourself; it's bundled, and that command will downgrade your PyTorch.
Where people get burned
VRAM is the big one - the full model is ~24GB. If you can't fit it, use the NF4/INT8 BNB options rather than giving up on the node. The protobuf conflict that plagues shared ComfyUI environments is handled automatically in current versions, but if you see ImportError: cannot import name 'runtime_version' from 'google.protobuf', you're on an old version - update the pack. And mind the license: Fish Audio Research terms are non-commercial, so a cloned voice is fine for personal projects and not fine for a paid product without a separate commercial license.
Voice cloning is a consent minefield even when the tech works flawlessly, so clone voices you have permission to clone. Within that, this is the best local clone quality you can get out of ComfyUI today.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| model_path | COMBO | S2-Pro checkpoint folder name. Place model folders in ComfyUI/models/fishaudioS2/ | |
| text | STRING | Hello! [excited] This is my cloned voice. | Text to synthesise in the cloned voice. Supports inline tags: [laugh], [whisper], [pause], [excited], [sad], [angry], [volume up], etc. |
| reference_audio | AUDIO | Reference audio to clone the voice from. 5-30 seconds gives the best results; longer clips make the prompt very large and slow. | |
| language | COMBO | auto | Language hint. 'auto' lets the model detect it. |
| device | COMBO | auto | Compute device. 'auto' picks CUDA > MPS > CPU. |
| precision | COMBO | auto | Model precision. 'auto' picks bfloat16 for full model, float16 for quantized model. bfloat16 recommended for CUDA. |
| attention | COMBO | auto | Attention kernel. 'auto' uses the model default (sdpa/flash). 'sdpa' forces PyTorch SDPA. 'flash_attention' forces FlashAttention via SDPBackend. 'sage_attention' monkey-patches with SageAttention (requires sageattention). BNB models (s2-pro-bnb-int8/nf4) always use sdpa regardless of this setting. Changing this unloads and reloads the model. |
| max_new_tokens | INT | 00–4096 | Maximum acoustic tokens to generate. 0 = auto (no limit, model decides). |
| chunk_length | INT | 200100–400 | Chunk length for iterative synthesis (100-400). Lower = faster first audio, slightly lower quality. Higher = better prosody across long sentences. |
| temperature | FLOAT | 0.800.1–1 | Sampling temperature. Lower = more deterministic output. |
| top_p | FLOAT | 0.800.1–1 | Top-p nucleus sampling cutoff. |
| repetition_penalty | FLOAT | 1.100.9–2 | Penalises repeated tokens. Higher = less repetition. |
| seed | INT | 00–2147483647 | Random seed. |
| keep_model_loaded | BOOLEAN | true | ON = model stays in VRAM between runs (faster). OFF = model unloaded after each run (frees VRAM). |
| offload_to_cpu | BOOLEAN | false | After generation, move the model to CPU instead of keeping it in VRAM. Frees VRAM while avoiding the full reload penalty. Slower than keep_model_loaded but faster than a cold load. Ignored if keep_model_loaded is OFF. |
| compile_model | BOOLEAN | false | Enable torch.compile (~10x speedup after warmup). First run is slow while compiling. Not supported on Windows. For best results pin max_new_tokens to a fixed value — each new larger length triggers a recompile. |
| reference_textopt | STRING | Transcript of the reference audio. Strongly recommended for stable voice cloning. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |