Как установить и настроить XTTS на VPS
Поиск «xtts установка» выводит на инструкции трёхлетней давности: они ставят архивный пакет TTS, спотыкаются об ошибку weights_only в свежем PyTorch и ни слова не говорят о том, что модель распространяется по некоммерческой лицензии. Разберём по порядку: какой пакет ставить в 2026 году, что реально разрешает лицензия, как поднять синтез и клонирование голоса на VPS и где CPU упирается в потолок, если нужна работа в реальном времени.
Содержание
- Что такое XTTS-v2 и какой пакет ставить в 2026 году
- Лицензия CPML: когда XTTS нельзя использовать
- Установка на VPS: venv, зависимости и первая загрузка модели
- Первый синтез и клонирование голоса: скрипт и типичные ошибки
- CPU или GPU: честно о скорости и xtts-api-server вместо своего кода
- В прод: systemd, Nginx и безопасность
- Какой сервер под XTTS брать в MAATRIX
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое XTTS-v2 и какой пакет ставить в 2026 году
XTTS-v2 — модель синтеза речи с клонированием голоса от Coqui: генерирует речь на 17 языках по короткому референсному ролику голоса, на выходе — аудио 24 кГц. Список языков: английский, испанский, французский, немецкий, итальянский, португальский, польский, турецкий, русский, нидерландский, чешский, арабский, китайский, японский, венгерский, корейский и хинди.
С пакетом сложнее, чем кажется. Компания Coqui AI закрылась в январе 2024 года, репозиторий coqui-ai/TTS заброшен и не обновляется — старый pip install TTS тянет версию, замороженную на 0.22.x, без поддержки текущих Python и PyTorch. Актуальную разработку продолжает форк idiap/coqui-ai-TTS, пакет на PyPI называется coqui-tts. Импортируется он по-прежнему как TTS, так что код из старых гайдов не меняется — меняется только команда установки.
Актуальный релиз — coqui-tts 0.27.5 от 26 января 2026 года, требует Python от 3.10 до 3.15 (не включительно). Начиная с версии 0.27.4 PyTorch в зависимости не входит — его ставят отдельно. Сама модель весит немало: model.pth — 1,87 ГБ, vocab.json — 361 КБ, speakers_xtts.pth — 7,75 МБ, все три файла скачиваются с Hugging Face при первом обращении к модели. Приятная деталь: в отличие от VITS и других моделей той же библиотеки, XTTS не использует фонемайзер — espeak-ng ей не нужен вовсе, текст идёт в модель напрямую.
Лицензия CPML: когда XTTS нельзя использовать
Это единственный пункт, который стоит прочитать до установки, а не после. Код библиотеки coqui-tts распространяется по MPL 2.0 — с ним можно делать что угодно, включая коммерческие продукты. А вот сами веса XTTS-v2, тот самый model.pth, который вы скачаете, лицензированы отдельно — по Coqui Public Model License. Это некоммерческая лицензия: личный проект, исследование, внутренний инструмент без монетизации — можно; платное приложение, голосовая фича в SaaS, любой продукт с оплатой — уже коммерческое использование.
Честный и неприятный момент: в 2023 году Coqui предлагала коммерческую лицензию за отдельную плату для компаний с выручкой до $1 млн, но компания закрылась в январе 2024-го. Продавать лицензии сейчас некому — то есть легального пути купить право на коммерческое использование весов XTTS-v2 через Coqui на сегодняшний день просто не существует, и это не вопрос дополнительных денег, а вопрос отсутствия контрагента. Если задача — голос в платном продукте для клиентов, честнее сразу смотреть в сторону моделей с permissive-лицензией вроде Piper (MIT), пусть клонирование голоса там заметно скромнее. XTTS для такого сценария — риск, а не готовое решение.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка на VPS: venv, зависимости и первая загрузка модели
Ubuntu 24.04 приходит с Python 3.12, Debian 12 — с 3.11, оба укладываются в требуемый диапазон coqui-tts.
apt update && apt install -y python3-venv python3-pip libsndfile1
useradd -r -m -d /opt/xtts -s /usr/sbin/nologin xtts
sudo -u xtts python3 -m venv /opt/xtts/venv
libsndfile1 — не опция, а системная зависимость пакета soundfile, через который XTTS читает и пишет WAV; без неё падение случится не при установке, а при первом вызове tts_to_file. Ставить пакет от root на свежей Ubuntu не выйдет:
error: externally-managed-environment
× This environment is externally managed
Это PEP 668, а не поломка — лечится тем же venv из команды выше.
sudo -u xtts /opt/xtts/venv/bin/pip install --no-cache-dir "coqui-tts==0.27.5"
sudo -u xtts /opt/xtts/venv/bin/pip install torch torchaudio --index-url https://download.pytorch.org/whl/cpu
Индекс cpu здесь не для галочки: с версии PyTorch 2.11 голая команда pip install torch тянет колёса под CUDA 13.0, даже если видеокарты на сервере нет, и раздувает окружение на пустом месте. Если видеокарта всё же есть, а драйвер старше свежего CUDA 13.0 — ставьте --index-url https://download.pytorch.org/whl/cu126. Такое GPU-колесо тащит за собой россыпь пакетов nvidia-* (cublas, cudnn, nccl) — суммарно несколько гигабайт диска сверх весов самой модели, это стоит учитывать при выборе размера NVMe.
При первом обращении к модели библиотека выводит в консоль текст лицензии CPML и просит подтверждение — для systemd-сервиса это означает зависший без вывода процесс, который ждёт нажатия y в терминал, которого нет. Обход — переменная окружения:
sudo -u xtts COQUI_TOS_AGREED=1 TTS_HOME=/opt/xtts/models /opt/xtts/venv/bin/python -c "
from TTS.api import TTS
TTS('tts_models/multilingual/multi-dataset/xtts_v2')
"
COQUI_TOS_AGREED=1 означает согласие с лицензией из раздела выше — ставьте её осознанно. По умолчанию модель ложится в ~/.local/share/tts того пользователя, от которого её скачали; TTS_HOME переопределяет путь на свой, как в команде выше. Прогрели кэш под root без этой переменной, а сервис работает от xtts — второе скачивание 1,87 ГБ случится посреди рабочего запроса. Держите TTS_HOME одинаковым при прогреве и в systemd-юните — тот же /opt/xtts/models пригодится в следующем разделе.
Первый синтез и клонирование голоса: скрипт и типичные ошибки
Минимальный рабочий скрипт:
from TTS.api import TTS
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2", gpu=False)
tts.tts_to_file(
text="Сервер готов к работе.",
speaker_wav="reference.wav",
language="ru",
file_path="out.wav",
)
Референсный ролик — не формальность. Технически хватает и 3 секунд чистой речи, но стабильный результат начинается от 6 секунд без музыки и шума; можно передать список из нескольких файлов вместо одного — на скорость это не влияет, а на устойчивость клонирования влияет заметно.
Три ошибки встречаются почти всем, кто ставит XTTS впервые на свежем окружении:
| Текст ошибки | Причина | Решение |
|---|---|---|
Weights only load failed ... GLOBAL TTS.tts.configs.xtts_config.XttsConfig was not an allowed global | С PyTorch 2.6 torch.load по умолчанию требует weights_only=True | Разрешить классы вручную или закрепить torch<2.6 |
AttributeError: 'GPT2InferenceModel' object has no attribute 'generate' | transformers 4.50 убрал GenerationMixin из базового наследования PreTrainedModel | Обновить coqui-tts до 0.27.0+ или закрепить transformers<4.50 |
| Процесс висит без вывода при первом запуске | Ждёт согласия с лицензией CPML в интерактивном терминале | Задать COQUI_TOS_AGREED=1 |
Для первой ошибки рабочий обход — явно разрешить классы конфигурации перед загрузкой:
import torch
from TTS.tts.configs.xtts_config import XttsConfig
from TTS.tts.models.xtts import XttsAudioConfig, XttsArgs
from TTS.config.shared_configs import BaseDatasetConfig
torch.serialization.add_safe_globals([XttsConfig, XttsAudioConfig, XttsArgs, BaseDatasetConfig])
Обе ошибки — не баги вашей установки, а трение версий: coqui-tts актуальной версии их уже обходит, и если текст всё же вылезает — почти наверняка в requirements.txt где-то закреплён старый TTS или устаревший transformers.
CPU или GPU: честно о скорости и xtts-api-server вместо своего кода
XTTS — архитектура, спроектированная под видеокарту. На CPU она формально работает (gpu=False в скрипте выше), но по многочисленным отчётам в issues проекта и на демо-пространствах Hugging Face синтез одного абзаца текста занимает не доли секунды, а десятки секунд, иногда больше минуты — заметно медленнее реального времени. Собственную оценку разработчики coqui-tts в официальной документации не публикуют, а вот проект openedai-speech, оборачивающий XTTS в OpenAI-совместимый API, в своей документации прямо указывает требование для этого бэкенда: видеокарта Nvidia с CUDA и около 4 ГБ VRAM. Без этого — либо переключаться на Piper внутри того же openedai-speech, либо мириться со скоростью CPU.
Отсюда практический вывод: CPU-сервер годится для офлайн-синтеза — озвучка роликов, IVR-подсказок, рекламных вставок, где результат нужен через минуту-другую, а не мгновенно. Для живого голосового бота или синхронного дубляжа нужна видеокарта; расчёт VRAM под связку из распознавания, языковой модели и синтеза разобран в статье как поднять голосового бота на своей модели на сервере.
Писать свою обёртку вокруг TTS.api не обязательно — есть готовый xtts-api-server:
sudo -u xtts /opt/xtts/venv/bin/pip install xtts-api-server
sudo -u xtts /opt/xtts/venv/bin/python -m xtts_api_server --host 127.0.0.1 --port 8020
По умолчанию сервер слушает localhost:8020, документация эндпоинтов — на /docs. Флаг --deepspeed ускоряет инференс в несколько раз на GPU, --lowvram держит модель в оперативной памяти и подгружает в видеопамять по запросу, --streaming-mode отдаёт аудио потоком. В README проекта отдельно оговорены требования к образцу голоса для папки спикеров: моно, 22050 Гц, 16 бит, 7–9 секунд — жёстче, чем общая рекомендация для API, но именно под эти параметры настроена нарезка образца внутри сервера. Есть и готовый образ daswer123/xtts-api-server в Docker Hub, если контейнер удобнее venv.
В прод: systemd, Nginx и безопасность
Юнит для xtts-api-server выглядит так:
[Unit]
Description=XTTS API server
After=network-online.target
[Service]
User=xtts
WorkingDirectory=/opt/xtts
Environment=COQUI_TOS_AGREED=1
Environment=TTS_HOME=/opt/xtts/models
ExecStart=/opt/xtts/venv/bin/python -m xtts_api_server --host 127.0.0.1 --port 8020
Restart=on-failure
RestartSec=5
TimeoutStartSec=300
[Install]
WantedBy=multi-user.target
TimeoutStartSec=300 не для перестраховки: если модели нет в TTS_HOME, старт растянется на время скачивания 1,87 ГБ. Наружу сервис выставляют через Nginx:
location / {
proxy_pass http://127.0.0.1:8020;
client_max_body_size 50m;
proxy_read_timeout 120s;
proxy_buffering off;
}
client_max_body_size увеличен ради загрузки образцов голоса — иначе 413 Request Entity Too Large на первой же попытке клонирования по файлу больше мегабайта. proxy_buffering off важен для --streaming-mode: с буферизацией по умолчанию клиент получит аудио одним куском в конце, а не потоком. Порт 8020 наружу не открывайте — ufw allow 22/tcp, ufw allow 'Nginx Full', и весь трафик к синтезу идёт только через Nginx с TLS. Открытый порт TTS без авторизации — это чужой текст, озвученный клонированным голосом на вашей видеокарте и за ваш счёт.
Если приложению нужен именно OpenAI-совместимый /v1/audio/speech, а не собственный API xtts-api-server, посмотрите на openedai-speech — тот же принцип обёртки, но с бэкендами XTTS и Piper под одним знакомым многим клиентам форматом запроса.
Какой сервер под XTTS брать в MAATRIX
Задача делится на два непохожих сценария, и путать их дорого.
| Сценарий | Конфигурация | Для чего хватает |
|---|---|---|
| Офлайн-синтез на CPU | 2 vCPU, 4 ГБ RAM, 40 ГБ NVMe | Единичные ролики, IVR, озвучка постов — без спешки |
| Комфортный CPU-режим | 4 vCPU, 8 ГБ RAM, 60 ГБ NVMe | Очередь запросов, венв с PyTorch и запас на пиковую память |
| Реальное время | GPU-сервер, от 6 ГБ VRAM | Голосовой бот, синхронная озвучка диалога |
Сама модель по требованиям openedai-speech укладывается примерно в 4 ГБ VRAM, но карты младше 6 ГБ на рынке GPU-аренды почти не встречаются, а запас нужен под CUDA-буферы и параллельные запросы — отсюда разница между «модели достаточно» и «стоит брать».
Честный минимум — 2 vCPU, 4 ГБ RAM, 40 ГБ NVMe. Веса модели — 1,87 ГБ, CPU-сборка PyTorch с зависимостями добавляет ещё около гигабайта, а сам процесс синтеза держит в памяти и модель, и промежуточные тензоры. На 2 ГБ инференс упадёт по OOM на первом же запросе, подтверждение — journalctl -k | grep -i oom; тарифом ниже сюда не заходите.
Комфортный вариант — 4 vCPU, 8 ГБ RAM, 60 ГБ NVMe. Запас на очередь запросов через xtts-api-server, место под несколько альтернативных образцов голоса и логи. Но для живого диалога это всё ещё не то — очередь на CPU растёт, а не сокращается.
Локация — Лондон (UK). Причина та же, что и для распознавания речи: веса скачиваются с huggingface.co, а с российских адресов до этого хоста часто не достучаться напрямую — первая же загрузка XTTS-v2 зависает на 1,87 ГБ. С британского адреса модель качается без танцев с прокси, плюс низкий пинг до Европы, если готовый звук нужен зарубежной аудитории.
XTTS-v2 нет в каталоге готовых приложений apps.maatrix.io — инструмент нишевый, и сервер под него приходит чистым: Ubuntu или Debian, дальше установка по шагам из этой статьи. Зато в каталоге есть готовые сборки соседей по голосовому стеку — Whisper для распознавания речи (подробности — в статье как установить и настроить faster-whisper на VPS) и Ollama для языковой модели, которые ставятся автоматически при заказе. Если нужна видеокарта под синтез в реальном времени, у MAATRIX есть отдельные GPU-серверы — конфигурации и логика выбора карты разобраны в статье про GPU-сервер для инференса LLM. Оплата — картами российских банков, по СБП, криптовалютой или токеном MAAT, независимо от того, CPU это или GPU.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Можно ли использовать XTTS в коммерческом проекте?
По умолчанию нет: веса модели лицензированы по Coqui Public Model License — только некоммерческое использование. Легального способа купить коммерческую лицензию у Coqui сейчас нет, компания закрылась в январе 2024 года. Для платного продукта смотрите в сторону моделей с permissive-лицензией вроде Piper.
Обязательна ли видеокарта для XTTS?
Нет, но с оговоркой: на CPU синтез абзаца текста занимает десятки секунд и больше, это нормально для офлайн-озвучки, но не для живого диалога. Для реального времени нужна видеокарта — сам openedai-speech в требованиях к своему XTTS-бэкенду называет Nvidia с CUDA и около 4 ГБ VRAM.
Как исправить ошибку Weights only load failed при загрузке модели?
Это следствие PyTorch 2.6+, где torch.load по умолчанию требует weights_only=True. Быстрее всего закрепить torch<2.6 в зависимостях; правильнее — разрешить классы конфигурации через torch.serialization.add_safe_globals([XttsConfig, XttsAudioConfig, XttsArgs, BaseDatasetConfig]) перед загрузкой модели.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.