Локальный синтез речи: XTTS-v2 и русский голос
Коротко
XTTS-v2 — открытая модель синтеза речи от Coqui, которая умеет русский и клонирует голос по короткому образцу. Ставится в две команды: pip install coqui-tts (поддерживаемый форк от Idiap, потому что оригинальный репозиторий заброшен с 2024 года) плюс PyTorch отдельно. Работает на видеокарте от 4 ГБ VRAM, запускается и на процессоре, но медленно. Русский звучит внятно, однако модель регулярно промахивается по ударениям, читает «е» вместо «ё» и ломается на числах и аббревиатурах — текст приходится готовить руками, расставляя ударения и раскрывая цифры словами. Главное ограничение не техническое: веса XTTS-v2 лежат под Coqui Public Model License, а она запрещает любое использование, из которого вы получаете прямой или косвенный доход. Для коммерческой озвучки берите Silero (русские голоса, CPU, но модели тоже под non-commercial CC BY-NC) или Piper — либо покупайте лицензию у облачных сервисов. Клонировать чужой голос без письменного согласия человека нельзя.
Зачем локальный TTS, если есть облако
Три причины, по которым люди уходят с облачных сервисов на свою машину.
Данные не уезжают. Если вы озвучиваете внутренние регламенты, записи созвонов или медицинские тексты, отправлять их в чужой API — это обработка данных третьим лицом со всеми вопросами по 152-ФЗ. Локальный синтез снимает вопрос целиком: аудио никуда не уходит.
Оплата. Российской картой оплатить ElevenLabs или Play.ht напрямую нельзя. Локальная модель считается один раз — электричеством и амортизацией видеокарты.
Объём. Озвучка курса на 20 часов в облаке стоит заметных денег и упирается в лимиты тарифа. Дома вы ограничены только временем, пока крутится карта.
Обратная сторона: качество. Коммерческие сервисы 2026 года на русском звучат заметно живее, чем XTTS-v2, и не требуют вычитки текста с ударениями. Если вам нужен один ролик в месяц — локальный стек не окупится ни временем, ни нервами.
Что нужно из железа
XTTS-v2 — модель примерно на 2 ГБ весов, в fp16 при генерации занимает около 2 ГБ VRAM, с учётом буферов CUDA и обвязки — 3–4 ГБ.
| Конфигурация | Что реально получится |
|---|---|
| CPU, без видеокарты | Работает, но генерация идёт медленнее реального времени в разы. Пакетная озвучка ночью — да, интерактив — нет |
| GPU 4 ГБ (GTX 1650, RTX 3050) | Запускается, скорость около реального времени, длинные тексты бьём на куски |
| GPU 6–8 ГБ (RTX 2060, 4060) | Комфортный рабочий вариант, остаётся место под Whisper или небольшую LLM рядом |
| GPU 12 ГБ+ | Нужно, если вы собираетесь дообучать модель на своём датасете, а не просто клонировать zero-shot |
Диск: качайте с запасом 5–7 ГБ — веса, кэш HuggingFace и колёса PyTorch с CUDA весят прилично. Если вы уже гоняли локальные модели по нашему разбору Ollama, окружение под CUDA у вас, скорее всего, уже собрано и половина работы сделана.
Установка и первый запуск
Оригинальный репозиторий coqui-ai/TTS не развивается: компания Coqui объявила о закрытии в конце 2023 года, сервисы Coqui Studio и API выключили в январе 2024-го (обсуждение в репозитории). Живой форк ведёт исследовательский институт Idiap — idiap/coqui-ai-TTS, пакет в PyPI называется coqui-tts. Ставить нужно именно его: старый пакет TTS не собирается на свежих Python.
python -m venv .venv && source .venv/bin/activate
# PyTorch ставится отдельно — команду берите на pytorch.org под свою CUDA
pip install torch torchaudio
pip install coqui-tts
Поддерживаемые версии Python в форке — от 3.10 до 3.14. PyTorch с версии 0.27.4 намеренно не тянется как зависимость, иначе pip ставил бы CPU-сборку поверх вашей CUDA.
Первый запуск через CLI:
COQUI_TOS_AGREED=1 tts \
--model_name tts_models/multilingual/multi-dataset/xtts_v2 \
--text "Проверка синтеза речи на русском языке." \
--speaker_wav sample.wav \
--language_idx ru \
--use_cuda true \
--out_path out.wav
Переменная COQUI_TOS_AGREED нужна, потому что при первом обращении модель требует принять условия лицензии интерактивно — в скриптах и Docker это вешает процесс.
То же на Python:
from TTS.api import TTS
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2").to("cuda")
tts.tts_to_file(
text="Проверка синтеза речи на русском языке.",
speaker_wav=["sample.wav"],
language="ru",
file_path="out.wav",
)
Модель скачается при первом вызове. Выход — 24 кГц моно; для потокового режима заявлена задержка первого чанка меньше 200 мс, но это про английский на приличной карте, на русском и на слабом железе ждите больше.
Качество русского голоса: честная оценка
Русский официально в списке 17 языков модели. На практике это означает «понятно и почти естественно», а не «неотличимо от диктора».
Что ломается стабильно:
- Ударения. Модель ставит их по своей статистике и регулярно ошибается на омографах: «зАмок» вместо «замОк», «бОльшая» вместо «большАя». Лечится вручную — символом ударения
+перед гласной или знаком́в тексте, в зависимости от того, как вы нормализуете вход. - Ё. Читается как «е» почти всегда. Пишите «ё» явно, но и это не гарантия.
- Числа и аббревиатуры. «152-ФЗ», «2026», «км/ч» модель озвучивает как попало. Раскрывайте словами до синтеза — это самая скучная и самая обязательная часть пайплайна.
- Длинные предложения. После ~250 символов растёт риск, что модель «поедет»: проглотит слово или начнёт частить. Бейте текст по предложениям и склеивайте wav.
- Акцент. При клонировании голоса с англоязычного образца русская речь получается с отчётливым иностранным акцентом. Образец должен быть на русском.
Сравнение с двумя другими бесплатными вариантами:
| XTTS-v2 | Silero TTS | Piper | |
|---|---|---|---|
| Клонирование голоса | Да, zero-shot по 6+ сек | Нет, только готовые голоса | Нет, нужно обучать |
| Русские голоса | Любые, из вашего образца | 5 базовых (aidar, baya, kseniya, xenia, eugene) в v5 | Несколько ru_RU, в том числе irina и ruslan |
| Ударения и омографы | Руками | Автоматическая простановка в v5_4/v5_5 | Руками |
| CPU | Медленно | Быстрее реального времени | Быстро, тянет даже Raspberry Pi |
| Лицензия моделей | CPML, только non-commercial | CC BY-NC (кроме base-моделей под MIT) | Код piper1-gpl под GPL-3.0 |
Практический вывод: для дикторской начитки на русском без клонирования Silero чаще даёт результат лучше и быстрее, потому что у него есть нормализатор русского и автоударения. XTTS-v2 берут ровно за одно — за свой голос. Другие локальные инструменты мы собираем в арсенале.
Клонирование своего голоса
Zero-shot работает так: вы даёте wav-образец, модель переносит тембр без дообучения. Заявленный минимум — 6 секунд, на практике вменяемый результат начинается с 30–60 секунд чистой записи.
Что даёт прибавку к качеству:
- Один микрофон, одна комната, одна сессия. Смешивать записи с разных устройств — верный способ получить «плавающий» тембр.
- Тишина без шума. Уберите гул кондиционера и клавиатуру: модель копирует и это тоже.
- Ровная интонация. Читайте нейтрально. Эмоциональный образец даёт эмоциональную модель, которая будет вываливать эту эмоцию в неподходящих местах.
- Несколько файлов.
speaker_wavпринимает список — 3–5 коротких фрагментов работают лучше одного длинного.
Если zero-shot не устраивает, в форке есть демо дообучения: python3 -m TTS.demos.xtts_ft_demo.xtts_demo — Gradio-интерфейс, куда загружается датасет. Это уже часы работы, разметка и видеокарта пожирнее.
Юридическая часть, которую обычно пропускают. Голос человека — его личное нематериальное благо. В Госдуму внесены поправки в ГК РФ (проект статьи 152.3 «Охрана голоса гражданина»), которые прямо распространяют требование согласия на синтезированный голос; статус проекта на июль 2026 стоит проверять отдельно. Но и без новой статьи клонирование чужого голоса для публикации без письменного согласия — это конфликт, в котором вы заведомо слабая сторона. Свой голос клонируйте свободно; чужой — только с бумагой.
И ещё раз про лицензию, потому что это отсекает большинство рабочих сценариев. Coqui Public Model License разрешает использование «only so far as you do not receive any direct or indirect payment arising from the use of the model or its output». Озвучка ролика на монетизированном канале, аудиокнига на продажу, голосовой бот в вашем сервисе — всё это выходит за рамки. Код форка под MPL-2.0, а вот веса — нет. Как встроить локальный синтез в рабочие сценарии без нарушений, разбираем в документации.
Частые вопросы
XTTS-v2 можно использовать в коммерческом проекте?
Нет. Coqui Public Model License допускает личное использование, исследования, тестирование и благотворительность — то есть всё, из чего вы не извлекаете прямой или косвенный доход. Обучение других моделей для коммерческого применения тоже исключено. Компания Coqui закрылась, купить коммерческую лицензию не у кого, и это не «серая зона», а прямой запрет в тексте лицензии.
Сколько нужно видеопамяти и пойдёт ли без видеокарты?
В fp16 генерация занимает около 2 ГБ VRAM, с буферами — 3–4 ГБ, так что карта на 4 ГБ уже подходит, а 6–8 ГБ дают запас. Без видеокарты модель запустится, но синтез будет идти медленнее реального времени: годится для ночной пакетной озвучки, не годится для интерактива.
Почему модель неправильно ставит ударения и как это чинить?
У XTTS-v2 нет полноценного нормализатора русского текста: ударения предсказываются статистически, омографы путаются. Рабочий способ — препроцессинг: раскрывать числа и аббревиатуры словами, писать «ё» явно, помечать ударения в спорных словах и резать текст на предложения. Если клонирование голоса не обязательно, Silero v5 делает это автоматически.
Хватит ли 6 секунд образца для клонирования голоса?
Формально да — это заявленный минимум в карточке модели. Практически 6 секунд дают узнаваемый, но нестабильный тембр. Берите 30–60 секунд ровной речи на русском, записанной одним микрофоном в одной комнате, и передавайте несколько коротких файлов списком в speaker_wav.
Что взять вместо XTTS-v2, если нужен коммерческий локальный TTS?
Полностью свободных русских TTS-моделей с разрешённым коммерческим использованием мало: Silero тоже под CC BY-NC (свободны только base-модели под MIT), у Piper код под GPL-3.0, и лицензии голосов нужно смотреть по каждому отдельно. Реалистичный путь для коммерции — либо связаться с правообладателем конкретных голосов, либо платный API с явным разрешением на коммерческое использование в договоре.