Integrate Silero TTS and add infrastructure for Chatterbox/Kokoro
INTEGRATED: Silero TTS (tts-1-silero) - Added silero_wrapper class to speech.py for PyTorch Hub integration - CPU-friendly, no GPU required (48kHz sample rate) - Supports 5 languages: English (117 speakers), Russian, German, Spanish, French - Loads on-demand via torch.hub from snakers4/silero-models - Added 6 OpenAI-compatible voice mappings (alloy, echo, fable, etc.) PREPARED: Chatterbox & Kokoro TTS - Added dependencies to requirements.txt: * git+https://github.com/resemble-ai/chatterbox.git * transformers>=4.35.0 (for Kokoro) * huggingface-hub[cli] (for model downloads) - Created Makefile targets for downloading models - Created test targets for all three new engines Makefile Enhancements: - make voices-silero: Download Silero models (en, ru, de, es, fr) - make test-silero: Test Silero TTS endpoint - make voices-chatterbox: Download Chatterbox models via HF CLI - make test-chatterbox: Test Chatterbox with emotion control - make voices-kokoro: Download Kokoro models via HF CLI - make test-kokoro: Test Kokoro fast synthesis speech.py Changes: - Added silero_wrapper class with tts() method - Added tts-1-silero model handler in generate_speech() - Registered tts-1-silero model in app - Added PCM media type for Silero (48000 Hz) - Global state: silero_model, silero_speakers dict Configuration: - Updated voice_to_speaker.default.yaml with tts-1-silero section - Mapped all 6 OpenAI voices to Silero speakers (en_0 through en_5) Documentation: - Updated docs/MODELS.md: Silero marked as ✅ INTEGRATED - Updated roadmap: Phase 1 task 3 completed - Updated status footer: 3 models rescued - Added integration examples and Makefile commands Next Steps: - Test Silero integration in Docker - Implement Chatterbox emotion control engine - Implement Kokoro fast decoder engine
This commit is contained in:
parent
2d1e1b344f
commit
848c2c6cb5
5 changed files with 327 additions and 288 deletions
61
Makefile
61
Makefile
|
|
@ -14,7 +14,7 @@ REMOTE_USER ?= $(USER)
|
|||
REMOTE_PATH ?= ~/uncloseai-speech
|
||||
CONTAINER_NAME ?= uncloseai-speech-server-1
|
||||
|
||||
.PHONY: help deploy sync restart logs test clean stop start voices voices-piper voices-xtts push-all
|
||||
.PHONY: help deploy sync restart logs test clean stop start voices voices-piper voices-xtts voices-kokoro test-kokoro voices-silero test-silero voices-chatterbox test-chatterbox push-all
|
||||
|
||||
help:
|
||||
@echo "🦝 Raccoon TTS Mission - Development Commands"
|
||||
|
|
@ -31,6 +31,12 @@ help:
|
|||
@echo " make voices - Download all voices (Piper + XTTS)"
|
||||
@echo " make voices-piper - Download Piper voices only"
|
||||
@echo " make voices-xtts - Download XTTS voices and samples"
|
||||
@echo " make voices-kokoro - Download Kokoro models"
|
||||
@echo " make test-kokoro - Test Kokoro fast TTS"
|
||||
@echo " make voices-silero - Download Silero models (en, ru, de, es, fr)"
|
||||
@echo " make test-silero - Test Silero TTS endpoint"
|
||||
@echo " make voices-chatterbox - Download Chatterbox models"
|
||||
@echo " make test-chatterbox - Test Chatterbox TTS with emotion control"
|
||||
@echo ""
|
||||
@echo "Container:"
|
||||
@echo " make start - Start Docker container"
|
||||
|
|
@ -105,6 +111,23 @@ voices-xtts:
|
|||
ssh $(REMOTE_USER)@$(REMOTE_HOST) "docker exec $(CONTAINER_NAME) bash -c 'cd /app && ./scripts/download_samples.sh'"
|
||||
@echo "✅ XTTS speaker samples downloaded!"
|
||||
|
||||
voices-kokoro:
|
||||
@echo "🎤 Downloading Kokoro TTS models..."
|
||||
ssh $(REMOTE_USER)@$(REMOTE_HOST) "docker exec $(CONTAINER_NAME) bash -c '\
|
||||
mkdir -p /app/voices/kokoro && \
|
||||
cd /app/voices/kokoro && \
|
||||
huggingface-cli download hexgrad/kokoro-82m --local-dir .'"
|
||||
@echo "✅ Kokoro models downloaded!"
|
||||
|
||||
test-kokoro:
|
||||
@echo "🧪 Testing Kokoro fast synthesis..."
|
||||
curl -X POST http://$(REMOTE_HOST):8000/v1/audio/speech \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"model":"tts-1-kokoro","voice":"alloy","input":"Testing Kokoro fast decoder synthesis"}' \
|
||||
-o /tmp/kokoro_test.mp3
|
||||
@echo "✅ Test complete! Playing audio..."
|
||||
@firefox /tmp/kokoro_test.mp3 || mpv /tmp/kokoro_test.mp3 || echo "Install firefox or mpv to play audio"
|
||||
|
||||
test-xtts:
|
||||
@echo "🧪 Testing XTTS HD endpoint (this may take 1-2 minutes on first run)..."
|
||||
curl -X POST http://$(REMOTE_HOST):8000/v1/audio/speech \
|
||||
|
|
@ -119,3 +142,39 @@ push-all:
|
|||
git push origin main
|
||||
git push github main
|
||||
@echo "✅ Pushed to origin and github!"
|
||||
|
||||
voices-silero:
|
||||
@echo "🎤 Downloading Silero TTS models..."
|
||||
ssh $(REMOTE_USER)@$(REMOTE_HOST) "docker exec $(CONTAINER_NAME) bash -c '\
|
||||
cd /app/voices && \
|
||||
python3 -c \"import torch; \
|
||||
for lang in [\"\"en\"\", \"\"ru\"\", \"\"de\"\", \"\"es\"\", \"\"fr\"\"]: \
|
||||
model, *_ = torch.hub.load(repo_or_dir=\"\"snakers4/silero-models\"\", model=\"\"silero_tts\"\", language=lang, speaker=\"\"v4_\"\"+lang if lang==\"\"en\"\" else \"\"v3_\"\"+lang); \
|
||||
print(f\"\"Downloaded Silero {lang}\"\")\"'"
|
||||
@echo "✅ Silero models downloaded!"
|
||||
|
||||
test-silero:
|
||||
@echo "🧪 Testing Silero endpoint..."
|
||||
curl -X POST http://$(REMOTE_HOST):8000/v1/audio/speech \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"model":"tts-1-silero","voice":"alloy","input":"Testing Silero fast synthesis"}' \
|
||||
-o /tmp/silero_test.mp3
|
||||
@echo "✅ Test complete! Playing audio..."
|
||||
@firefox /tmp/silero_test.mp3 || mpv /tmp/silero_test.mp3 || echo "Install firefox or mpv to play audio"
|
||||
|
||||
voices-chatterbox:
|
||||
@echo "🎤 Downloading Chatterbox models..."
|
||||
ssh $(REMOTE_USER)@$(REMOTE_HOST) "docker exec $(CONTAINER_NAME) bash -c '\
|
||||
mkdir -p /app/voices/chatterbox && \
|
||||
cd /app/voices/chatterbox && \
|
||||
huggingface-cli download resemble-ai/chatterbox --local-dir .'"
|
||||
@echo "✅ Chatterbox models downloaded!"
|
||||
|
||||
test-chatterbox:
|
||||
@echo "🧪 Testing Chatterbox with emotion control..."
|
||||
curl -X POST http://$(REMOTE_HOST):8000/v1/audio/speech \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"model":"tts-1-chatter","voice":"alloy","input":"Testing emotional speech synthesis"}' \
|
||||
-o /tmp/chatterbox_test.mp3
|
||||
@echo "✅ Test complete! Playing audio..."
|
||||
@firefox /tmp/chatterbox_test.mp3 || mpv /tmp/chatterbox_test.mp3 || echo "Install firefox or mpv to play audio"
|
||||
|
|
|
|||
446
docs/MODELS.md
446
docs/MODELS.md
|
|
@ -2,47 +2,68 @@
|
|||
|
||||
**Raccoon Mission:** Rescue abandoned open-source TTS models and integrate them into UncloseAI Speech
|
||||
|
||||
This document tracks all TTS engines under consideration for integration. Each engine is evaluated for:
|
||||
- License compatibility (AGPL-friendly)
|
||||
- Quality and speed
|
||||
- Maintenance status (active or abandoned)
|
||||
- Integration effort
|
||||
## Documentation Index
|
||||
|
||||
### Comprehensive Research
|
||||
- 📊 [TTS Models Overview & Research](research/tts-models-overview.md) - Complete comparison matrix, feature analysis, and integration roadmap
|
||||
|
||||
### Individual Model Documentation
|
||||
Each model has detailed documentation covering technical specs, integration status, and Raccoon Mission notes:
|
||||
|
||||
**Currently Integrated:**
|
||||
- 📄 [Coqui TTS (XTTS-v2)](models/coqui-tts.md) - High-quality multilingual TTS with voice cloning
|
||||
- 📄 [Piper TTS](models/piper-tts.md) - Fast, lightweight neural TTS with 100+ voices
|
||||
- 📄 [Silero TTS](models/silero-tts.md) - CPU-friendly, actively maintained, 5 languages (NEW! ✨)
|
||||
|
||||
**High Priority Candidates:**
|
||||
- 📄 [Chatterbox](models/chatterbox.md) - Emotion control, 23 languages, zero-shot cloning
|
||||
- 📄 [Kokoro TTS](models/kokoro-tts.md) - Fast decoder-only architecture, Apache-2.0
|
||||
|
||||
**Specialized Models:**
|
||||
- 📄 [Mimic 3](models/mimic3.md) - Privacy-focused, offline, lightweight
|
||||
- 📄 [eSpeak NG](models/espeak-ng.md) - 100+ languages, accessibility-focused
|
||||
- 📄 [Maya1](models/maya1.md) - Indic languages, diverse accents
|
||||
- 📄 [Step-Audio-EditX](models/step-audio-editx.md) - LLM-based audio editing (experimental)
|
||||
|
||||
**Historical/Archived:**
|
||||
- 📄 [Mozilla TTS](models/mozilla-tts.md) - Superseded by Coqui TTS
|
||||
- 📄 [Tortoise TTS](models/tortoise-tts.md) - Studio-quality but slow (archival)
|
||||
|
||||
---
|
||||
|
||||
## Currently Integrated
|
||||
|
||||
### 1. Piper TTS ✅
|
||||
|
||||
> 📖 **See [detailed documentation](models/piper-tts.md)** for comprehensive technical specs and integration guide
|
||||
|
||||
**Status:** Working with absolute paths
|
||||
**License:** MIT
|
||||
**Original Project:** rhasspy/piper (abandoned)
|
||||
**Fork:** OHF-Voice/piper1-gpl v1.3.0
|
||||
**Current Package:** PyPI `piper-tts>=1.2.0`
|
||||
**Repository:** https://github.com/rhasspy/piper
|
||||
**Model Hub:** https://huggingface.co/rhasspy/piper-voices
|
||||
|
||||
**Description:**
|
||||
Fast, local neural text-to-speech engine using ONNX runtime. Originally created by Rhasspy for voice assistants, now community-maintained. One of the most widely-deployed open-source TTS engines.
|
||||
|
||||
**Key Features:**
|
||||
**Features:**
|
||||
- Fast CPU-based neural TTS
|
||||
- ~100+ high-quality voices across 40+ languages
|
||||
- Multilingual support (English, Spanish, French, German, Italian, Russian, Polish, Ukrainian, Chinese, Japanese, Korean, and many more)
|
||||
- ONNX runtime for efficient inference
|
||||
- ~100+ high-quality voices
|
||||
- Multilingual support
|
||||
- ONNX runtime
|
||||
- Low memory footprint (~100MB per voice)
|
||||
- No GPU required
|
||||
- Production-ready quality
|
||||
|
||||
**Voices Available:**
|
||||
- English (US, GB, multiple accents)
|
||||
- Spanish, French, German, Italian
|
||||
- Russian, Polish, Ukrainian
|
||||
- Chinese, Japanese, Korean
|
||||
- Many more languages
|
||||
|
||||
**Model Source:**
|
||||
- HuggingFace: `rhasspy/piper-voices`
|
||||
- Direct download: `https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/`
|
||||
- Over 100 voice models available
|
||||
- Multiple quality levels (low/medium/high)
|
||||
|
||||
**Integration:**
|
||||
- Used for `tts-1` model (fast, good quality)
|
||||
- Used for `tts-1` model (fast, lower quality)
|
||||
- Models stored in `/app/voices/en/en_US/libritts_r/medium/`
|
||||
- Configuration via absolute paths in `voice_to_speaker.yaml`
|
||||
- Download with: `make voices-piper`
|
||||
|
||||
**Example Config:**
|
||||
```yaml
|
||||
|
|
@ -52,58 +73,42 @@ tts-1:
|
|||
speaker: 79
|
||||
```
|
||||
|
||||
**Performance:**
|
||||
- Speed: ~0.05x RTF (real-time factor)
|
||||
- Memory: 100-200MB per model
|
||||
- Latency: <100ms for short sentences
|
||||
|
||||
**Raccoon Notes:**
|
||||
- Original rhasspy project abandoned by creator
|
||||
- Original rhasspy project abandoned
|
||||
- OHF-Voice fork has no PyPI package
|
||||
- Community maintaining model repository on HuggingFace
|
||||
- Need to create our own PyPI package or vendor the code
|
||||
- Mirror all voices to prevent HuggingFace dependency
|
||||
- Consider creating uncloseai-piper fork for long-term stability
|
||||
|
||||
**Raccoon Priority:** ⭐⭐⭐⭐⭐ (Production-ready, widely used)
|
||||
|
||||
---
|
||||
|
||||
### 2. Coqui TTS (XTTS v2) ✅
|
||||
### 2. Coqui XTTS v2 ✅
|
||||
|
||||
> 📖 **See [detailed documentation](models/coqui-tts.md)** for comprehensive technical specs and integration guide
|
||||
|
||||
**Status:** Integrated as tts-1-hd
|
||||
**License:** MPL-2.0 / Apache-2.0 (model-dependent)
|
||||
**Original Project:** coqui-ai/TTS (company shut down, archived)
|
||||
**Current Package:** PyPI `coqui-tts[languages]`
|
||||
**Repository:** https://github.com/coqui-ai/TTS
|
||||
**Model Hub:** https://huggingface.co/coqui/XTTS-v2
|
||||
|
||||
**Description:**
|
||||
Professional-grade multilingual TTS with voice cloning capabilities. Originally developed by Coqui AI (a commercial venture spun out of Mozilla TTS), now community-maintained after company shutdown in 2024. XTTS v2 is the flagship model.
|
||||
|
||||
**Key Features:**
|
||||
- High-quality multilingual TTS (16+ languages)
|
||||
- Voice cloning from 6+ second audio samples
|
||||
- Zero-shot voice conversion
|
||||
**Features:**
|
||||
- High-quality multilingual TTS
|
||||
- Voice cloning from 6-second samples
|
||||
- Emotional prosody control
|
||||
- Streaming TTS support
|
||||
- GPU accelerated (NVIDIA/ROCm)
|
||||
- Fine-tuning capabilities
|
||||
- ~1.8GB model size
|
||||
|
||||
**Languages:**
|
||||
English, Spanish, French, German, Italian, Portuguese, Polish, Turkish, Russian, Dutch, Czech, Arabic, Chinese (Mandarin), Japanese, Hungarian, Korean, Hindi
|
||||
- English, Spanish, French, German, Italian, Portuguese
|
||||
- Polish, Turkish, Russian, Dutch, Czech
|
||||
- Arabic, Chinese (Mandarin), Japanese, Hungarian, Korean, Hindi
|
||||
|
||||
**Model Source:**
|
||||
- HuggingFace: `coqui/XTTS-v2`
|
||||
- Auto-downloaded on first use
|
||||
- Pre-trained model: ~1.8GB
|
||||
- Speaker embeddings: user-provided WAV files
|
||||
|
||||
**Integration:**
|
||||
- Used for `tts-1-hd` model (slower, high quality)
|
||||
- Used for `tts-1-hd` model (slow, high quality)
|
||||
- Voice cloning with custom WAV samples
|
||||
- Language auto-detection with `langdetect`
|
||||
- Download speaker samples with: `make voices-xtts`
|
||||
|
||||
**Example Config:**
|
||||
```yaml
|
||||
|
|
@ -114,237 +119,71 @@ tts-1-hd:
|
|||
language: en
|
||||
```
|
||||
|
||||
**Performance:**
|
||||
- Speed: ~0.3x RTF (GPU), ~1.5x RTF (CPU)
|
||||
- Memory: 2GB GPU VRAM / 4GB RAM (CPU)
|
||||
- Latency: 1-5 seconds for first chunk
|
||||
- Quality: Excellent, human-like prosody
|
||||
|
||||
**Raccoon Notes:**
|
||||
- Coqui company shut down in 2024, repository archived
|
||||
- Repository still works perfectly, code is stable
|
||||
- Community forks emerging (XTTS-v2 continuation projects)
|
||||
- Must mirror XTTS-v2 weights before they disappear from HuggingFace
|
||||
- High priority to fork as uncloseai-xtts for long-term maintenance
|
||||
- Large, active community still using it
|
||||
|
||||
**Raccoon Priority:** ⭐⭐⭐⭐⭐ (Best quality voice cloning, critical to preserve)
|
||||
- Coqui company shut down in 2024
|
||||
- Repository archived but code still works
|
||||
- Community forks emerging
|
||||
- Must mirror XTTS-v2 weights before they disappear
|
||||
- Consider forking to uncloseai-xtts
|
||||
|
||||
---
|
||||
|
||||
## High Priority Integration Targets
|
||||
|
||||
### 3. Mozilla TTS 🎯
|
||||
### 3. Silero TTS ✅
|
||||
|
||||
**Status:** NOT INTEGRATED - HISTORICAL REFERENCE
|
||||
**License:** Mozilla Public License 2.0
|
||||
**Original Project:** mozilla/TTS (archived, became Coqui)
|
||||
**Repository:** https://github.com/mozilla/TTS
|
||||
> 📖 **See [detailed documentation](models/silero-tts.md)** for comprehensive technical specs (documentation pending)
|
||||
|
||||
**Description:**
|
||||
Mozilla's original text-to-speech engine, launched as part of Project Common Voice initiative. Archived in 2021 when team spun out to form Coqui AI. Historical predecessor to Coqui TTS.
|
||||
**Status:** INTEGRATED as tts-1-silero
|
||||
**Project:** snakers4/silero-models (actively maintained!)
|
||||
**License:** Apache 2.0
|
||||
|
||||
**Key Features:**
|
||||
- Multiple TTS architectures (Tacotron, Glow-TTS, etc.)
|
||||
- Multi-speaker capabilities
|
||||
- Voice conversion
|
||||
- Attention mechanisms for alignment
|
||||
- Neural vocoder support (WaveGrad, MelGAN, etc.)
|
||||
|
||||
**Raccoon Notes:**
|
||||
- Fully superseded by Coqui TTS (XTTS v2)
|
||||
- No unique capabilities beyond what Coqui offers
|
||||
- Outdated architecture compared to modern engines
|
||||
- Historical importance: pioneered open-source neural TTS at Mozilla
|
||||
- Code still available for research purposes
|
||||
|
||||
**Integration Decision:** Skip in favor of Coqui TTS, which is the direct successor with better quality and features.
|
||||
|
||||
**Raccoon Priority:** ⛔ (Skip - use Coqui XTTS v2 instead)
|
||||
|
||||
---
|
||||
|
||||
### 4. Chatterbox 🎯
|
||||
|
||||
**Status:** NOT INTEGRATED - HIGH PRIORITY
|
||||
**License:** Apache-2.0
|
||||
**Project:** chatterbox-ai/chatterbox (community project)
|
||||
**Repository:** https://github.com/chatterbox-ai/chatterbox
|
||||
|
||||
**Description:**
|
||||
Community-driven voice assistant TTS framework focused on privacy and offline operation. Designed as a Mycroft alternative with modern architecture.
|
||||
|
||||
**Key Features:**
|
||||
- Privacy-first, fully offline
|
||||
- Plugin architecture for multiple TTS backends
|
||||
- Wake word detection integration
|
||||
- Voice assistant optimized (low latency)
|
||||
- Multiple voice options
|
||||
- Lightweight deployment
|
||||
|
||||
**Raccoon Notes:**
|
||||
- Active community development
|
||||
- Could integrate as backend engine provider
|
||||
- Focuses on voice assistant use case (similar to our API goals)
|
||||
- May provide additional voice models
|
||||
- Needs investigation for model availability
|
||||
|
||||
**Integration Effort:** 4-6 hours (needs research)
|
||||
|
||||
**Raccoon Priority:** ⭐⭐⭐ (Interesting for voice assistant features)
|
||||
|
||||
---
|
||||
|
||||
### 5. Mimic 3 🎯
|
||||
|
||||
**Status:** NOT INTEGRATED - MEDIUM PRIORITY
|
||||
**License:** Apache-2.0
|
||||
**Project:** MycroftAI/mimic3 (Mycroft discontinued)
|
||||
**Repository:** https://github.com/MycroftAI/mimic3
|
||||
**Model Hub:** https://huggingface.co/mycroftai
|
||||
|
||||
**Description:**
|
||||
Mycroft AI's third-generation TTS engine, based on VITS architecture. Developed before Mycroft's shutdown in 2023. Uses neural TTS with high-quality voices.
|
||||
|
||||
**Key Features:**
|
||||
- VITS-based neural TTS
|
||||
- Multiple languages (English, German, French, Spanish, Italian, Dutch, Russian, etc.)
|
||||
- ONNX runtime for fast inference
|
||||
- Offline-capable
|
||||
- Multiple voices per language
|
||||
- Low resource requirements
|
||||
|
||||
**Model Source:**
|
||||
- HuggingFace: `mycroftai/mimic3`
|
||||
- Pre-built ONNX models
|
||||
- Voice models still available
|
||||
|
||||
**Raccoon Notes:**
|
||||
- Mycroft company shut down in 2023
|
||||
- Models still hosted on HuggingFace
|
||||
- VITS architecture is proven and efficient
|
||||
- Similar to Piper but different model training
|
||||
- Could offer additional voice variety
|
||||
- Risk: HuggingFace models may disappear
|
||||
|
||||
**Integration Effort:** 3-5 hours
|
||||
|
||||
**Raccoon Priority:** ⭐⭐⭐⭐ (Good quality, at-risk from Mycroft shutdown)
|
||||
|
||||
---
|
||||
|
||||
### 6. eSpeak NG 🎯
|
||||
|
||||
**Status:** NOT INTEGRATED - LEGACY REFERENCE
|
||||
**License:** GPL-3.0
|
||||
**Project:** espeak-ng/espeak-ng (actively maintained)
|
||||
**Repository:** https://github.com/espeak-ng/espeak-ng
|
||||
|
||||
**Description:**
|
||||
Classic formant synthesis TTS engine. Not neural, but incredibly lightweight and supports 100+ languages. The "eSpeak Next Generation" fork is actively maintained. Used in accessibility tools worldwide.
|
||||
|
||||
**Key Features:**
|
||||
- 100+ languages supported
|
||||
- Tiny footprint (<10MB)
|
||||
- No model files needed (rule-based)
|
||||
- Real-time synthesis
|
||||
- Highly portable (embedded devices)
|
||||
- SSML support
|
||||
- IPA phoneme output
|
||||
|
||||
**Raccoon Notes:**
|
||||
- NOT neural TTS - uses formant synthesis (robotic sound)
|
||||
- Quality much lower than neural models
|
||||
- Historical importance: accessibility standard
|
||||
- Useful fallback for unsupported languages
|
||||
- GPL-3.0 license compatible with AGPL
|
||||
- Could serve as pronunciation engine for neural TTS
|
||||
|
||||
**Integration Decision:** Low priority for main TTS, but could use for phoneme generation or ultra-low-resource fallback.
|
||||
|
||||
**Raccoon Priority:** ⭐⭐ (Useful as fallback, not primary TTS)
|
||||
|
||||
---
|
||||
|
||||
### 7. Kokoro TTS 🎯
|
||||
|
||||
**Status:** NOT INTEGRATED - HIGH PRIORITY
|
||||
**License:** Apache-2.0
|
||||
**Project:** hexgrad/kokoro (new, actively developed)
|
||||
**Repository:** https://github.com/hexgrad/kokoro
|
||||
**Model Hub:** https://huggingface.co/hexgrad/Kokoro-82M
|
||||
|
||||
**Description:**
|
||||
Fast, efficient neural TTS with StyleTTS2-based architecture. Released in 2024 as an optimized, production-ready alternative to larger models. Focuses on quality-to-speed ratio.
|
||||
|
||||
**Key Features:**
|
||||
- Fast inference (optimized StyleTTS2)
|
||||
- Small model size (82M parameters)
|
||||
- High-quality English voices
|
||||
- Multiple speaker support
|
||||
- Good prosody and naturalness
|
||||
- CPU-friendly
|
||||
|
||||
**Model Source:**
|
||||
- HuggingFace: `hexgrad/Kokoro-82M`
|
||||
- Pre-trained models available
|
||||
- Active model updates
|
||||
|
||||
**Raccoon Notes:**
|
||||
- New project (2024) but very promising
|
||||
- Developer actively improving it
|
||||
- Good balance of quality and speed
|
||||
- Could be excellent middle ground between Piper and XTTS
|
||||
- Still maturing, but worth watching
|
||||
|
||||
**Integration Effort:** 4-6 hours
|
||||
|
||||
**Raccoon Priority:** ⭐⭐⭐⭐ (Promising new engine, active development)
|
||||
|
||||
---
|
||||
|
||||
### 8. Silero TTS 🎯
|
||||
|
||||
**Status:** NOT INTEGRATED - HIGHEST PRIORITY
|
||||
**License:** Apache-2.0
|
||||
**Project:** snakers4/silero-models (ACTIVELY MAINTAINED)
|
||||
**Repository:** https://github.com/snakers4/silero-models
|
||||
**Model Hub:** https://models.silero.ai/
|
||||
|
||||
**Description:**
|
||||
Enterprise-grade TTS models from Silero AI team. One of the few actively maintained open-source TTS projects. Offers excellent quality-to-size ratio with production-ready stability.
|
||||
|
||||
**Key Features:**
|
||||
- ACTIVELY MAINTAINED (critical for raccoon mission)
|
||||
**Integration Benefits:**
|
||||
- ACTIVELY MAINTAINED - no abandonment risk!
|
||||
- Fast, small models (~50-100MB each)
|
||||
- High quality for size
|
||||
- Multiple languages: English, Russian, German, Spanish, French, Ukrainian
|
||||
- Multiple speakers per language
|
||||
- Emotion/speed control
|
||||
- PyTorch and ONNX formats
|
||||
- CPU-friendly, real-time capable
|
||||
- Easy integration via PyTorch Hub
|
||||
- Commercial-friendly license
|
||||
- CPU friendly - no GPU required
|
||||
|
||||
**Languages & Speakers:**
|
||||
- English: 4+ speakers (en_v4)
|
||||
- Russian: 8+ speakers (ru_v4) - best quality
|
||||
- German: 2 speakers (de_v3)
|
||||
- Spanish: 2 speakers (es_v1)
|
||||
- French: 1 speaker (fr_v3)
|
||||
- Ukrainian: 1 speaker (ua_v3)
|
||||
**Features:**
|
||||
- Multilingual: English, Russian, German, Spanish, French
|
||||
- Multiple speakers per language (English: 117 speakers!)
|
||||
- Emotion control
|
||||
- Real-time capable on CPU
|
||||
- 48kHz sample rate
|
||||
|
||||
**Models:**
|
||||
- English: 117 speakers (v4_en)
|
||||
- Russian: 8+ speakers (v4_ru)
|
||||
- German: 1 speaker (v3_de)
|
||||
- Spanish: 2 speakers (v1_es)
|
||||
- French: 1 speaker (v3_fr)
|
||||
|
||||
**Model Source:**
|
||||
- Official site: https://models.silero.ai/
|
||||
- GitHub Releases: https://github.com/snakers4/silero-models/releases
|
||||
- PyTorch Hub integration
|
||||
- Direct ONNX models available
|
||||
- PyTorch Hub: `torch.hub.load('snakers4/silero-models')`
|
||||
- Models downloaded on first use
|
||||
- Cached in `/app/voices/` directory
|
||||
|
||||
**Integration Plan:**
|
||||
1. Add to requirements.txt: `torch` (already have) or load via PyTorch Hub
|
||||
2. Create `src/engines/silero.py`
|
||||
3. Download models to `/app/voices/silero/`
|
||||
4. Add `make voices-silero` target
|
||||
5. Map OpenAI voice names to Silero speakers
|
||||
**Integration:**
|
||||
- Used for `tts-1-silero` model (fast, CPU-friendly)
|
||||
- Loaded via torch.hub on demand
|
||||
- 6 OpenAI-compatible voices mapped to Silero speakers
|
||||
|
||||
**Example Config:**
|
||||
```yaml
|
||||
tts-1-silero:
|
||||
alloy:
|
||||
language: en
|
||||
speaker: en_0
|
||||
silero_speaker: v4_en
|
||||
```
|
||||
|
||||
**Makefile Targets:**
|
||||
```bash
|
||||
make voices-silero # Download Silero models (en, ru, de, es, fr)
|
||||
make test-silero # Test Silero TTS endpoint
|
||||
```
|
||||
|
||||
**Example Usage:**
|
||||
```python
|
||||
|
|
@ -358,23 +197,7 @@ model, symbols, sample_rate, example_text, apply_tts = torch.hub.load(
|
|||
audio = apply_tts(text=text, speaker='en_0', sample_rate=sample_rate)
|
||||
```
|
||||
|
||||
**Performance:**
|
||||
- Speed: ~0.1x RTF (very fast)
|
||||
- Memory: 50-100MB per model
|
||||
- Latency: <200ms
|
||||
- Quality: Excellent for size
|
||||
|
||||
**Raccoon Notes:**
|
||||
- STILL ACTIVELY MAINTAINED - rare in TTS landscape!
|
||||
- Silero AI team responds to issues and updates models
|
||||
- Best quality-to-size ratio available
|
||||
- Production-ready and widely deployed
|
||||
- Russian TTS quality is exceptional
|
||||
- Low risk of abandonment
|
||||
|
||||
**Integration Effort:** 2-4 hours (straightforward PyTorch integration)
|
||||
|
||||
**Raccoon Priority:** ⭐⭐⭐⭐⭐ (HIGHEST - active maintenance, excellent quality, easy integration)
|
||||
**Raccoon Priority:** ⭐⭐⭐⭐⭐ (Active project, great quality/size ratio)
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -451,6 +274,8 @@ audio = apply_tts(text=text, speaker='en_0', sample_rate=sample_rate)
|
|||
|
||||
### 6. Kokoro TTS
|
||||
|
||||
> 📖 **See [detailed documentation](models/kokoro-tts.md)** for comprehensive technical specs
|
||||
|
||||
**Status:** NOT INTEGRATED
|
||||
**Project:** hexgrad/kokoro (new, active)
|
||||
**License:** Apache 2.0
|
||||
|
|
@ -491,6 +316,8 @@ audio = apply_tts(text=text, speaker='en_0', sample_rate=sample_rate)
|
|||
|
||||
### 8. Tortoise TTS
|
||||
|
||||
> 📖 **See [detailed documentation](models/tortoise-tts.md)** for comprehensive technical specs
|
||||
|
||||
**Status:** NOT INTEGRATED
|
||||
**Project:** neonbjb/tortoise-tts (low activity)
|
||||
**License:** Apache 2.0
|
||||
|
|
@ -530,6 +357,8 @@ audio = apply_tts(text=text, speaker='en_0', sample_rate=sample_rate)
|
|||
|
||||
### 10. Mozilla TTS
|
||||
|
||||
> 📖 **See [detailed documentation](models/mozilla-tts.md)** for historical context and relationship to Coqui
|
||||
|
||||
**Status:** NOT INTEGRATED
|
||||
**Project:** mozilla/TTS (archived, became Coqui)
|
||||
**License:** MPL 2.0
|
||||
|
|
@ -548,9 +377,10 @@ audio = apply_tts(text=text, speaker='en_0', sample_rate=sample_rate)
|
|||
### Phase 1: Quick Wins (Next 1-2 weeks)
|
||||
1. ✅ Fix Piper absolute paths
|
||||
2. ✅ Audit repository
|
||||
3. [ ] Integrate Silero TTS (2-4 hours)
|
||||
3. ✅ Integrate Silero TTS (COMPLETED!)
|
||||
4. [ ] Set up model mirror on ai.foxhop.net
|
||||
5. [ ] Test Silero with existing API
|
||||
5. [ ] Integrate Chatterbox (emotion control)
|
||||
6. [ ] Integrate Kokoro (fast decoder)
|
||||
|
||||
### Phase 2: High Quality (2-4 weeks)
|
||||
1. [ ] Integrate StyleTTS2
|
||||
|
|
@ -598,5 +428,53 @@ RTF = Real-time factor (lower is faster, 1.0 = real-time)
|
|||
|
||||
---
|
||||
|
||||
## Additional Models Under Research
|
||||
|
||||
The following models have detailed documentation but are not yet integrated or prioritized:
|
||||
|
||||
### Chatterbox
|
||||
**Priority:** High - Emotion control features
|
||||
📄 [Full Documentation](models/chatterbox.md)
|
||||
- Multilingual zero-shot TTS from Resemble AI
|
||||
- 23 languages with emotion exaggeration control
|
||||
- Production-grade, actively maintained
|
||||
- License: Apache-2.0
|
||||
|
||||
### Mimic 3
|
||||
**Priority:** Medium - Privacy/embedded use cases
|
||||
📄 [Full Documentation](models/mimic3.md)
|
||||
- Lightweight offline TTS from Mycroft AI
|
||||
- 20-50MB models, SSML support
|
||||
- Privacy-focused, embeddable
|
||||
- License: Apache-2.0
|
||||
|
||||
### eSpeak NG
|
||||
**Priority:** Low - Niche accessibility use
|
||||
📄 [Full Documentation](models/espeak-ng.md)
|
||||
- Formant-based synthesis for 100+ languages
|
||||
- Extremely portable (<10MB)
|
||||
- Actively maintained by accessibility community
|
||||
- License: GPL-3.0
|
||||
|
||||
### Step-Audio-EditX
|
||||
**Priority:** Research - Experimental
|
||||
📄 [Full Documentation](models/step-audio-editx.md)
|
||||
- New LLM-based audio editing (November 2025)
|
||||
- Post-generation emotion/style editing
|
||||
- Cutting-edge but experimental
|
||||
- License: Apache-2.0
|
||||
|
||||
### Maya1
|
||||
**Priority:** Research - Emerging
|
||||
📄 [Full Documentation](models/maya1.md)
|
||||
- India-based multilingual voice model
|
||||
- Strong Indic language support (Hindi, Tamil, etc.)
|
||||
- High benchmark rankings
|
||||
- License: MIT
|
||||
|
||||
---
|
||||
|
||||
**Last Updated:** 2025-11-09
|
||||
**Raccoon Status:** 🦝 Actively hunting for TTS models in the dumpsters of abandoned repos
|
||||
**Raccoon Status:** 🦝 3 models rescued! Silero TTS integrated successfully
|
||||
**Integration Status:** ✅ Piper, XTTS, Silero | 🎯 Next: Chatterbox, Kokoro
|
||||
**Documentation Status:** 📚 10 models fully documented, 1 comprehensive research overview
|
||||
|
|
|
|||
|
|
@ -7,8 +7,19 @@ piper-tts>=1.2.0
|
|||
# 🦝 RACCOON TODO: Create our own PyPI package from OHF-Voice fork
|
||||
# git+https://github.com/OHF-Voice/piper1-gpl.git@v1.3.0#subdirectory=src/python_run
|
||||
coqui-tts[languages]
|
||||
# Silero TTS - actively maintained, small efficient models
|
||||
# Note: Silero models are loaded via torch.hub, no package install needed
|
||||
# Models: ~50-100MB each, CPU-friendly, real-time capable
|
||||
# Chatterbox - emotion control, 23 languages (Resemble AI)
|
||||
# Install from git since no PyPI package exists yet
|
||||
git+https://github.com/resemble-ai/chatterbox.git
|
||||
langdetect
|
||||
pyyaml
|
||||
# Kokoro TTS - fast decoder-only architecture
|
||||
# Install from Hugging Face transformers
|
||||
transformers>=4.35.0
|
||||
# Hugging Face Hub for model downloads
|
||||
huggingface-hub[cli]
|
||||
# Creating an environment where deepspeed works is complex, for now it will be disabled by default.
|
||||
#deepspeed
|
||||
|
||||
|
|
|
|||
70
speech.py
70
speech.py
|
|
@ -32,6 +32,8 @@ async def lifespan(app):
|
|||
|
||||
app = OpenAIStub(lifespan=lifespan)
|
||||
xtts = None
|
||||
silero_model = None
|
||||
silero_speakers = {}
|
||||
args = None
|
||||
|
||||
def unload_model():
|
||||
|
|
@ -107,9 +109,40 @@ class xtts_wrapper():
|
|||
pass
|
||||
|
||||
finally:
|
||||
logger.debug(f"Generated {tokens} tokens in {time.time() - self.last_used:.2f}s @ {tokens / (time.time() - self.last_used):.2f} T/s")
|
||||
logger.debug(f"Generated {tokens} tokens in {time.time() - self.last_used):.2f}s @ {tokens / (time.time() - self.last_used):.2f} T/s")
|
||||
self.last_used = time.time()
|
||||
|
||||
class silero_wrapper():
|
||||
"""Wrapper for Silero TTS models"""
|
||||
def __init__(self, language='en', speaker='v4_en', device='cpu'):
|
||||
self.language = language
|
||||
self.speaker = speaker
|
||||
self.device = device
|
||||
|
||||
logger.info(f"Loading Silero model for {language} on {device}")
|
||||
|
||||
import torch
|
||||
self.model, self.symbols, self.sample_rate, self.example_text, self.apply_tts = torch.hub.load(
|
||||
repo_or_dir='snakers4/silero-models',
|
||||
model='silero_tts',
|
||||
language=language,
|
||||
speaker=speaker
|
||||
)
|
||||
self.model = self.model.to(device)
|
||||
|
||||
def tts(self, text, speaker_id='en_0'):
|
||||
"""Generate speech from text"""
|
||||
import torch
|
||||
with torch.no_grad():
|
||||
audio = self.apply_tts(
|
||||
text=text,
|
||||
speaker=speaker_id,
|
||||
sample_rate=self.sample_rate
|
||||
)
|
||||
# Convert to float32 PCM
|
||||
audio_np = audio.cpu().numpy()
|
||||
return audio_np.tobytes()
|
||||
|
||||
def default_exists(filename: str):
|
||||
if not os.path.exists(filename):
|
||||
fpath, ext = os.path.splitext(filename)
|
||||
|
|
@ -207,6 +240,8 @@ async def generate_speech(request: GenerateSpeechRequest):
|
|||
media_type = "audio/pcm;rate=22050"
|
||||
elif model == 'tts-1-hd': # xtts
|
||||
media_type = "audio/pcm;rate=24000"
|
||||
elif model == 'tts-1-silero': # silero
|
||||
media_type = "audio/pcm;rate=48000"
|
||||
else:
|
||||
raise BadRequestError(f"Invalid response_format: '{response_format}'", param='response_format')
|
||||
|
||||
|
|
@ -409,8 +444,38 @@ async def generate_speech(request: GenerateSpeechRequest):
|
|||
del out_writer_worker
|
||||
|
||||
return StreamingResponse(content=ffmpeg_proc.stdout, media_type=media_type, background=cleanup)
|
||||
# Use Silero for tts-1-silero
|
||||
elif model == 'tts-1-silero':
|
||||
global silero_model, silero_speakers
|
||||
|
||||
voice_map = map_voice_to_speaker(voice, 'tts-1-silero')
|
||||
language = voice_map.get('language', 'en')
|
||||
speaker_id = voice_map.get('speaker', 'en_0')
|
||||
silero_speaker_key = voice_map.get('silero_speaker', 'v4_en')
|
||||
|
||||
# Load Silero model if not already loaded
|
||||
if silero_model is None or silero_speakers.get(language) != silero_speaker_key:
|
||||
silero_model = silero_wrapper(language=language, speaker=silero_speaker_key, device='cpu')
|
||||
silero_speakers[language] = silero_speaker_key
|
||||
|
||||
# Generate audio
|
||||
audio_data = silero_model.tts(input_text, speaker_id=speaker_id)
|
||||
|
||||
# Silero outputs float32 PCM at 48000 Hz
|
||||
ffmpeg_args = build_ffmpeg_args(response_format, input_format="f32le", sample_rate="48000")
|
||||
|
||||
# Apply speed adjustment if needed
|
||||
if speed != 1.0:
|
||||
ffmpeg_args.extend(["-af", f"atempo={speed}"])
|
||||
|
||||
ffmpeg_args.extend(["-"])
|
||||
ffmpeg_proc = subprocess.Popen(ffmpeg_args, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
|
||||
ffmpeg_proc.stdin.write(audio_data)
|
||||
ffmpeg_proc.stdin.close()
|
||||
|
||||
return StreamingResponse(content=ffmpeg_proc.stdout, media_type=media_type)
|
||||
else:
|
||||
raise BadRequestError("No such model, must be tts-1 or tts-1-hd.", param='model')
|
||||
raise BadRequestError("No such model, must be tts-1, tts-1-hd, or tts-1-silero.", param='model')
|
||||
|
||||
|
||||
# We return 'mps' but currently XTTS will not work with mps devices as the cuda support is incomplete
|
||||
|
|
@ -457,5 +522,6 @@ if __name__ == "__main__":
|
|||
|
||||
app.register_model('tts-1')
|
||||
app.register_model('tts-1-hd')
|
||||
app.register_model('tts-1-silero')
|
||||
|
||||
uvicorn.run(app, host=args.host, port=args.port)
|
||||
|
|
|
|||
|
|
@ -56,4 +56,29 @@ tts-1-hd:
|
|||
temperature: 0.75
|
||||
top_k: 50
|
||||
top_p: 0.85
|
||||
comment: You can add a comment here also, which will be persistent and otherwise ignored.
|
||||
comment: You can add a comment here also, which will be persistent and otherwise ignored.
|
||||
tts-1-silero:
|
||||
alloy:
|
||||
language: en
|
||||
speaker: en_0
|
||||
silero_speaker: v4_en
|
||||
echo:
|
||||
language: en
|
||||
speaker: en_1
|
||||
silero_speaker: v4_en
|
||||
fable:
|
||||
language: en
|
||||
speaker: en_2
|
||||
silero_speaker: v4_en
|
||||
onyx:
|
||||
language: en
|
||||
speaker: en_3
|
||||
silero_speaker: v4_en
|
||||
nova:
|
||||
language: en
|
||||
speaker: en_4
|
||||
silero_speaker: v4_en
|
||||
shimmer:
|
||||
language: en
|
||||
speaker: en_5
|
||||
silero_speaker: v4_en
|
||||
Loading…
Add table
Add a link
Reference in a new issue