Releases: Saganaki22/FireRedTTS3-ComfyUI
Release list
v0.2.5 - Corrected instruct language guidance (verified)
Patch Release
Corrects the v0.2.4 language guidance for FireRedTTS3-Instruct cloning after direct verification. v0.2.4 claimed instruct cloning inherits the reference audio's language - further testing proved that wrong for non-ZH/EN:
- Greek reference + Greek text -> degenerate output (""Thank you.""). Same-language reference does not rescue instruct cloning; the model simply lacks the base variant's multilingual conditioning (
<|lang|>tags + CAM++ speaker embedding) - Cantonese: usable with a same-language reference, degrades with a cross-language reference (Chinese-family behavior, not a hard failure like Greek)
Verified language map (all cells tested, whisper-verified):
| ZH | EN | Cantonese | Other (e.g. Greek) | |
|---|---|---|---|---|
| Clone (base) | OK | OK | OK | OK - use this |
| Clone (instruct) | OK | OK | same-language ref only | broken even with native ref |
| Voice Design | OK | OK | untested | broken |
| Semantic / Acoustic Edit | inherits input audio | OK | inherits input audio | OK (Greek verified) |
Changed
- README (EN/ZH) language table corrected: instruct cloning reliable for Chinese/English; Cantonese usable with same-language reference; all other languages -> use base
- Voice Clone node warning upgraded: fires on the resolved language (covers
autodetection too) whenever instruct is loaded and the language isn't Chinese/English/Cantonese, telling you to switch the loader variant tofireredtts3_base - Suite 17/17 passing
Multilingual voice cloning should use FireRedTTS3-Base. Thanks to everyone reporting and testing.
v0.2.4 - AIMDO device fix + language support docs
Patch Release
Fixed
device = "cuda"crash with DynamicVRAM (AIMDO) (#1) - a barecudaselection produced a device withindex = None, and comfy_aimdo'sget_devctx(int(index))threwTypeError: int() argument ... not 'NoneType'. CUDA devices are now normalized to an explicit index (cuda:0etc.). Regression tests added (tests/test_loader_device.py, suite 17/17 passing). Thanks @1WildPanda for the spot-on report.
Language support, documented and surfaced
Investigation after a Greek-gibberish report (cause: the loader default changed to instruct in v0.2.0, and instruct cloning has no language tags - it inherits the language from the reference audio). Verified against upstream's model card and live generations:
| Feature | Language support |
|---|---|
| Voice Clone (base) | 24 languages + 21 dialects via tag or auto |
| Voice Clone (instruct) | Inherits the reference audio's language; the dropdown is ignored (now logs a warning) |
| Voice Design (instruct) | Chinese/English only (upstream limitation, tested: zh OK, fr/el garbled) - design in EN/ZH, then clone the output with base + a language tag |
| Semantic / Acoustic Edit | Inherits the input audio's language (tested on Greek) |
- New Language Support by Feature table in the README (EN/ZH)
- Voice Design language dropdown narrowed to
auto / Chinese / Englishwith an explanatory tooltip - Loader
varianttooltip now explains base vs instruct (language tags vs design/editing) on hover
v0.2.3 - Faster flow stepping (bit-identical)
Patch Release
Faster generation with provably identical output, plus repo/licensing cleanup since v0.2.0.
Performance: optimized flow stepping
Per patch, the flow DiT ran 10 euler steps and recomputed values that never change across a generation. Now:
- Timestep embeddings, per-block AdaLN modulations (11 blocks x 10 steps) and rotary frequencies are computed once per generation instead of once per patch (~500+ kernel launches removed per patch)
- Generation buffers are preallocated (no more growing
torch.catper patch) and the CFG null-condition is hoisted
Measured (RTX 5090, bf16 repo, flash_attention, seed-42 voice clone, 203 patches / 32.5s audio):
| patches/s | output | |
|---|---|---|
| v0.2.0 | 2.79 | reference |
| v0.2.3 | 3.23 (+16%) | bit-identical (max abs diff 0.0, same stop point) |
Also evaluated and deliberately rejected torch.compile on the flow DiT: 2.15x per-patch but fusion drift compounds through the autoregressive loop - in testing the stop head fired 182 patches late and produced hallucinated trailing speech. Not shippable. This release takes only the exact-math wins.
Also since v0.2.0
- Repo license switched to MIT (model weights remain Apache-2.0 under upstream's license)
- README: directory-tree model layout, screenshot + language links, dropped stale
tools/references tools/folder removed from the repo (quantization/validation scripts remain in git history and were used to produce the int8 mirror)- New
tests/test_flow_opt.pyequivalence tests; full suite 13/13 passing
v0.2.0
Initial Release
ComfyUI custom nodes for FireRedTTS3 - zero-shot voice cloning, voice design, and speech editing, running natively in-process with ComfyUI/AIMDO DynamicVRAM support.
Nodes (6)
- FireRedTTS3 Load Model - base/instruct variants from three weight sources:
FireRedTTS3-bf16(recommended),FireRedTTS3-int8(INT8 ConvRot),FireRedTTS3-fp32(official); dtype / device / attention selection;download_if_missingtoggle;extra_model_paths.yaml+ symlink aware - FireRedTTS3 Voice Clone - zero-shot cloning in 24 languages + 21 Chinese dialects, automatic FastText language detection, wetext text normalization (zh/en), sentence splitting with cross-fade
- FireRedTTS3 Voice Design (instruct) - create a voice from a natural-language description; returns the model's voice plan as text
- FireRedTTS3 Semantic Edit (instruct) - insert/delete/replace words by instruction; returns the rewritten text
- FireRedTTS3 Acoustic Edit (instruct) - speed (0.5-2.0x), pitch (plus/minus 6 steps), volume (0.3-2.0x) via the trained instruction templates
- FireRedTTS3 Whisper Transcribe - reference transcripts with audio passthrough
Highlights
- Native inference - Qwen3 backbone, PatchEncoder, DiT flow head, RedAE codec, and CAM++ speaker encoder run inside ComfyUI with per-module memory registration (static + AIMDO DynamicVRAM paging)
- INT8 ConvRot - official comfy-kitchen quantizer, format
int8_tensorwisewith per-row fp32 scales and group size 256; 321/332 transformer linears quantized; checkpoint 7.90 -> 3.07 GiB, peak VRAM 13.1 -> 8.3 GiB, validated end-to-end (worst layer cosine 0.999953, runtime proven via counted kernel calls) - bf16 mirror - official-equivalent mixed precision (backbone + RedAE encoder bf16, flow head/decoder fp32); same-seed output identical to fp32 (SNR > 80 dB)
- flash_attention on auto - auto picks flash_attention_2 when flash_attn is installed and compatible (CUDA + bf16), matching upstream; RedAE decoder always sdpa; explicit sdpa/sageattention options
- Model mirrors on HuggingFace: drbaph/FireRedTTS3-bf16, drbaph/FireRedTTS3-int8
- pip/uv compatible installer that never touches torch/torchaudio/transformers
Model weights
Pick a repo in the loader; weights land under ComfyUI/models/fireredtts3/ (only the selected variant downloads):
| Repo | Base | Instruct | RedAE |
|---|---|---|---|
| FireRedTTS3-bf16 | 4.70 GiB | 4.69 GiB | 2.46 GiB |
| FireRedTTS3-int8 | 3.30 GB | 3.30 GB | unchanged |
| FireRedTTS3-fp32 | 8.48 GB | 8.48 GB | 3.78 GB |
Voice cloning is intended for research use. Do not clone voices without consent. FireRedTTS3 model weights remain Apache-2.0 under their own license.