Skip to content
Merged
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,11 @@ Let me know if you need any adjustments or additional languages!

## Updates

- **New Engine:** PocketTTSEngine
- **Installation:** `pip install pocket-tts`
- Kyutai Labs' lightweight 100M parameter TTS, CPU-optimized (~6x real-time)
- Voice cloning via WAV files, ~200ms latency, 8 built-in voices

- **New Engine:** ZipoVoiceEngine
- **Installation:** `pip install RealtimeTTS
- **Test File Example:** [zipvoice_test.py](https://github.com/KoljaB/RealtimeTTS/blob/master/tests/zipvoice_test.py)
Expand Down Expand Up @@ -130,6 +135,7 @@ This library uses:
- **StyleTTS2Engine** 🏠: Expressive, natural speech
- **OrpheusEngine** 🏠: Llama‑powered TTS with emotion tags
- **ZipVoiceEngine** 🏠: 123M zero‑shot model, state‑of‑the‑art quality
- **PocketTTSEngine** 🏠: Kyutai Labs 100M model, CPU-optimized with voice cloning

🏠 Local processing (no internet required)
🌐 Requires internet connection
Expand Down
21 changes: 19 additions & 2 deletions RealtimeTTS/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@
"EdgeEngine", "EdgeVoice",
"StyleTTSEngine", "StyleTTSVoice",
"PiperEngine", "PiperVoice",
"KokoroEngine", "KokoroVoice"
"KokoroEngine", "KokoroVoice",
"OrpheusEngine", "OrpheusVoice",
"ZipVoiceEngine", "ZipVoiceVoice",
"PocketTTSEngine", "PocketTTSVoice",
]


Expand Down Expand Up @@ -191,6 +192,20 @@ def _load_zipvoice_engine():
globals()["ZipVoiceVoice"] = ZipVoiceVoice
return ZipVoiceEngine


def _load_pocket_engine():
try:
from .engines.pocket_engine import PocketTTSEngine, PocketTTSVoice
except ImportError as e:
raise ImportError(
"Failed to load PocketTTSEngine and PocketTTSVoice. "
"Please install with: pip install pocket-tts"
) from e
globals()["PocketTTSEngine"] = PocketTTSEngine
globals()["PocketTTSVoice"] = PocketTTSVoice
return PocketTTSEngine


# Mapping names to their lazy loader functions.
_lazy_imports = {
"SystemEngine": _load_system_engine,
Expand Down Expand Up @@ -218,7 +233,9 @@ def _load_zipvoice_engine():
"OrpheusEngine": _load_orpheus_engine,
"OrpheusVoice": _load_orpheus_engine,
"ZipVoiceEngine": _load_zipvoice_engine,
"ZipVoiceVoice": _load_zipvoice_engine,
"ZipVoiceVoice": _load_zipvoice_engine,
"PocketTTSEngine": _load_pocket_engine,
"PocketTTSVoice": _load_pocket_engine,
}


Expand Down
10 changes: 10 additions & 0 deletions RealtimeTTS/engines/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"KokoroEngine", "KokoroVoice",
"OrpheusEngine", "OrpheusVoice",
"ZipVoiceEngine", "ZipVoiceVoice",
"PocketTTSEngine", "PocketTTSVoice",
]


Expand Down Expand Up @@ -110,6 +111,13 @@ def _load_zipvoice_engine():
return ZipVoiceEngine


def _load_pocket_engine():
from .pocket_engine import PocketTTSEngine, PocketTTSVoice
globals()["PocketTTSEngine"] = PocketTTSEngine
globals()["PocketTTSVoice"] = PocketTTSVoice
return PocketTTSEngine


# Map attribute names to lazy loader functions.
_lazy_imports = {
"AzureEngine": _load_azure_engine,
Expand Down Expand Up @@ -138,6 +146,8 @@ def _load_zipvoice_engine():
"OrpheusVoice": _load_orpheus_engine,
"ZipVoiceEngine": _load_zipvoice_engine,
"ZipVoiceVoice": _load_zipvoice_engine,
"PocketTTSEngine": _load_pocket_engine,
"PocketTTSVoice": _load_pocket_engine,
}


Expand Down
Loading