- Filter engine node dropdown to only show valid Step Audio EditX models (those with CosyVoice vocoder)
- Prevents internal components like FunASR-Paraformer from appearing in model selection
- Add proper 'local:' prefix handling in adapter to resolve model paths correctly
- Respects extra_model_paths.yaml configuration for yaml-configured paths
- Fixes error when selecting 'local:Step-Audio-EditX' from dropdown
Root cause: SRT parser removed ALL <...> tags as HTML, including edit tags
- Line 204 used blanket regex '<[^>]+>' that stripped everything
- This removed <Laughter:3>, <style:whisper:2>, etc. before TTS processing
Fix:
- Modified regex to preserve edit tags with alphanumeric+colon+pipe structure
- New pattern: '<(?![a-zA-Z][a-zA-Z0-9_\-\s:|\d]*>)[^>]+>'
- Still removes actual HTML tags like <b>, <i>, <font>, etc.
- Preserves edit tags: <Laughter:2>, <style:whisper>, <emotion:happy>, <speed:faster>
Also added debug logging to verify tag extraction in processor
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.
- Filter out empty audio segments before processing to prevent dimension errors
- Normalize tensor dimensions before crossfade operations
- Handle mixed 1D/2D tensors properly in both simple and crossfade concatenation
- Fixes 'too many indices for tensor of dimension 1' error
- Prevents empty segments from causing 0.00s audio generation issues
- Handle mixed 1D/2D tensor dimensions properly in concatenation mode
- Fix IndexError when accessing dimension 1 on 1D tensors
- Add proper tensor normalization for consistent concatenation
- Support both mono (1D) and stereo (2D) audio segments in same sequence
Fix SRT overlapping functionality system-wide
Technical implementation:
- Add unified timing mode routing in AudioAssemblyEngine with assemble_by_timing_mode()
- Fix ChatterBox Official 23-Lang processor to use correct assembly method for pad_with_silence mode
- Now properly uses assemble_with_overlaps() instead of assemble_smart_natural() for overlaps
- All engines (ChatterBox, F5-TTS, Higgs Audio, VibeVoice) now handle overlaps consistently
- Resolves audio being cut off when SRT segments overlap in timing
- Create utils/timing/overlap_detection.py with SRTOverlapHandler class
- Centralize overlap detection and smart_natural fallback logic
- Update ChatterBox, F5-TTS, and Higgs Audio to use modular utility
- Remove duplicate _detect_overlaps methods from all engines
- Ensure consistent overlap handling behavior across engines
Now all engines use the same logic for detecting overlapping SRT segments
and automatically falling back from smart_natural to pad_with_silence mode.
- Enhanced geometric feature extraction for comprehensive mouth shape analysis
- Implemented vowel classification (A, E, I, O, U) based on lip geometry
- Added new SRT format option to display detected viseme sequences
- New toggle for enabling/disabling viseme detection
- Caching system supports viseme detection state
- Viseme sequences grouped for readability (A3-E2-I-O4)
Technical implementation:
- Extract 8 geometric features: lip width/height, mouth area, roundedness, curvature
- Rule-based vowel classification with confidence scoring
- Frame-by-frame viseme detection integrated with existing movement analysis
- ~20% performance impact when enabled, fully cached for repeated analysis