Files
filliptm-ComfyUI-FL-VoxtralTTS/__init__.py
T
filliptmandClaude Opus 4.6 60f6897263 Initial implementation of Voxtral-4B TTS direct inference for ComfyUI
Custom node pack implementing Mistral's Voxtral-4B-TTS-2603 model with
direct PyTorch inference (no vLLM dependency), enabling native MPS/Mac
support alongside CUDA.

Three-component architecture:
- Mistral LLM backbone (26 layers, 3072 dim, GQA, RoPE)
- Flow-matching acoustic transformer (3 layers, 8-step Euler ODE, CFG)
- Neural audio codec decoder (4-stage ALiBi transformer + conv upsampling)

Features:
- 20 preset voices across 9 languages
- 24 kHz mono output
- BF16/FP16/FP32 dtype support
- HuggingFace Hub auto-download with caching
- ComfyUI AUDIO output format

Nodes:
- FL_VoxtralTTS_ModelLoader: download and load model
- FL_VoxtralTTS_Generate: text + voice → audio

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 20:09:20 -05:00

57 lines
1.9 KiB
Python

"""ComfyUI-FL-VoxtralTTS — Mistral Voxtral-4B Text-to-Speech for ComfyUI."""
import os
import sys
import logging
logger = logging.getLogger(__name__)
current_dir = os.path.dirname(os.path.abspath(__file__))
# Add src to sys.path so voxtral_tts package is importable
src_dir = os.path.join(current_dir, "src")
if src_dir not in sys.path:
sys.path.insert(0, src_dir)
# Register TTS model folder with ComfyUI
try:
import folder_paths
tts_base = os.path.join(folder_paths.models_dir, "tts")
voxtral_dir = os.path.join(tts_base, "VoxtralTTS")
os.makedirs(tts_base, exist_ok=True)
os.makedirs(voxtral_dir, exist_ok=True)
supported_ext = {".safetensors", ".bin", ".pt", ".pth", ".json"}
if "tts" not in folder_paths.folder_names_and_paths:
folder_paths.folder_names_and_paths["tts"] = ([tts_base], supported_ext)
except Exception as e:
logger.warning(f"Could not register TTS folder: {e}")
# Import nodes
from .nodes.model_loader import FL_VoxtralTTS_ModelLoader
from .nodes.generate import FL_VoxtralTTS_Generate
NODE_CLASS_MAPPINGS = {
"FL_VoxtralTTS_ModelLoader": FL_VoxtralTTS_ModelLoader,
"FL_VoxtralTTS_Generate": FL_VoxtralTTS_Generate,
}
NODE_DISPLAY_NAME_MAPPINGS = {
"FL_VoxtralTTS_ModelLoader": "FL Voxtral TTS Model Loader",
"FL_VoxtralTTS_Generate": "FL Voxtral TTS Generate",
}
WEB_DIRECTORY = None
__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS"]
# Banner
BANNER = """
╔══════════════════════════════════════════════╗
║ FL Voxtral TTS — Mistral 4B ║
║ 20 voices • 9 languages • 24kHz ║
║ Direct PyTorch inference ║
╚══════════════════════════════════════════════╝
"""
logger.info(BANNER)