Как запустить ChatTTS локально и перестать платить за облачные синтезаторы речи
Вчера я полчаса пытался заставить одну известную нейронку прочитать текст так, чтобы она не звучала как робот из восьмидесятых. В итоге плюнул и пошел искать, что там выложили на GitHub. Наткнулся на ChatTTS-ui. Это графическая оболочка для модели ChatTTS, которая умеет имитировать живую человеческую речь с паузами, смешками и вздохами.
Сама модель ChatTTS — штука крутая, но запускать её через голый Python-скрипт то еще удовольствие. Проект jianchang512/ChatTTS-ui решает эту проблему, давая нам нормальный веб-интерфейс и, что важнее, готовый API.
Что умеет эта штука
Главная фишка здесь не в простом чтении текста, а в управлении эмоциями. Модель специально обучали на разговорной речи. Она понимает теги вроде [laugh], [uv_break] или [lbreak]. Если вставить их в текст, голос будет звучать так, будто человек реально задумался или усмехнулся.
Интерфейс поддерживает смешанный текст на китайском и английском. Для нас это значит, что англицизмы в техническом тексте не превратятся в невнятную кашу.
Проект закрывает сразу несколько «хотелок»:
- Работает полностью локально. Ваши данные не улетают на чужие сервера.
- Есть готовый экзешник для Windows. Не нужно возиться с зависимостями, если просто хочется потыкать.
- Поддерживает GPU-ускорение через CUDA. Если у вас видеокарта от NVIDIA с объемом памяти от 4 ГБ, синтез будет летать.
- Выдает API-эндпоинт. Можно прикрутить озвучку к своему боту или приложению за пять минут.
Как это завести у себя
Автор предусмотрел несколько путей. Самый ленивый — скачать архив из разделов Releases, распаковать и запустить app.exe. Но мы же разработчики, нам подавай Docker или виртуальное окружение.
Для тех, кто предпочитает Docker, всё стандартно:
git clone https://github.com/jianchang512/ChatTTS-ui.git chat-tts-ui
cd chat-tts-ui
docker compose -f docker-compose.gpu.yaml up -d
Если видеокарты нет или она слабенькая, меняем файл на docker-compose.cpu.yaml. После старта интерфейс будет доступен по адресу http://127.0.0.1:9966.
Интересный момент с моделями: при первом запуске скрипт ломится на HuggingFace. Если с доступом к нему проблемы, он автоматически переключается на зеркало ModelScope. Это избавляет от танцев с бубном вокруг прокси при скачивании весов.
API и интеграция
Для меня самой полезной частью оказался API. Он максимально простой. Делаем POST-запрос на /tts и получаем путь к сгенерированному wav-файлу.
Пример на Python выглядит так:
import requests
res = requests.post('http://127.0.0.1:9966/tts', data={
"text": "Привет! Посмотри, как я умею озвучивать текст [laugh_0]",
"voice": "2222",
"temperature": 0.3
})
print(res.json())
Параметр voice — это сид (seed) для голоса. Можно перебирать цифры, пока не найдете тот тембр, который вам нравится. В последних версиях добавили поддержку фиксированных тембров через файлы .pt или .csv, которые можно закинуть в папку speaker.
Где это реально пригодится
Я вижу несколько сценариев. Во-первых, озвучка роликов для YouTube или локальных презентаций. Голос получается живым, и это не режет слух. Во-вторых, автоматизация умного дома. Вместо стандартных системных голосов можно сделать что-то более приятное.
Кстати, проект отлично интегрируется с pyVideoTrans — это софт для перевода видео. Если вы занимаетесь локализацией контента, связка этих инструментов сэкономит кучу времени.
Нюансы и ограничения
Не всё так идеально. Если у вас меньше 4 ГБ видеопамяти, система принудительно уйдет на CPU. На процессоре синтез работает ощутимо медленнее, так что длинные тексты придется подождать.
Еще один момент — стабильность голоса. Иногда один и тот же сид на разных устройствах может выдать немного разную интонацию. Это особенность самой модели ChatTTS, а не интерфейса.
Стоит ли пробовать? Определенно, если вам нужен качественный TTS без подписок и облаков. Проект активно пилится, звезды на GitHub растут, а установка занимает от силы пять минут. Можно просто держать его в Docker-контейнере и дергать по API, когда нужно быстро что-то озвучить.
