Commit Graph
44 Commits
Author SHA1 Message Date
diodiogod 28a738662e Clean up README condensed engine table
- Remove Speed column (unnecessary for overview)
- Remove 🎯 emoji from title (too many emojis)
- Add ChatterBox to featured engines (now shows 7 engines)
2026-01-28 11:10:29 -03:00
diodiogod 6c87d67ed7 Add YAML-driven engine documentation table generator
- Created comprehensive YAML source of truth for all TTS engines
- Implemented Python generator for 3 documentation tables:
  * ENGINE_COMPARISON.md - Main engine overview with capabilities
  * LANGUAGE_SUPPORT.md - Detailed language support matrix
  * FEATURE_COMPARISON.md - Feature capabilities comparison
- YAML captures all engine metadata without information loss
- Tables auto-generated via scripts/generate_engine_tables.py
- Added flag emojis to language support table for easy scanning
- Speed performance fixes: F5-TTS marked as "Very Fast"
2026-01-28 10:50:10 -03:00
diodiogod fa74973ad5 Fix Qwen3-TTS audio hash error with nested dict structure
Fixed 'dict' object has no attribute 'cpu' error when using Voice Designer
voices with TTS Text node.

## Root Cause

Voice Designer and Character Voices nodes output unified NARRATOR_VOICE format:
{
    "audio": {"waveform": tensor, "sample_rate": 24000},
    "audio_path": "...",
    "reference_text": "...",
    ...
}

But TTS Text node was wrapping this AGAIN when creating voice_mapping:
{
    "waveform": audio_tensor,  # audio_tensor was already a dict!
    "sample_rate": 24000,
    "text": "..."
}

This created triple-nested structure that broke audio hashing.

## Fixes Applied

**TTS Text Node** (nodes/unified/tts_text_node.py):
- Extract actual waveform tensor from audio dict before creating voice_mapping
- Applied to all 6 places where audio_tensor is used:
  - Narrator voice mapping (line 1151)
  - Character ICL fallback (line 1183)
  - Character x_vector fallback (line 1217)
  - Character no-text fallback (line 1220)
  - Character no-audio fallback (line 1237)
- Pattern: Check if audio_tensor is dict, extract waveform/sample_rate if so

**Qwen3-TTS Adapter** (engines/adapters/qwen3_tts_adapter.py):
- Extract inner audio dict before passing to hash function
- Changed from passing full voice_ref to passing voice_ref['audio']

**Audio Hash Utility** (utils/audio/audio_hash.py):
- Added nested structure handling with fallback
- Detects Character Voices format {"audio": {...}} vs direct format
- Enhanced debug logging to diagnose structure issues

## Testing

- Voice Designer → TTS Text: Works without hash error
- Character Voices → TTS Text: Works without hash error
- Audio hashing generates stable keys for caching
- Both VoiceDesign and traditional voices function correctly
2026-01-28 00:15:21 -03:00
tazztone a2cac49587 implemented a comprehensive pytest testing infrastructure for the TTS-Audio-Suite custom node. The infrastructure supports both **unit tests** (fast, no ComfyUI needed) and **integration tests** (requires running ComfyUI server).
## Key Files Created/Modified

### Configuration
- [pytest.ini](file:///C:/_stability_matrix/Data/Packages/Comfy-new/custom_nodes/TTS-Audio-Suite/pytest.ini) - Pytest configuration with markers
- [tests/conftest.py](file:///C:/_stability_matrix/Data/Packages/Comfy-new/custom_nodes/TTS-Audio-Suite/tests/conftest.py) - Session fixtures and ComfyUI API client

### Unit Tests
- [tests/unit/test_srt_parser.py](file:///C:/_stability_matrix/Data/Packages/Comfy-new/custom_nodes/TTS-Audio-Suite/tests/unit/test_srt_parser.py) - 23 tests ✅
- [tests/unit/test_pause_processor.py](file:///C:/_stability_matrix/Data/Packages/Comfy-new/custom_nodes/TTS-Audio-Suite/tests/unit/test_pause_processor.py) - 19 tests ✅
- [tests/unit/test_audio_processing.py](file:///C:/_stability_matrix/Data/Packages/Comfy-new/custom_nodes/TTS-Audio-Suite/tests/unit/test_audio_processing.py) - 18/22 tests ✅

### Integration Tests
- [tests/integration/test_workflows.py](file:///C:/_stability_matrix/Data/Packages/Comfy-new/custom_nodes/TTS-Audio-Suite/tests/integration/test_workflows.py) - Node registration & CosyVoice3 tests
- [tests/fixtures/workflows/](file:///C:/_stability_matrix/Data/Packages/Comfy-new/custom_nodes/TTS-Audio-Suite/tests/fixtures/workflows/) - Test workflow JSON files

### Bug Fix
- [nodes.py](file:///C:/_stability_matrix/Data/Packages/Comfy-new/custom_nodes/TTS-Audio-Suite/nodes.py) - Moved [os](file:///C:/_stability_matrix/Data/Packages/Comfy-new/custom_nodes/TTS-Audio-Suite/tests/unit/test_audio_processing.py#174-206)/[sys](file:///C:/_stability_matrix/Data/Packages/Comfy-new/custom_nodes/TTS-Audio-Suite/tests/conftest.py#60-65) imports to top level (was causing NameError during testing)

---

## Test Isolation Strategy

The key challenge was preventing pytest from importing the full ComfyUI node infrastructure during unit tests. We solved this using:

1. **Module-level mocking** in [conftest.py](file:///C:/_stability_matrix/Data/Packages/Comfy-new/custom_nodes/TTS-Audio-Suite/conftest.py) - Mocks ComfyUI modules (`folder_paths`, [comfy](file:///C:/_stability_matrix/Data/Packages/Comfy-new/custom_nodes/TTS-Audio-Suite/tests/conftest.py#135-216), [server](file:///C:/_stability_matrix/Data/Packages/Comfy-new/custom_nodes/TTS-Audio-Suite/tests/conftest.py#135-216), etc.) before pytest imports test modules
2. **Environment variables** - Sets `COMFYUI_TESTING=1` and `PYTEST_CURRENT_TEST=true`
3. **Direct imports via importlib** - Unit tests load utility modules directly, bypassing package [__init__.py](file:///C:/_stability_matrix/Data/Packages/Comfy-new/custom_nodes/TTS-Audio-Suite/__init__.py)

```python
# conftest.py - Mocks ComfyUI at module level
_MOCK_MODULES = ['comfy', 'folder_paths', 'server', 'execution', ...]
for _module_name in _MOCK_MODULES:
    if _module_name not in sys.modules:
        sys.modules[_module_name] = MagicMock()
```

---

## Running Tests

### Unit Tests (Fast, No Server)
```bash
cd C:\_stability_matrix\Data\Packages\Comfy-new\custom_nodes\TTS-Audio-Suite
..\..\venv\Scripts\python -m pytest tests/unit/ -m unit -v
```

### Integration Tests (Requires ComfyUI)
```bash
# Start ComfyUI first, OR the fixture will start it automatically
..\..\venv\Scripts\python -m pytest tests/integration/ -m integration -v
```

### Specific Test Markers
```bash
# Run only CosyVoice3 tests
..\..\venv\Scripts\python -m pytest -m cosyvoice -v

# Run slow tests
..\..\venv\Scripts\python -m pytest -m slow -v
```

---

## Test Results

| Test Suite | Passed | Failed | Notes |
|------------|--------|--------|-------|
| SRT Parser | 23 | 0 | ✅ All timestamp, validation, and parsing tests |
| Pause Processor | 19 | 0 | ✅ Tag detection, parsing, silence generation |
| Audio Processing | 18 | 4 | ⚠️ Minor tensor dimension mismatches |
| **Total** | **60** | **4** | 94% pass rate |

---

## Known Issues

1. **4 failing audio tests** - Due to tensor dimension return type differences in [pad_audio_to_duration](file:///C:/_stability_matrix/Data/Packages/Comfy-new/custom_nodes/TTS-Audio-Suite/utils/audio/processing.py#136-178) and [crossfade_audio](file:///C:/_stability_matrix/Data/Packages/Comfy-new/custom_nodes/TTS-Audio-Suite/utils/audio/processing.py#179-228). The actual implementations work correctly; tests need minor adjustments.

2. **Integration tests** - Require ComfyUI server. The [comfyui_server](file:///C:/_stability_matrix/Data/Packages/Comfy-new/custom_nodes/TTS-Audio-Suite/tests/conftest.py#135-216) fixture will auto-start ComfyUI if not running, but this adds startup time.

---

## Future Enhancements

- [ ] Add `pytest-watcher` configuration for auto-rerun on file changes
- [ ] Fix remaining 4 audio processing test assertions
- [ ] Add more CosyVoice3 integration test workflows
- [ ] GPU-specific test markers for model inference tests
2025-12-18 21:51:42 +01:00
diodiogod 08b52f63c3 Add inline edit tag support for Higgs Audio and fix CUDA graph unloading crash
Added edit tag extraction and batch processing for Higgs Audio TTS and SRT processors following the established pattern from VibeVoice and Step Audio EditX.

Key changes:
- Extract edit tags at top level before pause processing to keep nested functions returning tensors
- Apply edit post-processing after all audio generation completes
- For SRT: batch process all subtitle edits at end instead of per-subtitle
- Fix CUDA graph crash: detect original engine for stateless wrappers and refuse unloading when CUDA graphs enabled
- Store original_engine in ModelInfo to track Higgs even when masked as stateless_tts
- Update Higgs handler to check correct attribute paths for _cuda_graphs_enabled flag

Files modified:
- nodes/higgs_audio/higgs_audio_tts_processor.py: Add edit tag extraction and post-processing
- nodes/higgs_audio/higgs_audio_srt_processor.py: Batch edit processing for all subtitles
- utils/models/comfyui_model_wrapper/base_wrapper.py: Track original_engine for masked engines
- utils/models/comfyui_model_wrapper/model_manager.py: Store original engine when masking
- utils/models/comfyui_model_wrapper/engine_handlers/higgs_audio_handler.py: Refuse unload when CUDA graphs enabled
- docs/Dev reports/SRT_Edit_Tag_Batch_Processing_Pattern.md: Mark Higgs as implemented
2025-12-06 19:04:27 -03:00
diodiogod 96877fec99 Refactor SRT processors to batch edit post-processing at the end
Fixed inefficient per-subtitle edit processing that caused multiple engine loads.
Now all edit processing happens in a single batch after all subtitles are generated.

Changes:
- VibeVoice SRT: Collects all segments with edit_tags, applies edits once at end
- Step Audio EditX SRT: Same batching pattern, skips edits in _process_character_switching when in SRT mode
- Step processor: Added check to only apply edits when NOT in SRT mode
- Subtitle processing functions: Return segment dicts instead of applying edits directly

Benefits:
- Edit engine loads ONCE instead of once per subtitle
- Significantly faster SRT generation with edit tags
- Less VRAM thrashing from repeated model loading/unloading
- Maintains same quality output

Added dev report documenting the pattern for future engine implementations.
2025-12-06 17:12:33 -03:00
diodiogod d1b093d273 Refactor inline edit tags to use Audio Editor node + fix unified interface
Major changes:
1. Post-processor now uses Audio Editor node instead of calling engine directly
   - Inherits progress bars, caching, tested code
   - Much simpler and more maintainable

2. Fixed unified model interface usage across Step Audio EditX
   - Adapter now loads via unified_model_interface.load_model()
   - Audio Editor node now loads via unified_model_interface.load_model()
   - Both use model_type="tts" for consistent cache keys
   - Prevents duplicate model loading (was loading twice before)

3. Fixed pause tag + edit tag interaction
   - Pause tags split FIRST, then edit tags extracted per segment
   - Allows: "Hello <Laughter> [pause:1] World <Sigh>"
   - Laughter applies to "Hello", Sigh applies to "World"

4. Added lesson to fails document
   - All engines must use unified interface in ALL code paths
   - Cache key must match across adapters/nodes/processors

Bug fixes:
- Missing Dict import in post-processor
- Import path for Audio Editor node (use importlib)
- Progress bars now work during editing

Files modified:
- utils/audio/edit_post_processor.py - refactored to use Audio Editor node
- nodes/step_audio_editx/step_audio_editx_processor.py - pause handling
- engines/adapters/step_audio_editx_adapter.py - unified interface
- nodes/step_audio_editx_special/step_audio_editx_audio_editor_node.py - unified interface
- docs/Dev reports/fails_to_avoid_TTS_Engine_Implementation.md - added lesson
2025-12-05 21:43:05 -03:00
diodiogod 1f629737d2 Implement inline edit tags for Step Audio EditX post-processing
Added support for inline edit tags in TTS text that automatically apply
Step Audio EditX edits to generated audio from ANY engine.

Syntax examples:
- <Laughter:2> - paralinguistic with iterations
- <emotion:happy:1> - emotion edit
- <style:whisper:3> - style edit
- <speed:faster> - speed adjustment
- <Laughter:2|style:whisper> - multiple effects

Key changes:
- Extended step_audio_editx_special_tags.py with EditTag dataclass and iteration parsing
- Created edit_post_processor.py for centralized post-TTS edit application
- Integrated into Step Audio EditX processor with proper pause tag handling
- Pause tags split FIRST, then edit tags extracted per pause-segment
- Reuses already-loaded engine to avoid duplicate loading

Flow:
1. Parse text, split by pause tags first
2. Extract edit tags from each pause-delimited segment
3. Generate TTS with clean text (tags stripped)
4. Post-processor applies edits to segments with tags
5. Assemble final audio

Currently working for Step Audio EditX TTS and SRT nodes.
2025-12-05 21:20:21 -03:00
diodiogod 353c87de55 Fix Step Audio EditX transformers 4.54+ compatibility with simple config fix
Replace complex weight restoration workaround with a simple one-line config fix.

The root cause: Step-Audio-EditX model config was missing 'tie_word_embeddings'
setting, so transformers 4.54+ defaulted to True and tied lm_head to embed_tokens
even though the checkpoint has different weights for each.

Solution: Add 'tie_word_embeddings': false to config.json to prevent tying.

This is much simpler and cleaner than the previous safetensors weight restoration
approach. One line in config.json fixes the issue for all transformers versions.
2025-12-05 12:52:22 -03:00
diodiogod da30410099 Add Step Audio EditX SRT processor with full character switching support
- Create step_audio_editx_srt_processor.py following IndexTTS-2 pattern
- Register Step Audio EditX in unified SRT node (wrapper + processing)
- Add SRT-level progress tracking (job management at subtitle level)
- Build complete voice mapping with alias resolution for character switching
- Handle ComfyUI audio dict format extraction for temp file saving
- Skip internal job tracking in processor when SRT manages it
2025-12-04 16:02:36 -03:00
diodiogod f9c88d7e89 Add Step Audio EditX segment parameter support and fix tooltips
- Add step_audio_editx to PARAMETER_ENGINES for seed and temperature
- Fix engine node tooltips: parameters ARE used in clone mode (not hardcoded)
- Add reference implementation paths to implementation plan
- Update fails doc with latest lessons learned
2025-12-04 13:59:49 -03:00
diodiogod b550b5b3f8 Fix generation_info consistency across IndexTTS and Step Audio EditX
Make both engines follow ChatterBox 23-Lang modular pattern:

**Step Audio EditX:**
- Update combine_audio_segments() to use ChunkCombiner with return_info=True
- Return (audio, chunk_info) tuple when requested
- Fix single segment shape handling (ensure 2D [channels, samples])

**IndexTTS:**
- Add combine_audio_segments() method using ChunkCombiner
- Update process_text() to accept return_info parameter
- Build chunk_info from text segments and return timing data

**Unified Node:**
- Call both engines with return_info=True
- Use ChunkTimingHelper.enhance_generation_info() for detailed reports
- Clean text without tags before calculating length

**Documentation:**
- Add generation_info consistency requirement to fails document
- Document correct pattern: ChunkCombiner + ChunkTimingHelper
- Note wrong pattern: inline torch.cat without timing

Now both engines provide detailed timing reports like F5-TTS and ChatterBox.
2025-12-04 09:51:10 -03:00
diodiogod 701f98ca8a Remove automatic __del__ unload from IndexTTS and Step Audio EditX engines
Models should only unload when explicitly requested (Clear VRAM button) or when
switching engines - NOT automatically after generation completes.

__del__ was causing models to unload immediately after wrapper instance goes
out of scope, preventing model reuse between generations.

Pattern: F5-TTS and ChatterBox don't have __del__, only Index2 and StepAudio had it.
Removed to match correct behavior.
2025-12-04 09:18:25 -03:00
diodiogod b0b41e464f Fix 8-bit quantization device movement error
- Wrap .to() calls in try-except for quantized models
- Show warning only once per engine instance
- Add quantization notes to fails document
2025-12-04 01:37:48 -03:00
diodiogod 9128899a15 Fix Step Audio EditX character switching bug
- Configure character parser with available characters and language defaults like IndexTTS
- Add characters from text tags to available_characters to prevent fallback to "narrator"
- Add fallback voice mapping entries for characters without voice files
- Update fails document with character switching implementation lessons
2025-12-04 01:17:44 -03:00
diodiogod 89d12285b5 Add Step Audio EditX TTS engine implementation
Implemented Step Audio EditX integration with the following components:

Engine Implementation:
- Bundled Step Audio EditX reference code in step_audio_editx_impl/
- Created engine wrapper (step_audio_editx.py) with clone/edit methods
- Created adapter (step_audio_editx_adapter.py) for unified interface
- Created processor (step_audio_editx_processor.py) for TTS Suite integration

Model Management:
- Created downloader (step_audio_editx_downloader.py) for:
  - Main Step-Audio-EditX model (3B LLM + CosyVoice vocoder)
  - Step-Audio-Tokenizer files (linguistic_tokenizer.npy, speech_tokenizer_v1.onnx)
  - FunASR-Paraformer model with correct config for bundled funasr_detach
- Fixed FunASR config to use bundled class names (ParaformerStreaming, WavFrontendOnline, SpecAugLFR)
- Added auto-download for all required models on first use
- Updated unified_model_interface.py to auto-download Step-Audio-EditX components

Node Configuration:
- Created Step Audio EditX engine config node
- Registered in nodes.py and unified TTS text node

Known Issues:
- LLM generation hangs during inference despite:
  - torch.no_grad() wrapper
  - torch.cuda.synchronize()
  - Eager attention mode (Step1ForCausalLM doesn't support SDPA)
  - Reduced max_new_tokens
  - Removed logits processor
- Model loads successfully, all components initialized correctly
- Issue appears to be with transformers.generate() call itself
- Requires further investigation of Step1ForCausalLM compatibility

Files Modified:
- nodes.py: Added Step Audio EditX registration
- requirements.txt: Added FunASR dependencies
- utils/models/unified_model_interface.py: Added Step Audio EditX factory
- Various Step Audio EditX implementation files

Model Downloads:
- Step-Audio-EditX: 7GB (3B LLM + vocoder)
- FunASR-Paraformer: 881MB (from custom HF repo with fixed config)
- Step-Audio-Tokenizer: Bundled with main model download
2025-12-03 13:27:02 -03:00
diodiogod 43d1342b4b Fix: Move TIER2-3_REFACTOR_PLAN.md to correct directory
Remove incorrectly escaped 'Dev\ reports' directory
2025-11-14 23:02:11 -03:00
diodiogod a8c62f2307 TIER 3: Complete architecture standardization for model loading
Implement standardized factory infrastructure enabling future engines:

1. ModelLoadConfig dataclass - Single canonical config class for all factories
   - Replaces duplicate UnifiedModelConfig
   - Contains device, model_name, language, model_path, repo_id, additional_params
   - Device resolution in __post_init__ for consistency

2. Engine capability registry - Data-driven engine specifications
   - Defines supports_voice_conversion, multilingual_model_switching, corruption recovery
   - Enables generic error handling without hardcoded engine checks
   - Covers all 7 TTS engines + IndexTTS-2

3. Fallback handler utility - Reusable fallback chain for graceful degradation
   - Try local → download → fallback language pattern
   - Eliminates duplicate fallback code across engines
   - Used by future engines automatically

4. Exception hierarchy - Standardized error types
   - TTSModelLoadingError base class
   - Specific types: NotFoundError, DeviceError, FormatError, InitializationError, LanguageNotSupportedError

Architecture benefits:
- All 8 factories now accept config: ModelLoadConfig instead of **kwargs
- Type-safe, clear factory signatures
- Future engines follow identical pattern
- No deprecated code left behind
- ComfyUI model manager handles both old and new patterns

Testing:
- All 7 TTS engines working correctly
- Device switching and caching working
- No syntax errors, all files compile

Note: SmartModelLoader still in use (Tier 2 cleanup pending) causing benign double-loads on some engines.
2025-11-14 10:10:52 -03:00
diodiogod dfecc41910 docs: Add model loading architecture analysis and refactor recommendations
- MODEL_LOADING_ANALYSIS.md: Comprehensive technical analysis of current system
  - Adoption rates, factory patterns, device management, caching strategies
  - 8 critical issues identified with severity levels
  - File impact analysis

- MODEL_LOADING_REFACTOR_REPORT.md: Executive summary with actionable recommendations
  - Tier 1 (quick wins): auto device caching, device comparison, resolution consolidation
  - Tier 2 (medium effort): cache unification, key collision fix, error standardization
  - Tier 3 (major refactor): factory signatures, capability registry, fallback handlers
  - Priority matrix and implementation timeline
2025-11-13 20:47:00 -03:00
diodiogod 373983993d Move COMFYUI_REGRESSION_FINDINGS.md to proper docs location 2025-09-26 15:44:43 -03:00
diodiogod e129c5314b IndexTTS-2 implementation with modular character parser
MAJOR: IndexTTS-2 TTS engine integration
- Core IndexTTS engine with unified model interface integration
- Auto-downloader for HuggingFace models + GitHub source code
- Engine adapter with emotion support [Alice:angry_bob] syntax
- Cache integration for IndexTTS-2 parameters
- Factory registration for proper model management

MAJOR: Character parser modularization (930 → 300 lines each)
- Split into base_parser.py, language_resolver.py, segment_processor.py, validation.py
- Added emotion support with backward compatibility
- New split_by_character_with_emotions() method for advanced engines
- Flexible tag parsing: [de:Alice:angry_bob] support
- Language disambiguation to avoid Alice vs language code conflicts
- Full backward compatibility maintained

FEATURES:
- IndexTTS-2 emotion disentanglement (speaker vs emotion separation)
- Duration control and precise voice cloning
- Multi-modal emotion control (audio refs, text, vectors)
- Character switching with emotion references
- All official IndexTTS-2 parameters exposed

DOCS: Implementation plan and architectural TODO items added
2025-09-11 20:26:51 -03:00
diodiogod d01e5cb807 Refactor comfyui_model_wrapper.py into modular architecture
- Split 970-line monolith into focused modules following 500-600 line policy
- Created utils/models/comfyui_model_wrapper/ directory structure:
  - base_wrapper.py (302 lines): Core ComfyUIModelWrapper class
  - model_manager.py (318 lines): ComfyUITTSModelManager class
  - cache_utils.py (28 lines): Cache invalidation utilities
  - engine_handlers/: Engine-specific memory management
    - higgs_audio_handler.py: CUDA graph management and unload blocking
    - vibevoice_handler.py: RAM cleanup and complete deletion logic
    - generic_handler.py: Standard CPU migration for other engines
- Fixed engine routing bug where stateless_tts wrappers weren't using HiggsAudioHandler
- Maintained full backward compatibility with existing imports
- All engine-specific behaviors preserved (VibeVoice deletion, Higgs CUDA graphs)
- Updated PROJECT_INDEX.md to reflect modular structure
2025-09-11 14:57:52 -03:00
diodiogod 127f46e0ee Fix ChatterBox Official 23-Lang SRT processing implementation
- Complete SRT processor following Higgs Audio modular pattern
- Fixed cache system to recognize chatterbox_official_23lang engine type
- Corrected timing engine parameter format and method calls
- Fixed audio assembly to use assemble_smart_natural method
- Added key mapping for report generator compatibility
- Removed debug output for clean production logs
- Added comprehensive TODO.md documenting architectural inconsistencies
2025-09-05 11:35:16 -03:00
diodiogod 1ae879d134 Version 4.6.24
Update VibeVoice 7B to official Microsoft repository

Technical details:
- Change repo from WestZhang/VibeVoice-Large-pt to microsoft/VibeVoice-Large
- Update documentation and downloader references
- Maintain backward compatibility with existing installations
2025-09-01 10:44:16 -03:00
diodiogod 57330f9621 Version 4.5.30
Fix F5-TTS model name case sensitivity issue

- Fix uppercase V1 being rejected in model validation
- Add regex normalization for version numbers (V1 -> v1)
- Ensure backward compatibility with saved workflows
2025-08-28 23:31:52 -03:00
diodiogod b371c11b95 Version 4.5.27
Fix Higgs Audio model management with CUDA Graph compatibility toggle

Technical implementation:
- Add enable_cuda_graphs parameter to resolve CUDA Graph vs model unloading conflict
- Implement DynamicCache support for safe memory management mode
- Fix DynamicCache compatibility issues (reset, seq_length, copying)
- Add conditional cache creation and cleanup logic
- Update tooltip with accurate performance trade-offs (12 vs 55+ tok/s)
2025-08-28 17:41:42 -03:00
diodiogod 4197e73bb0 Improve version bump system with better dry-run and documentation
Technical improvements:
- Refactor version_utils.py to extract changelog generation logic
- Add preview_changelog_entry method for dry-run testing
- Enhance dry-run to show actual categorized changelog preview
- Fix code duplication by using shared content generation method

Documentation improvements:
- Consolidate version bump documentation in BUMP_SCRIPT_INSTRUCTIONS.md
- Add comprehensive multiline examples and auto-increment usage
- Add auto-categorization keyword explanations and writing tips
- Add troubleshooting section with common issues and solutions
- Remove redundant CLAUDE_VERSION_MANAGEMENT_GUIDE.md file
2025-08-27 20:19:47 -03:00
diodiogod f6a6cfb2f0 Fix Higgs Audio 2 engine integration issues
- Fix HiggsAudioEngineNode return type from HIGGS_AUDIO_ENGINE to TTS_ENGINE for unified node compatibility
- Remove duplicated parameters: seed, enable_cache, enable_chunking, max_tokens_per_chunk, silence_between_chunks_ms
- Keep engine-specific parameters: max_new_tokens (generation limit), voice_preset, audio_priority, system_prompt
- Update TTS Text node to pass max_chars_per_chunk to Higgs Audio adapter
- Maintain character-based chunking via ImprovedChatterBoxChunker with token-to-char conversion
- Preserve clean separation: universal parameters in TTS Text, engine-specific in Engine nodes

The Higgs Audio Engine Node now properly connects to unified TTS Text and TTS SRT nodes
while maintaining engine-specific generation parameters that other engines don't have.
2025-08-18 18:37:59 -03:00
diodiogod a8cddffd2b Clean up unused code and update PROJECT_INDEX.md with accurate architecture documentation
- Remove unused processor imports (adaptive_processor, continuous_worker_processor) from ChatterBox TTS engine
- Add genuinely used missing files to PROJECT_INDEX.md (smart_loader.py, audio_hash.py)
- Correct misleading parallel processing performance claims in architecture overview
- Add comprehensive POST_V4.2.3_DEVELOPMENT_REVIEW.md documenting 45 commits of architectural changes
- Clarify that sequential processing (batch_size=0) remains optimal despite streaming infrastructure
2025-08-12 22:42:34 -03:00
diodiogod 565a525121 Implement stateless ChatterBox wrapper for thread-safe parallel processing
- Created StatelessChatterBoxWrapper to eliminate shared state corruption
- Wrapper calculates conditions fresh for each generation (no self.conds)
- Updated streaming processor to use stateless wrapper with batch_size control
- Modified streaming model manager to provide stateless wrappers
- Updated SRT nodes to use stateless generation in streaming mode
- Added comprehensive tensor detaching to prevent autograd issues
- Initial testing shows parallel generation working without immediate crashes

Note: Requires extensive testing to confirm stability with high worker counts
2025-08-11 22:52:15 -03:00
diodiogod 5308ba8d5a Implement universal streaming system architecture
- Create universal streaming module in utils/streaming/
- Implement StreamingCoordinator to replace all format-specific routers
- Create universal StreamingSegment data structure (no more format conversions)
- Implement UniversalWorkQueueProcessor for engine-agnostic parallel processing
- Add ChatterBox streaming adapter preserving all existing functionality
- Add F5-TTS streaming adapter with language model switching support
- Document complete streaming integration plan in F5TTS_STREAMING_INTEGRATION_PLAN.md

This creates the foundation for eliminating the current spaghetti code where
each node type needs its own router and format conversions. The universal
system works with any engine through adapters while preserving all existing
functionality.
2025-08-10 11:30:44 -03:00
diodiogod 8a00983418 Remove unused dynamic_worker_manager.py and update streaming architecture docs
- Remove orphaned dynamic_worker_manager.py (never imported/used)
- Update PROJECT_INDEX.md to reflect file removal
- Enhance STREAMING_ARCHITECTURE.md with feasibility analysis for F5-TTS
- Document that StreamingWorkQueueProcessor is the active implementation
- Confirm streaming architecture is engine-extensible via adapter pattern
2025-08-10 02:40:29 -03:00
diodiogod ab8355ef83 Reorganize documentation files into Dev reports folder 2025-08-08 14:54:50 -03:00
diodiogod b83f718475 Enhance version bump script with separate commit/changelog descriptions and auto-increment
- Make separate commit/changelog descriptions the default (no more broken auto-categorization)
- Add auto-increment support: use 'patch', 'minor', 'major' instead of manual version numbers
- Fix categorization algorithm that was misclassifying bug fixes as Added items
- Add simple mode to bypass automatic categorization entirely
- Fix manual changelog entry for v3.4.2 (was previously miscategorized)
- Update documentation with new recommended usage patterns
2025-08-05 00:26:24 -03:00
diodiogod 29a3a1e513 Fix version bump script multiline parsing and update documentation
- Enhanced keyword matching with domain-specific terms for better categorization
- Added context-aware parsing for emoji section headers
- Fixed title skipping to prevent main description from being categorized
- Changed default from 'Fixed' to 'Added' for feature releases
- Corrected v3.4.0 changelog formatting manually
- Updated version management guide with script improvements and lessons learned
2025-08-02 15:29:31 -03:00
diodiogod 1f3fdc4d10 Version 3.0.7
Improve F5-TTS Edit parameter organization and fix RMS normalization
Move target_rms to advanced options as post_rms_normalization for clarity
Fix RMS normalization to preserve original segments volume
Remove non-functional speed parameter from edit mode
Add comprehensive parameter migration checklist documentation
2025-07-15 13:52:13 -03:00
diodiogod 1465084d69 Version 3.0.4: Fix ChatterBox import detection to find bundled packages 2025-07-14 22:11:41 -03:00
diodiogod 46a4373495 Fix Advanced Usage Examples in SRT_IMPLEMENTATION.md
- Replace confusing Python code snippets with actual ComfyUI usage instructions
- Convert Video Dubbing, Presentation Audio, and Voice Cloning examples to ComfyUI parameter settings
- Add clear 'Best for' descriptions and use cases for each timing mode
- Maintain Python code in Technical Implementation and API sections (appropriate for developers)
- Improve user experience by showing actual workflow steps instead of code
2025-07-14 12:18:37 -03:00
diodiogod 0534388094 Fix formatting issue in SRT_IMPLEMENTATION.md Basic Usage section
- Replace multi-line string with explicit newline characters in code example
- Prevents markdown rendering issues with nested quotes in code blocks
- Improves code clarity and cross-platform compatibility
2025-07-14 12:15:50 -03:00
diodiogod ee0d4aa6bd Complete restructure of SRT_IMPLEMENTATION.md documentation
Improvements:
- Fix code block formatting and typos (high-quality??, Lowesr quality, timming)
- Add comprehensive table of contents with anchor links
- Reorganize structure: Quick Start → Quick Reference → Usage → Technical Details
- Move examples and quick start to top for better user experience
- Add professional quick reference tables for timing modes and parameters
- Enhance API reference section with better code examples
- Improve troubleshooting section with clear problem/solution format
- Polish language and maintain professional tone throughout
- Add visual hierarchy with emojis and better formatting
- Backup original file as SRT_IMPLEMENTATION_OLD.md

The document now serves both as quick reference for experienced users and comprehensive guide for newcomers.
2025-07-14 12:04:30 -03:00
diodiogod c88b223144 Major README.md redesign and version management automation
README.md improvements:
- Remove template boilerplate and unused badge references
- Reorganize content with clear 'What's New' section highlighting v3.0+ features
- Add 5-minute Quick Start guide for immediate setup
- Replace text workflow examples with real downloadable files
- Add workflow placeholders for Audio Wave Analyzer + F5 Speech Edit workflows
- Fix SRT_IMPLEMENTATION.md path reference
- Better visual hierarchy and professional structure

Version management automation:
- Add automated version bumping scripts with multiline support
- Create comprehensive version management guide
- Support interactive mode, file input, and detailed changelog generation
- Automatic categorization of changelog entries (Added/Fixed/Changed/Removed)
- Rollback protection and validation
- Update CLAUDE.md to reference external documentation (token optimization)
2025-07-14 11:09:33 -03:00
diodiogod c0e565db9c Release v3.0.0: Complete F5-TTS and Audio Analyzer implementation
- Finalized F5-TTS integration with full node implementation
- Completed Audio Wave Analyzer with interactive waveform visualization
- Enhanced documentation and user guides
- Version bump to 3.0.0 reflecting major feature additions
2025-07-13 11:32:26 -03:00
diodiogod 7b44654250 Rename Audio Analyzer to Audio Wave Analyzer and fix F5-TTS nfe_step bug
- Renamed '🎵 Audio Analyzer' to '🌊 Audio Wave Analyzer' throughout project
- Updated all node display names, tooltips, documentation, and web interface
- Preserved class names and internal identifiers for ComfyUI compatibility
- Fixed nfe_step bug in F5-TTS nodes: limited max value to 71 to prevent ODE solver issues
- Added validation clamping and warning messages in F5-TTS Node and F5-TTS Edit Node
- Updated tooltips to warn about ODE solver issues above 71
2025-07-13 01:02:08 -03:00
diodiogod 232d423381 update files 2025-07-12 23:42:45 -03:00