Allow installer to continue without optional audio libraries
Technical details:
- Treat PortAudio and libsamplerate checks as non-fatal warnings on Linux and macOS
- Allow Fish Audio S2 runtime installation to run in headless environments
- Correct Fedora dependency guidance
- Address issues #330 and #332
Fix Fish Audio S2 installer runtime validation
- Validate fish_speech.inference_engine instead of distribution metadata alone
- Repair incompatible Fish installations automatically
- Pin the tested Fish S2 v2.0.0-beta source revision
- Verify the runtime import after installation
Add MOSS LoRA loading support and compatibility validation
Implementation details:
- Add managed MOSS LoRA discovery and Hugging Face install flow under models/TTS/moss_tts/loras
- Wire PEFT adapter loading through the MOSS engine, adapter, cache, generation info, and unified model interface
- Validate adapter base-model compatibility before loading to prevent huge PEFT mismatch errors
- Raise real ComfyUI popup errors for MOSS LoRA/base model mismatches instead of generic engine creation failures
- Patch bundled MOSS Delay and TTSD classes for PEFT generation compatibility
- Upgrade installer requirement handling so outdated packages like peft are upgraded automatically
- Document the MOSS LoRA folder contract and update MOSS metadata
Fix RVC training FAISS stub-package handling
Technical details:
- Validate working FAISS APIs instead of treating plain faiss import success as sufficient
- Remove broken or conflicting faiss packages and namespace-only stubs before reinstalling faiss-cpu
- Detect missing FAISS APIs in RVC index building and degrade cleanly instead of crashing training
Improve RVC training Linux FAISS dependency recovery
Technical details:
- Validate faiss imports after Linux CUDA GPU package installation
- Fall back to faiss-cpu when faiss-gpu installs but cannot import
- Log broken faiss import errors more clearly during installation
Technical details:
- remove ffmpeg-python from the bundled RVC training runtime
- keep RVC model training explicit when FAISS index build deps are missing
- record index build status and warnings in RVC training artifacts
- install faiss-cpu with --no-deps to avoid NumPy constraint churn
Adjust ChatterBox Official 23-Lang Russian stress install flow
Technical details:
- move patched russian-text-stresser installation back to install.py
- keep only the large Russian dictionary as lazy runtime data downloaded through the unified downloader
- stop runtime package mutation during generation and warn users to rerun install if the package is missing
- preserve the safetensors fallback log cleanup from the previous patch
Fix ChatterBox Official 23-Lang Russian stress support
Technical details:
- Add lazy Russian stress setup for Official 23-Lang instead of eager installer downloads
- Download Russian stress dictionary through the unified downloader into the TTS model cache
- Install patched russian-text-stresser only on first Russian use with broad dependency constraints
- Accept safetensors fallbacks in Official 23-Lang completeness checks and loader logs
- Remove misleading missing-file warnings for working safetensors model folders
Fix onnxruntime-gpu installation in Docker environments
Technical details:
- Remove CUDA provider verification check after successful installation
- CUDA provider check fails in restricted environments (Docker/containers) due to permission issues
- Installing both CPU and GPU versions causes Python to prefer CPU version
- Trust successful onnxruntime-gpu installation instead of over-validating
Restrict Transformers to Qwen3-TTS-compatible range
Implementation details:
- Cap transformers<=4.57.3 in requirements and installer
- Add startup warning when Transformers 5.x is detected
- Add investigation report for Qwen3-TTS + Transformers 5.x
Detect CUDA availability and install onnxruntime-gpu if possible for GPU
acceleration of ONNX models used by Step Audio EditX and OpenSeeFace.
Falls back to CPU version if:
- No CUDA detected
- GPU installation fails
- CUDA provider not available after installation
Modern onnxruntime-gpu (1.23+) no longer forces numpy downgrades, making
GPU acceleration safe for all users with CUDA-capable systems.
Removed torchcodec from requirements.txt and install.py to eliminate the FFmpeg
system dependency that was causing Windows installation failures.
Implementation:
- Removed torchcodec>=0.2.0 from requirements.txt
- Removed torchcodec>=0.2.0 from install.py core_packages list
- Removed torchaudio 2.9+ migration warnings (no longer applicable)
- Added AudioProcessingUtils.safe_load_audio() utility for robust audio loading
- Updated all audio loading calls to use fallback-aware utility function
Audio Loading Changes:
- character_voices_node.py: Uses safe_load_audio() with fallback support
- tts_text_node.py: Uses safe_load_audio() for narrator and character voices (2x)
- tts_srt_node.py: Uses safe_load_audio() for narrator voice
- higgs_audio_tts_processor.py: Uses safe_load_audio() (2x)
- higgs_audio_srt_processor.py: Uses safe_load_audio() (2x)
- index_tts_processor.py: Uses safe_load_audio() (2x)
- f5tts_streaming_adapter.py: Uses safe_load_audio()
- higgs_audio_adapter.py: Uses safe_load_audio()
- subprocess.py: Uses safe_load_audio()
Compatibility:
- torchaudio.load() works fine with fallback backends (soundfile, scipy)
- No quality loss - only negligible audio loading speed difference (~milliseconds)
- All existing audio formats supported
- Better error handling with graceful fallbacks
After investigation, some package downgrades are NECESSARY and INTENTIONAL:
1. NumPy 2.3.3 → 2.2.6: Intentional protection against numba/librosa issues
2. rotary-embedding-torch 0.8.9 → 0.6.5: Required by audio-separator dependency
3. pydantic/pydantic-core: Required by gradio - no way to avoid
The pre-installation function was trying to force-protect pydantic versions,
but this itself forced the downgrade. Better approach: only pre-install
packages that won't be downgraded (fastapi, starlette, websockets, etc).
Let gradio install pydantic/pydantic-core with --no-deps as it requires them.
This is a reasonable trade-off: controlled downgrades for compatibility.
opencv-python, pillow, and gradio were still being installed in
install_core_dependencies() which runs BEFORE the new pre-installation
of their safe dependencies. This caused the same downgrades to occur.
Now they are ONLY installed via install_problematic_packages() after
their dependencies have been pre-installed with version protection.
This ensures:
- opencv-python installs after numpy is protected
- gradio installs after pydantic/pydantic-core/pillow are protected
- No downgrade cascade occurs
Fix critical audio loading and model download dependencies
- Add missing torchcodec dependency required by torchaudio for audio file loading
- Fix torchcrepe import checking for packages installed with --no-deps
- Fix German (havok2) ChatterBox model download pointing to wrong subdirectory
- German model now correctly uses finetuned_by_h2 folder with complete model files
Fix PyTorch installation syntax error
Invalid pip requirement syntax with local version labels in version specifiers.
The +cu121 suffix is only valid with == or != operators, not with >= operators.
Now correctly passes CUDA version via --index-url instead.
Also add graceful error handling for RVC monotonic-alignment-search installation
on systems without C++ build tools.
Windows users see failed WeTextProcessing install due to missing build tools,
even though our code has graceful fallback. This causes user confusion.
Changes:
- Detect Windows and skip WeTextProcessing installation on Windows
- Use fallback text processing instead (slower for Chinese but works fine)
- Add explanatory message in install summary for Windows users
- No functional impact - all TTS generation still works normally
Now Windows users will see a clean install without error messages about
WeTextProcessing, while still getting full IndexTTS-2 functionality.
Fix IndexTTS-2 text normalization dependency handling
Technical implementation:
- Move WeTextProcessing from standard requirements to smart installer
- Add graceful fallback from WeTextProcessing to wetext package
- Implement proper testing for text normalization packages
- Handle Windows pynini compilation failures elegantly
Fix WeTextProcessing package name for IndexTTS-2 text normalization
Technical fix:
- Change from wetext>=0.0.9 to WeTextProcessing (correct package name)
- WeTextProcessing is the actual PyPI package for Chinese/English text normalization
- Keep tn as fallback dependency for Linux systems
- Fix import compatibility issues with IndexTTS-2 text processing
Add missing tn text normalization dependency for IndexTTS-2
Technical fix:
- Add tn package as fallback dependency for IndexTTS-2 text processing
- IndexTTS-2 uses wetext as primary and tn as fallback normalizer
- Some Linux systems fail wetext import and need tn fallback
- Prevents ModuleNotFoundError for tn.chinese module
Fix install script numpy downgrade issue with faiss-gpu
Technical details:
- Install faiss-gpu-cu12 with --no-deps to prevent numpy downgrade
- faiss-gpu has numpy<2 constraint that forces downgrade from numpy 2.x to 1.26.4
- All other faiss-gpu dependencies already satisfied in environment
- Preserves RVC GPU acceleration while respecting numpy compatibility logic
Fix missing julius dependency for Higgs Audio and RVC components
Technical fix:
- Add julius to manual dependency list for descript-audiotools --no-deps installation
- Resolves missing julius import error when using Higgs Audio 2 engine
- Julius required by RVC demucs models for audio separation DSP operations
- References issue #82 julius dependency missing error
- Add CUDA suffixes to torchaudio and torchvision package names
- Prevents mixed GPU PyTorch + CPU torchaudio installation
- Fixes major performance degradation and VRAM issues
- Resolves user reports of slow IndexTTS-2 generation
Major Features:
• IndexTTS-2 engine with zero-shot voice cloning and emotion control
• Multi-modal emotion support (audio refs, text descriptions, manual vectors)
• Character switching with emotion references: [Alice:angry_bob]
• Native IndexTTS-2 token-based chunking integration
• Comprehensive parameter exposure with 25+ engine-specific options
Core Components:
• engines/processors/index_tts_processor.py - Main processor with emotion support
• nodes/engines/index_tts_engine_node.py - Engine configuration node
• Updated unified TTS Text node with IndexTTS-2 integration
• Node registration in main nodes.py
Dependencies:
• Added 8 safe IndexTTS-2 dependencies to install.py and requirements.txt
• Dependency testing confirmed only descript-audiotools conflicts (already handled)
• All new deps use flexible versioning (>=) to avoid lock conflicts
Character Parser Fix:
• Fixed circular import by moving CharacterSegment to separate types.py
• Maintains backward compatibility while supporting emotion references
• Modular structure preserved (4 modules under 500 lines each)
Technical Details:
• Emotion disentanglement separates speaker identity from emotional expression
• Supports [character:emotion] syntax for per-segment emotion control
• IndexTTS-2 native chunking overrides character-based chunking when enabled
• Full caching integration and pause tag support included
• Error handling with graceful fallbacks for missing voices/emotions
Fix pkg_resources deprecation warning in installer
- Replace deprecated pkg_resources with importlib.metadata
- Add fallback support for Python < 3.8 compatibility
- Suppress warnings when using legacy fallback
Fix critical Windows installation issues
Technical fixes:
- Fix Windows UTF-8 encoding errors in subprocess calls
- Fix PyTorch version parsing failure on CUDA suffix (+cu124)
- Fix PyTorch 2.6.0 availability issues with graceful fallback
- Improve CUDA version detection and compatibility logic
Fix VibeVoice model reloading and transformers compatibility
Technical changes:
- Fix unified model interface cache key missing additional_params
- Add transformers>=4.51.3 requirement for VibeVoice compatibility
- Remove excessive debug prints from VibeVoice engine
- Fix RVC numba JIT disable logic for correct Python version detection
- Fix attention_mode and quantize_llm_4bit not triggering model reloads
Implemented complete VibeVoice engine integration following unified modular architecture:
Engine Infrastructure:
- VibeVoice engine wrapper with model management and generation
- Engine adapter for standardized interface integration
- Proper ComfyUI model management integration
- Support for both 1.5B and 7B models (Microsoft + community)
Core Features:
- Two generation modes: Custom Character Switching and Native Multi-Speaker
- Character voice management with [CharacterName] tag support
- Pause tag processing with [pause:xx] syntax
- Time-based chunking UI (minutes converted to characters internally)
- Unified cache system following ChatterBox patterns with 💾 indicators
- Full integration with Character Voices node
- 90-minute generation capability and 4-speaker native mode
Technical Implementation:
- Engine configuration node with ⚙️ emoji consistency
- Unified TTS node integration via processor delegation
- Proper parameter validation and device management
- Dependency management with --no-deps installation approach
- Fixed name collision issues (vibevoice/ → vibevoice_engine/)
- Comprehensive error handling and fallback systems
Architecture Compliance:
- Follows exact Higgs Audio integration patterns
- Uses unified streaming infrastructure
- Maintains modular design under 600 lines per file
- No code duplication, reuses all existing utilities
- Proper separation: Engine → Adapter → Processor → Unified Node
Installation & Dependencies:
- Added VibeVoice to install.py with dependency conflict resolution
- Updated nodes.py with conditional imports and diagnostics
- Comprehensive PROJECT_INDEX.md documentation
Tested and verified:
- Model downloading and loading
- Voice reference handling (dropdown and Character Voices)
- Cache functionality with proper hit indicators
- Multi-character generation and pause processing