Skip to content

Releases: Saganaki22/FireRedTTS3-ComfyUI

v0.2.5 - Corrected instruct language guidance (verified)

Choose a tag to compare

@Saganaki22 Saganaki22 released this 18 Aug 16:55

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 auto detection too) whenever instruct is loaded and the language isn't Chinese/English/Cantonese, telling you to switch the loader variant to fireredtts3_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

Choose a tag to compare

@Saganaki22 Saganaki22 released this 18 Aug 16:40

Patch Release

Fixed

  • device = "cuda" crash with DynamicVRAM (AIMDO) (#1) - a bare cuda selection produced a device with index = None, and comfy_aimdo's get_devctx(int(index)) threw TypeError: int() argument ... not 'NoneType'. CUDA devices are now normalized to an explicit index (cuda:0 etc.). 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 / English with an explanatory tooltip
  • Loader variant tooltip now explains base vs instruct (language tags vs design/editing) on hover

v0.2.3 - Faster flow stepping (bit-identical)

Choose a tag to compare

@Saganaki22 Saganaki22 released this 16 Aug 05:33

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.cat per 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.py equivalence tests; full suite 13/13 passing

v0.2.0

Choose a tag to compare

@Saganaki22 Saganaki22 released this 14 Aug 20:16

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_missing toggle; 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_tensorwise with 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.