Несколько лет назад локальная генерация речи казалась фантастикой. Сейчас качество отличное, и приватность не страдает — всё работает на твоём железе.
В основе Kokoro — модель всего с 82M параметров, которая выдаёт реалистичную речь на английском, китайском и хинди. В ней около 50 голосов, в основном английских. В статье показан пример на машине с GTX 1080 Ti, где GPU занят под LLM‑инференс, а синтез речи полностью лёг на CPU.
Самый простой способ запустить Kokoro — взять готовый контейнер Kokoro-FastAPI. Внутри уже лежат предзагруженные голосовые модели, поэтому образ весит ~5 ГБ. Запускается одной командой через Docker или Podman:
podman run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu
Проверить работу можно в простом веб‑интерфейсе на localhost:8880/web — вводишь текст, слушаешь результат. Контейнер также поддерживает API, совместимый с OpenAI speech API, так что существующие программы переключить несложно.
Пример использования через командную строку (переменные окружения):
export TTS_API_BASE_URL=http://127.0.0.1:8880/v1
./speak.js "Good morning! How are you today?"
Для Python команда почти такая же. Аудио сохраняется в MP3, а если установлен SoX, ещё и сразу воспроизводится. Голос можно сменить переменной TTS_VOICE, например am_eric. Полный список голосов лежит на Hugging Face: huggingface.co/hexgrad/Kokoro-82M/blob/main/VOICES.md.
Насколько это быстро? Тесты на коротком абзаце про Юпитер с голосом am_eric (лучший из трёх запусков):
- Intel Core i7-4770K: 4,7 секунды
- Apple M2 Pro: 4,5 секунды
- AMD Ryzen 7 8745HS: 1,5 секунды
Первому CPU уже 12 лет. Если он справляется, система действительно шустрая.
Есть альтернатива — Speaches (speaches.ai), тоже в контейнере и с OpenAI‑совместимым API. В отличие от Kokoro-FastAPI, Speaches не тащит веса в образ — их надо скачивать отдельно через API. Зато внутри сразу есть Whisper — качественная система распознавания речи от OpenAI. Если нужны и синтез, и распознавание, Speaches может стать решением «всё в одном».
В паре с локальной LLM такой TTS позволяет слушать ответы нейросети, а не читать их.