| docs | 5 hours ago | ||
| examples | 5 hours ago | ||
| scripts | 5 hours ago | ||
| src/ voice_tts | 5 hours ago | ||
| tests | 5 hours ago | ||
| voices | 14 days ago | ||
| .env.example | 5 hours ago | ||
| .gitignore | 14 days ago | ||
| AGENTS.md | 5 hours ago | ||
| README.md | 5 hours ago | ||
| pyproject.toml | 5 hours ago | ||
| requirements.txt | 14 days ago | ||
Локальный GPU-пайплайн синтеза речи в реальном времени с WebSocket API. Разработан для озвучки ИИ-агентов: текст поступает частями от LLM, аудио отдаётся клиенту по мере готовности.
stopTTS_BACKEND без изменения кода| Имя | Модель | Требования | VRAM | RTF |
|---|---|---|---|---|
s2 |
Fish Audio S2-Pro INT4 | S2 API сервер (порт 8081), PyTorch 2.4 | ~9.6 GB | 0.59 |
fish_speech |
Fish Speech 1.5 | чекпоинт fish-speech, PyTorch | ~12 GB | ~1.4 |
xtts_v2 |
XTTS-v2 (Coqui) | авто-загрузка | ~2 GB | ~0.34 |
f5_tts |
F5-TTS v1 | чекпоинт F5TTS | ~4 GB | ~1.0 |
dummy |
синусоида | ничего | — | — |
# 1. S2 API сервер (требует ~9.6 GB VRAM, 50 tok/s с --compile) cd models/fish-speech PYTHONPATH=. /home/gmikcon/Projects/voice/.venv/bin/python tools/api_server.py \ --llama-checkpoint-path checkpoints/fs-1.2-int4-g128-s2-pro-nf4 \ --decoder-checkpoint-path checkpoints/s2-pro/codec.pth \ --listen 127.0.0.1:8081 --compile # 2. WebSocket прокси (в другом терминале) TTS_BACKEND=s2 python -m voice_tts.main
Сервер слушает ws://localhost:8765/ws.
Полная документация — docs/03_websocket_protocol.md.
Клиент → Сервер:
init — настройки сессии (голос, язык, скорость)text — чанк текста (payload — строка)flush — озвучить остаток буфераstop — немедленно прерватьemotion / config — смена параметровСервер → Клиент:
status — события (session_ready, segment_started, segment_finished, stopped)audio — PCM16 base64 с sample_rateerror — ошибка[LLM / AI Agent] → WebSocket → [SessionManager]
│
TextBuffer / Segmenter
│
segments (async tasks)
│
TTS Engine (через реестр)
│
AudioQueue → WS send
Бэкенды регистрируются через декоратор @register("name") в voice_tts.tts. Новый бэкенд добавляется одним файлом с декоратором — никаких правок в server.py.
from voice_tts.tts import register as _register_backend
@_register_backend("my_model")
class MyEngine(TTSEngine):
...
python3.11 -m venv .venv source .venv/bin/activate pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu126 pip install -r requirements.txt
Все переменные в .env (см. .env.example). Ключевые:
| Переменная | По умолч. | Описание |
|---|---|---|
TTS_BACKEND |
s2 |
dummy / s2 / fish_speech / f5_tts / xtts_v2 |
DEFAULT_VOICE_REF |
— | Референсное аудио для клонирования |
DEFAULT_REF_TEXT |
— | Точный транскрипт референса |
MIN_SEGMENT_LENGTH |
30 |
Мин. длина сегмента (прогрессивно: 12 → 30) |
MAX_SEGMENT_LENGTH |
200 |
Макс. длина сегмента |
FAST_START_INITIAL |
12 |
Порог для первого сегмента (снижает задержку) |
FAST_START_COUNT |
3 |
Сегментов с прогрессивным порогом |
pytest tests/ -v
docs/01_overview.md — обзор проектаdocs/02_architecture.md — архитектураdocs/03_websocket_protocol.md — протоколdocs/05_usage.md — использование и развёртывание