Nodes/FireRedTTS-ComfyUI/FireRedTTSNode
ComfyUI Node

FireRedTTSNode

Clone a voice from one clip — in Chinese or English — with FireRedTTS

By AIFSH·Created 2 years ago·Updated 2 years ago· 13
FireRedTTSNode
  • text
  • prompt_wav
  • AUDIO
remove_sliencetrue
speed1.00
split_wordsbut,however,nevertheless,yet,still,therefore,thus,hence,consequently,moreover,furthermore,additionally,meanwhile,alternatively,otherwise,namely,specifically,for example,such as,in fact,indeed,notably,in contrast,on the other hand,conversely,in conclusion,to summarize,finally

FireRedTTSNode is a one-node door into FireRedTTS, the open zero-shot TTS from Xiaohongshu's FireRedTeam. You feed it a short reference recording plus whatever text you want spoken, and out comes a 24 kHz wav in that voice. No fine-tuning, no training data, no API key - one clip is the whole "dataset."

Why would you pick this over, say, a FishSpeech or CosyVoice wrapper? Because of Chinese. FireRedTTS's real superpower is natural, long-form Mandarin - it's built by the company behind Little Red Book, and it shows. The node auto-detects language per segment, normalizes numbers and punctuation in both Chinese and English, and handles mixed text without you telling it what's what. If your project is dubbing, narration, or character voices that need proper 中文, this is the one I'd reach for. If it's English-only, it works fine but you're not using its best material.

How it works

Under the hood it's the standard three-stage modern TTS pipeline, wrapped by the node. First a speaker encoder squeezes your reference clip into a 512-dim voice embedding. Then a 30-layer autoregressive GPT (the ~2 GB fireredtts_gpt.pt) rolls out audio codec tokens conditioned on that embedding and the text tokens. A flow-matching model turns the tokens into a mel spectrogram, and a BigVGAN vocoder renders the final waveform at 24 kHz.

The node does all the unglamorous plumbing around that. It writes your AUDIO input to a temp wav, optionally strips leading/trailing silence, splits long text into model-sized chunks, normalizes it, synthesizes each chunk with a progress bar, concatenates, then applies speed with ffmpeg. One genuinely cute detail: the GPT samples 9 candidate sequences and the code keeps the third-shortest - a cheap way to dodge the stutters greedy decoding sometimes produces.

The inputs that matter

  • text - what you want spoken. Long text is fine; it auto-splits.
  • prompt_wav (AUDIO) - the voice to clone. Comes from a LoadAudio node. A few seconds of clean, music-free speech is ideal.
  • remove_slience (default true) - trims dead air off the reference clip before it's used. If your clip has intentional pauses, flip it off.
  • speed (0.5–2.0, default 1) - playback rate via ffmpeg atempo. Nice for pacing tweaks without re-synthesizing.

Then there's split_words, and here's the trap. The tooltip says "leave blank to use default list" - but the code does the opposite, and as shipped the reassigned list never actually reaches the splitter anyway (the function's default argument was already bound to the original list at import). Net effect: changing it does nothing you'll notice. Just leave it alone.

The single AUDIO output is a standard ComfyUI audio dict at 24 kHz - wire it into a save/preview node or a video pack that takes audio.

Installing it

Search "FireRedTTS" in ComfyUI Manager, or:

cd ComfyUI/custom_nodes
git clone https://github.com/AIFSH/FireRedTTS-ComfyUI
cd FireRedTTS-ComfyUI
pip install -r requirements.txt

Restart ComfyUI after. First use downloads ~3.1 GB of weights from Hugging Face (FireRedTeam/FireRedTTS) into ComfyUI/models/AIFSH/FireRedTTS/ - the README also links a Quark pan mirror for mainland users. The dependency list is heavy (transformers, diffusers, librosa, pydub, LangSegment) and it pins numpy==1.26.4, which is a classic source of clashes with other nodes in a shared environment. It also wants an ffmpeg binary on your PATH. WeTextProcessing is correctly skipped on Windows via a platform marker, so Windows installs are fine.

Where people get burned

  • It's effectively CUDA-only. The node tries to pick cuda/mps/cpu, but the speaker extractor in the shipped code hardcodes .to(device="cuda"). On Apple Silicon or a CPU-only box it throws. Don't assume the fallback works.
  • The model download happens the moment the node is instantiated, not when you hit Queue - drag it into a workflow and the first run can look like a hang while 3 GB lands.
  • You're on your own for community support. This pack has almost no English-language footprint (one r/comfyui thread in all of 2025), the README is mostly Chinese, and the author, AIFSH, is a prolific pack mill whose quality varies. This one also tracks FireRedTTS v1, not the newer FireRedTTS2.
  • That numpy pin. If another node breaks after install, suspect it first.

Worth it? If you need genuinely good Chinese voice cloning locally, yes - this is one of the few ways to get it inside a ComfyUI graph, and it just works once the weights are down. Just budget the first-run download and a CUDA box.

CategoryAIFSH_FireRedTSS

Inputs (5)

NameTypeDefaultDescription
textTEXT
prompt_wavAUDIO
remove_slienceBOOLEANtrue
speedFLOAT1.000.5–2
split_wordsSTRINGbut,however,nevertheless,yet,still,therefore,thus,hence,consequently,moreover,furthermore,additionally,meanwhile,alternatively,otherwise,namely,specifically,for example,such as,in fact,indeed,notably,in contrast,on the other hand,conversely,in conclusion,to summarize,finallyEnter custom words to split on, separated by commas. Leave blank to use default list.

Outputs (1)

NameTypeDescription
AUDIOAUDIO