Nodes/FireRedTTS3/FireRedTTS3 Voice Design
ComfyUI Node

FireRedTTS3 Voice Design

Type 'gentle young female voice' and get a voice that doesn't exist yet

By Saganaki22·Created about a month ago·Updated 28 days ago· 23
FireRedTTS3 Voice Design
  • firered_model
  • audio
  • voice_plan
instructionA gentle young female voice, speaking a little slowly, with a playful touch.
textHello! This is FireRedTTS3 running natively inside ComfyUI.
languageauto
text_temperature0.70
text_top_p0.80
text_top_k20
text_repetition_penalty1.00
n_timesteps10
inference_cfg1.20
seed42
max_audio_seconds64
do_tntrue
do_splittrue
cross_fade_ms50

Voice cloning gives you someone's voice. This node gives you a voice that belongs to nobody - describe it in plain English and FireRedTTS3-Instruct builds it from scratch. No reference clip, no consent issues, no "is that a real person" baggage. It's the node you reach for when you want a narrator or a character voice and you'd rather design one than borrow one.

Here's how it works, and the trick is worth understanding before you type anything. The instruct model treats your instruction as a prompt and first writes a short voice plan - a chain-of-thought describing the voice attributes (gender, age, timbre, pace, emotion) - and then synthesizes audio that matches that plan. That plan is not hidden from you: the node returns it as the voice_plan output alongside the audio. Read it once, and you'll get a feel for how the model interprets your words, which makes iterating on the instruction dramatically less random. Describing the default, "A gentle young female voice, speaking a little slowly, with a playful touch", is the right shape: gender, age, timbre, pace, mood. The model card's Chinese examples work just as well as templates.

The inputs you actually care about:

  • instruction - the voice description, in natural language. This is the whole point of the node.
  • text - what the designed voice should say.
  • language - the language of that text, used for text normalization and sentence splitting. Not for conditioning the voice itself - and that distinction is the trap.

The trap, stated plainly: voice design only works reliably in Chinese and English. That's an upstream limitation, not a bug in the pack - with no reference audio and no language tag, the model has nothing to condition language on, and the upstream benchmark only evaluates zh/en. Pick another language and you get accented or garbled speech. The README's workaround is a clean two-step: design the voice in English or Chinese, clone that output with the base model, and tag the language there. It costs one extra generation and gets you the designed voice speaking anything.

The next four inputs are the sampling controls for that voice-plan text: text_temperature (0.7 default), text_top_p (0.8), text_top_k (20), and text_repetition_penalty (1.0). These govern how varied the plan is, not the audio itself. Crank temperature if every voice comes out same-y; leave them alone otherwise - the official defaults are there for a reason.

Then the standard generation controls, identical to the clone node: n_timesteps 10, inference_cfg 1.2 here (not the clone's 2.0 - design and edits run softer CFG), stop_threshold, seed, max_audio_seconds, and the do_tn/do_split/cross_fade_ms frontend trio for normalization and long-text handling.

Outputs are audio (AUDIO) and voice_plan (STRING). Wire the audio to a save node or downstream video, and if you want, hook voice_plan into a text preview to see what the model decided to make.

Two things will bite you if you skip them. First, this node requires the instruct variant - load fireredtts3_instruct in the loader, not base, or you'll get the pack's "requires the Instruct model" error. Second, language on this node defaults to auto, but given the zh/en-only ceiling you may as well set it explicitly and skip the guesswork. Everything else is the pack's standard story: install via ComfyUI Manager or git clone + python install.py, Transformers 5.3+, multi-gigabyte first download, and 8–14 GB VRAM. The design-versus-clone distinction is the one genuinely novel trick in the whole pack, and for audiobook narration or character dialogue it's the reason to load instruct instead of base.

CategoryFireRedTTS3

Inputs (15)

NameTypeDefaultDescription
firered_modelFIREREDTTS3_MODEL
instructionSTRINGA gentle young female voice, speaking a little slowly, with a playful touch.Natural-language voice description (gender, age, timbre, emotion, pace, accent). Any language works; the model card's Chinese examples are also good templates. No reference audio needed.
textSTRINGHello! This is FireRedTTS3 running natively inside ComfyUI.Text to synthesize with the designed voice.
languageCOMBOautoLanguage of the text; used for text normalization and sentence splitting only. Voice design synthesis itself only works reliably in Chinese/English (upstream limitation: no language conditioning without a reference clip); other languages produce accented/garbled speech. For other languages, design the voice in English/Chinese, then clone the result with the base model and a language tag.
text_temperatureFLOAT0.700–2Sampling temperature for the model's voice-plan text (Chain-of-Thought).
text_top_pFLOAT0.800–1Top-p for the voice-plan text.
text_top_kINT200–500Top-k for the voice-plan text. 0 disables.
text_repetition_penaltyFLOAT1.001–2Repetition penalty for the voice-plan text. 1.0 is the official default.
n_timestepsINT101–50Flow-matching steps per generated audio patch. 10 is the official default; more is slower with diminishing returns.
inference_cfgFLOAT1.200–4Classifier-free guidance strength for the flow head. 0 disables CFG. Official defaults: 2.0 for cloning, 1.2 for design/edits.
seedINT420–21474836470 uses the current random state. A positive value is repeatable.
max_audio_secondsFLOAT644–160Hard cap on generated audio length per sentence (64s is the official maximum).
do_tnBOOLEANtrueRun text normalization (numbers, dates, units to spoken form). Chinese/English use local wetext; other languages get basic cleaning.
do_splitBOOLEANtrueSplit long text into sentences and generate them one by one (cross-faded together).
cross_fade_msFLOAT500–500Cross-fade between sentence segments in milliseconds.

Outputs (2)

NameTypeDescription
audioAUDIO
voice_planSTRING