# План реализации

## Этап 1 — Каркас сервера ✅

- [x] Создать структуру проекта.
- [x] Настроить `pyproject.toml`, `requirements.txt`, `.env.example`.
- [x] Реализовать WebSocket сервер на FastAPI.
- [x] Описать Pydantic-модели протокола.
- [x] Реализовать сегментатор текста.
- [x] Реализовать абстракцию TTS engine + dummy backend.
- [x] Реализовать форматирование аудио (PCM16/base64).
- [x] Реализовать сессию с управлением буфером, очередью и прерыванием.
- [x] Добавить базовые тесты сегментатора.
- [x] Документировать архитектуру и протокол.

## Этап 2 — Интеграция F5-TTS

- [x] Установить и настроить зависимости F5-TTS в `pyproject.toml` / `requirements.txt`.
- [x] Создать `src/voice_tts/tts/f5_backend.py`.
- [x] Подключить F5-TTS в `_BACKEND_MAP` в `server.py`.
- [x] Поддержать референсное аудио для клонирования голоса.
- [x] Автоматическая транскрипция референса, если `ref_text` не задан.
- [x] Загрузить модель `F5TTS_v1_Base` в `models/F5TTS_v1_Base/`.
- [x] Проверить загрузку модели на GPU.
- [x] Проверить настоящий инференс F5-TTS на GPU.
- [x] Добавить warm-up при старте сервера.
- [x] Замерить реальную латентность на GPU.
- [ ] Реализовать предобработку текста и токенизацию для мультиязычности.

## Этап 3 — Эмоции и голос

- [ ] Определить набор поддерживаемых эмоций (`neutral`, `happy`, `sad`, `angry`, `surprised`, `whisper`).
- [ ] Подготовить/сгенерировать референсы для каждой эмоции от одного спикера.
- [ ] При смене эмоции автоматически выбирать соответствующий референс.
- [ ] (Опционально) Добавить текстовые emotion prompts для усиления интонации.

## Этап 4 — Оптимизации

- [ ] Предварительная подготовка следующего сегмента (pre-fetch) параллельно с текущей генерацией.
- [ ] Batching коротких сегментов, если они накопились.
- [ ] Кроссфейд между аудио-сегментами для бесшовного воспроизведения.
- [ ] Кэширование эмбеддингов референсных аудио.
- [ ] Профилирование и замер Time-To-First-Byte (TTFB) и задержки между сегментами.

## Этап 5 — Тестирование и совместимость

- [x] Запустить и замерить производительность на RTX 3090.
- [ ] Проверить работу на RTX 3060 (VRAM/скорость).
- [ ] Покрыть ключевые сценарии тестами:
  - стриминг текста,
  - flush,
  - stop/прерывание,
  - смена эмоции,
  - мультиязычные фразы.
- [ ] Написать простого Python-клиента для демонстрации.
- [ ] Добавить в README инструкции по развёртыванию.

## Этап 6 — Продвинутые возможности

- [ ] Опциональный Opus-кодек для экономии трафика.
- [ ] REST endpoint для синхронного TTS (для простых случаев).
- [ ] Автоматический выбор устройства (`cuda` / `cpu`) и dtype (`bfloat16` / `float16`).
- [ ] Graceful degradation: fallback на CPU, если GPU недоступна.
