FL Voxtral TTS Model Loader
Loading Mistral's Voxtral TTS into ComfyUI
- model
Every TTS workflow in this pack starts here, because this is where the heavy lifting happens. FL Voxtral TTS Model Loader doesn't look like much - three widgets and one output - but it's the node that downloads Mistral's Voxtral-4B weights and assembles the whole speech pipeline in memory. It's also the reason your first run of this pack feels like it's hung. It isn't. It's pulling an 8 GB checkpoint off HuggingFace.
What it does
On first use, the node downloads the mistralai/Voxtral-4B-TTS-2603 repo - roughly 8 GB of weights plus the tokenizer and 20 small voice-embedding files - into ComfyUI/models/tts/VoxtralTTS/Voxtral-4B-TTS-2603/. Then it loads four sub-models: the LLM backbone (a Ministral-3 base), a flow-matching acoustic transformer, an audio codec decoder, and the tokenizer. The source actually renames Mistral's checkpoint keys to match its own module layout as it loads, which is the sort of fiddly detail that usually means "this will break after an update" - so far it holds together.
Here's the part people miss: the loaded pipeline is cached in RAM, keyed by device + dtype. Run it once, and every later load in the same session is instant. Change device or dtype and it reloads, because that's a different cache entry. There's also a consolidated.safetensors marker file that tells it the download is complete, so a half-finished download gets picked up and finished rather than restarted.
The three inputs
That's all there is, and only the first two matter on a normal day:
- device -
auto(default) picks CUDA → MPS → CPU in that order. If you know your setup, just pick it. - dtype -
bfloat16(default),float16, orfloat32. The weights ship in BF16; keep the default unless you have a reason. Note: on MPS the code silently falls back tofloat16, because Apple's bf16 support is spotty. That's intentional, not a bug. - force_reload - a boolean you will almost never touch. Flip it if you suspect a corrupted cache and want to force a clean re-download and reload.
The single output, model (type VOXTRAL_MODEL), plugs into the model input of FL Voxtral TTS Generate. There's nothing else to wire - no CLIP, no conditioning, none of the image-side machinery. That's the whole point: two nodes, one wire, text in, audio out.
Installing it
It ships in the same pack as the Generate node, so one install covers both. ComfyUI Manager: search "FL Voxtral TTS" and hit install. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI-FL-VoxtralTTS.git
cd ComfyUI-FL-VoxtralTTS
pip install -r requirements.txt
Then restart. Dependencies are modest and ComfyUI-friendly: torch, torchaudio, safetensors, huggingface_hub, soundfile, numpy, and mistral_common (Mistral's own tokenizer/package). Nothing exotic.
The honest gotchas
- RAM and VRAM are real requirements. The README says 16 GB RAM minimum and 12 GB+ VRAM recommended. The 8 GB BF16 weights plus activations will not fit gracefully on a small card. CPU runs, but a 4B model on CPU is a patience test.
- The first load is a download, not a hang. Watch the console for the "Downloading..." line and the progress bar ComfyUI shows. Restarting mid-download just makes the next attempt resume.
- It's not portable. Because the cache key includes device and dtype, you can't load once on CUDA and expect the same RAM to serve a CPU pass later in the session - flip the device and you eat the reload.
Start with auto + bfloat16, give the first run its 15 minutes, and the rest of the pack is genuinely painless. The tax is paid once.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| device | COMBO | auto | 4 options: auto, cuda, mps, cpu |
| dtype | COMBO | bfloat16 | 3 options: bfloat16, float16, float32 |
| force_reload | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | VOXTRAL_MODEL | — |