Nodes/FL FishSpeech/FL FishSpeech TTS
ComfyUI Node

FL FishSpeech TTS

The actual text-to-speech, with mood tags you'll actually use

By filliptmΒ·Created 6 months agoΒ·Updated 8 days agoΒ· 10
FL FishSpeech TTS
  • fs_model
  • fs_reference
  • audio
β—„textHello, this is a test of the FishSpeech text to speech system.β–Ί
β—„seed0β–Ί
β—„temperature1.00β–Ί
β—„top_p0.90β–Ί
β—„top_k30β–Ί
β—„repetition_penalty1.10β–Ί
β—„chunk_length512β–Ί
β—„max_new_tokens0β–Ί

This is the node you came for. Text in, 44.1kHz speech out - and if you've wired up a reference, it speaks in that reference's voice. Everything else in the pack (loader, reference, transcribe) exists to feed this one. The headline feature isn't just that it sounds good; it's that you can put mood tags straight in the text. Hello! [laugh] That's so funny. [whispers] But don't tell anyone. actually delivers a laugh, then a whisper. That's the kind of control that makes a TTS node feel like a toy you want to play with, not a pipeline you fight.

How it works

The DualAR transformer generates speech token-by-token, autoregressively, and the per-token progress bar lets you watch it chew through the sentence. Long text is chunked (chunk_length, default 512 bytes per chunk) and generated iteratively so it doesn't run out of context. Each chunk's output tokens are concatenated, then handed to the DAC codec, which reconstructs the final 44.1kHz mono waveform. If you passed an fs_reference, those prompt tokens plus its transcript condition the whole generation - that's your voice clone.

Inputs that matter

  • fs_model (required) - the FS_MODEL output from the Model Loader.
  • text (required, multiline) - the lines to speak, with inline tags. The tooltip also mentions <|speaker:X|> for multi-speaker work. Emotion tags: [laugh], [whispers], [angry], [sad], [excited].
  • fs_reference (optional) - the FS_REFERENCE from Reference Audio. Skip it for plain TTS, wire it for cloning.
  • seed - 0 means random; set a positive value for a repeatable take. Here's the catch: the community's experience with Fish Speech in ComfyUI is that a locked seed doesn't give you the same reproducibility guarantee image samplers do. Treat seed as a "try again, but biased the same way" knob, and queue a couple of takes when you need a good one.
  • temperature / top_p / top_k / repetition_penalty - the sampling controls, defaults 1.0 / 0.9 / 30 / 1.1. Lower temperature for steadier delivery, bump repetition_penalty toward 1.2 if the model starts looping words.
  • chunk_length / max_new_tokens - leave them alone until something's wrong. Shrink chunk_length if long paragraphs degrade, and max_new_tokens (0 = auto) caps output per chunk if you need to bound generation time.

Output

One output, audio (AUDIO), in standard ComfyUI format. Wire it to Preview Audio to listen in the UI, or Save Audio / Save AudioMP3 to write a file. The example workflow saves MP3s straight from here.

Common issues

  • Output varies between runs - the reproducibility complaint again. Fish Speech generation is noisy even with a fixed seed; this is normal, not a bug in your graph.
  • "No audio codes generated" - the node throws this when the text comes through empty or mangled. Check the input isn't blank and the reference transcript isn't feeding garbage in.
  • First run is slow - that's the model load and, if you enabled compile on the loader, torch.compile doing its one-time warm-up. It's a cost you pay once.

Installing

Same pack routine: ComfyUI Manager β†’ search "FL FishSpeech" β†’ install β†’ restart, or clone into custom_nodes/ and pip install -r requirements.txt. Remember the two once-per-install gotchas: the fish-speech repo clone at ComfyUI/fish-speech/ and huggingface-cli login with access accepted on the gated fishaudio/openaudio-s1-mini page - that ~8GB model download happens on your first Model Loader run.

Category🐟FL FishSpeech

Inputs (10)

NameTypeDefaultDescription
fs_modelFS_MODELβ€”
textSTRINGHello, this is a test of the FishSpeech text to speech system.Text to speak. Use <|speaker:X|> for multi-speaker, [laugh], [whispers] for emotion control.
fs_referenceoptFS_REFERENCEOptional reference audio encoding for voice cloning.
seedoptINT00–2147483647Random seed. 0 = random.
temperatureoptFLOAT1.000.1–2Sampling temperature. Higher = more varied. v2.0 default is 1.0.
top_poptFLOAT0.900.1–1Top-p nucleus sampling threshold. v2.0 default is 0.9.
top_koptINT301–100Top-k sampling. Limits to top K most likely tokens.
repetition_penaltyoptFLOAT1.101–2Repetition penalty. Higher = less repetition.
chunk_lengthoptINT51250–1000Max bytes per text chunk for iterative generation.
max_new_tokensoptINT00–4096Maximum new tokens to generate per chunk. 0 = auto.

Outputs (1)

NameTypeDescription
audioAUDIOβ€”