> For the complete documentation index, see [llms.txt](https://docs.clore.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.clore.ai/guides/guides_v2-ru/audio-i-golos/styletss2.md).

# StyleTTS2

StyleTTS2 достигает оценок естественности на уровне человека, превышающих записи эталонных треков на бенчмарках LJSpeech и LibriTTS (MOS 4.55 против 4.23 у эталона). Он использует **стилизационную диффузию** и **адверсариальное обучение** для моделирования стилей речи как распределения скрытой переменной, что обеспечивает выразительный синтез и адаптацию к говорящему в режиме zero-shot по короткому референсному клипу.

В отличие от традиционных TTS-систем, StyleTTS2 способен обобщать на невидимых говорящих по короткому аудиоклипу-референсу, создавая речь, сопоставимую с профессиональными актёрами озвучивания. Он был проверен и показал результаты естественности, превышающие оценки человека на нескольких наборах данных — впервые для открытого TTS.

Ключевые особенности:

* **Естественность на уровне человека** — превосходит человеческие MOS-оценки на LJSpeech
* **Адаптация говорящего в режиме zero-shot** — клонирует любой голос по короткому аудиосэмплу
* **Диффузия стиля** — выразительная, разнообразная просодия и стиль речи
* **Поддержка многоголосности** — обучен на LibriTTS (более 2 300 говорящих)
* **Лёгкий вывод** — эффективно работает на потребительских GPU

{% hint style="success" %}
Все примеры можно запускать на GPU-серверах, арендуемых через [CLORE.AI Маркетплейс](https://clore.ai/marketplace).
{% endhint %}

***

## Требования к серверу

| Параметр | Минимум                | Рекомендуется           |
| -------- | ---------------------- | ----------------------- |
| GPU      | NVIDIA RTX 3070 (8 ГБ) | NVIDIA RTX 4090 (24 ГБ) |
| VRAM     | 6 ГБ                   | 12–24 ГБ                |
| ОЗУ      | 16 ГБ                  | 32 ГБ                   |
| CPU      | 4 ядра                 | 8+ ядер                 |
| Диск     | 15 ГБ                  | 30 ГБ                   |
| ОС       | Ubuntu 20.04+          | Ubuntu 22.04            |
| CUDA     | 11.7+                  | 12.1+                   |
| Python   | 3.8+                   | 3.10                    |
| Порты    | 22, 7860               | 22, 7860                |

{% hint style="info" %}
StyleTTS2 относительно лёгкий — RTX 3070 или 3080 с комфортом справляются с выводом в реальном времени. Для пакетной обработки или обслуживания параллельных пользователей используйте 4090 или A100.
{% endhint %}

***

## Быстрое развертывание на CLORE.AI

StyleTTS2 требует кастомной сборки Docker, так как нет официального предсобранного образа. Установка занимает примерно 10 минут.

### 1. Найдите подходящий сервер

Перейдите на [CLORE.AI Маркетплейс](https://clore.ai/marketplace) и отфильтруйте по:

* **VRAM**: ≥ 6 ГБ
* **GPU**: RTX 3070, 3080, 3090, 4080, 4090, A100
* **Диск**: ≥ 20 ГБ

### 2. Настройте развёртывание

**Docker-образ (базовый):**

```
nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04
```

**Проброс портов:**

```
22   → доступ по SSH
7860 → веб-интерфейс Gradio
```

**Команда запуска:**

```bash
bash -c "apt-get update && apt-get install -y git python3 python3-pip ffmpeg espeak-ng && \
  git clone https://github.com/yl4579/StyleTTS2 /workspace/StyleTTS2 && \
  cd /workspace/StyleTTS2 && pip install -r requirements.txt && \
  python app.py"
```

### 3. Доступ к интерфейсу

```
http://<your-clore-server-ip>:7860
```

***

## Пошаговая настройка

### Шаг 1: подключитесь по SSH к вашему серверу

```bash
ssh root@<your-clore-server-ip> -p <ssh-port>
```

### Шаг 2: Установите системные зависимости

```bash
apt-get update && apt-get install -y \
  git \
  python3 \
  python3-pip \
  python3-venv \
  ffmpeg \
  espeak-ng \
  libsndfile1 \
  build-essential \
  wget \
  curl
```

### Шаг 3: Клонируйте репозиторий StyleTTS2

```bash
cd /workspace
git clone https://github.com/yl4579/StyleTTS2.git
cd StyleTTS2
```

### Шаг 4: Создайте виртуальное окружение Python

```bash
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
```

### Шаг 5: Установите зависимости

```bash
pip install -r requirements.txt

# Установите дополнительные зависимости при необходимости
pip install phonemizer gruut
```

### Шаг 6: Скачайте предобученные модели

```bash
# Скачайте модель LJSpeech (одноголосая, высокое качество)
mkdir -p Models/LJSpeech
wget -O Models/LJSpeech/epoch_2nd_00100.pth \
  "https://huggingface.co/yl4579/StyleTTS2-LJSpeech/resolve/main/Models/LJSpeech/epoch_2nd_00100.pth"

wget -O Models/LJSpeech/config.yml \
  "https://huggingface.co/yl4579/StyleTTS2-LJSpeech/resolve/main/Models/LJSpeech/config.yml"

# Скачайте модель LibriTTS (мультиспикер, zero-shot)
mkdir -p Models/LibriTTS
wget -O Models/LibriTTS/epochs_2nd_00020.pth \
  "https://huggingface.co/yl4579/StyleTTS2-LibriTTS/resolve/main/Models/LibriTTS/epochs_2nd_00020.pth"

wget -O Models/LibriTTS/config.yml \
  "https://huggingface.co/yl4579/StyleTTS2-LibriTTS/resolve/main/Models/LibriTTS/config.yml"
```

### Шаг 7: Соберите и запустите Dockerfile

```bash
# Создайте Dockerfile
cat > Dockerfile << 'EOF'
FROM nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
    git python3 python3-pip python3-venv \
    ffmpeg espeak-ng libsndfile1 build-essential wget curl \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /workspace
RUN git clone https://github.com/yl4579/StyleTTS2.git
WORKDIR /workspace/StyleTTS2
RUN pip install --no-cache-dir -r requirements.txt

EXPOSE 7860
CMD ["python3", "app.py", "--share"]
EOF

docker build -t styletts2:local .
docker run -d --name styletts2 --gpus all \
  -p 7860:7860 \
  -v /workspace/models:/workspace/StyleTTS2/Models \
  styletts2:local
```

### Шаг 8: Запустите демо Gradio напрямую

```bash
source venv/bin/activate
python app.py
```

Доступ по адресу `http://<server-ip>:7860`

***

## Примеры использования

### Пример 1: Базовый TTS через Python API

```python
import torch
import soundfile as sf
import numpy as np
from models import *
from utils import *
import yaml

# Загрузить конфиг
config = yaml.safe_load(open("Models/LJSpeech/config.yml"))

# Инициализировать модель
model = build_model(recursive_munch(config['model_params']), "cpu")
params = torch.load("Models/LJSpeech/epoch_2nd_00100.pth", map_location='cpu')
model = load_F0_models(model)

# Перенести на GPU
device = "cuda" if torch.cuda.is_available() else "cpu"
for key in model:
    model[key] = model[key].to(device)

print(f"Model loaded on: {device}")
print(f"VRAM used: {torch.cuda.memory_allocated()/1e9:.2f} GB")
```

***

### Пример 2: Клонирование голоса в режиме Zero-Shot

```python
import torch
import torchaudio
import soundfile as sf
from inference import StyleTTS2Inference

# Инициализировать движок вывода
tts = StyleTTS2Inference(
    model_path="Models/LibriTTS/epochs_2nd_00020.pth",
    config_path="Models/LibriTTS/config.yml",
    device="cuda"
)

# Загрузить референсное аудио (лучше 10–30 секунд)
reference_audio, sr = torchaudio.load("reference_voice.wav")

# Сгенерировать речь в референсном голосе
text = "Clore.ai provides powerful GPU infrastructure for AI applications including text-to-speech synthesis."

audio = tts.synthesize(
    text=text,
    reference_audio=reference_audio,
    reference_sr=sr,
    diffusion_steps=10,    # Больше = лучше качество, медленнее
    embedding_scale=1.5,   # Контролирует силу стиля
    alpha=0.3,             # Вес акустического стиля
    beta=0.7,              # Вес просодического стиля
)

sf.write("cloned_voice_output.wav", audio, 24000)
print("Saved cloned voice output!")
```

***

### Пример 3: Управление выразительным стилем

```python
from inference import StyleTTS2Inference
import soundfile as sf

tts = StyleTTS2Inference(
    model_path="Models/LibriTTS/epochs_2nd_00020.pth",
    config_path="Models/LibriTTS/config.yml",
    device="cuda"
)

text = "Welcome to our presentation on GPU computing with Clore.ai."

# Экспериментируйте с разными параметрами стиля
style_configs = [
    {"name": "neutral",    "alpha": 0.3, "beta": 0.7, "diffusion_steps": 5},
    {"name": "expressive", "alpha": 0.5, "beta": 0.9, "diffusion_steps": 15},
    {"name": "fast",       "alpha": 0.1, "beta": 0.3, "diffusion_steps": 3},
    {"name": "slow_deep",  "alpha": 0.7, "beta": 0.5, "diffusion_steps": 20},
]

for cfg in style_configs:
    audio = tts.synthesize(
        text=text,
        diffusion_steps=cfg["diffusion_steps"],
        alpha=cfg["alpha"],
        beta=cfg["beta"],
    )
    filename = f"style_{cfg['name']}.wav"
    sf.write(filename, audio, 24000)
    print(f"Generated: {filename}")
```

***

### Пример 4: Веб-интерфейс Gradio

```python
import gradio as gr
import soundfile as sf
import numpy as np
from inference import StyleTTS2Inference
import tempfile

tts = StyleTTS2Inference(
    model_path="Models/LibriTTS/epochs_2nd_00020.pth",
    config_path="Models/LibriTTS/config.yml",
    device="cuda"
)

def synthesize(text, reference_audio, diffusion_steps, alpha, beta):
    if reference_audio is not None:
        sr, audio_data = reference_audio
        # Преобразовать в ожидаемый формат
        ref_audio = audio_data.astype(np.float32) / 32768.0
    else:
        ref_audio = None
        sr = None

    output = tts.synthesize(
        text=text,
        reference_audio=ref_audio,
        reference_sr=sr,
        diffusion_steps=int(diffusion_steps),
        alpha=alpha,
        beta=beta,
    )

    # Сохранить во временный файл
    with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f:
        sf.write(f.name, output, 24000)
        return f.name

demo = gr.Interface(
    fn=synthesize,
    inputs=[
        gr.Textbox(label="Input Text", lines=4),
        gr.Audio(label="Reference Voice (optional)", type="numpy"),
        gr.Slider(1, 30, value=10, label="Diffusion Steps"),
        gr.Slider(0.0, 1.0, value=0.3, label="Alpha (Acoustic Style)"),
        gr.Slider(0.0, 1.0, value=0.7, label="Beta (Prosodic Style)"),
    ],
    outputs=gr.Audio(label="Generated Speech"),
    title="StyleTTS2 on Clore.ai GPU",
    description="Human-level TTS with style diffusion"
)

demo.launch(server_name="0.0.0.0", server_port=7860)
```

***

### Пример 5: Пакетная генерация аудиокниг

```python
import soundfile as sf
import numpy as np
from pathlib import Path
from inference import StyleTTS2Inference

tts = StyleTTS2Inference(
    model_path="Models/LibriTTS/epochs_2nd_00020.pth",
    config_path="Models/LibriTTS/config.yml",
    device="cuda"
)

# Разбить текст на абзацы
book_text = """
Глава первая: Революция GPU

История искусственного интеллекта неразрывно связана с эволюцией 
графических процессоров. То, что начиналось как специализированное оборудование для отрисовки пикселей, 
стало двигателем современной революции ИИ.

Глава вторая: Распределённые вычисления

По мере роста размеров моделей одно-GPU обучение уступило место распределённым системам. 
Платформы вроде Clore.ai появились, чтобы демократизировать доступ к этой вычислительной мощи, 
делая корпоративную инфраструктуру GPU доступной для частных лиц и стартапов.
""".strip()

paragraphs = [p.strip() for p in book_text.split('\n\n') if p.strip()]
output_dir = Path("audiobook_output")
output_dir.mkdir(exist_ok=True)

audio_segments = []
for i, paragraph in enumerate(paragraphs):
    print(f"Processing paragraph {i+1}/{len(paragraphs)}...")
    audio = tts.synthesize(
        text=paragraph,
        diffusion_steps=10,
        alpha=0.3,
        beta=0.7,
    )
    segment_path = output_dir / f"segment_{i+1:03d}.wav"
    sf.write(str(segment_path), audio, 24000)
    audio_segments.append(audio)
    print(f"  ✓ Saved {segment_path}")

# Конкатенация всех сегментов с короткой паузой
silence = np.zeros(int(24000 * 0.5))  # 0.5 секунды тишины
full_audio = []
for seg in audio_segments:
    full_audio.append(seg)
    full_audio.append(silence)

combined = np.concatenate(full_audio)
sf.write("audiobook_complete.wav", combined, 24000)
print(f"\nComplete audiobook: {len(combined)/24000:.1f} seconds")
```

***

## Конфигурация

### Ключевые параметры config.yml

```yaml
model_params:
  dim_in: 64
  hidden_dim: 512
  max_conv_dim: 512
  n_layer: 3
  n_mels: 80

diffusion:
  timesteps: 1000
  beta_schedule: "squaredcos_cap_v2"

training:
  batch_size: 16
  epochs: 100
  save_freq: 10
```

### Параметры вывода (Inference Parameters)

| Параметр          | Диапазон | По умолчанию | Эффект                                  |
| ----------------- | -------- | ------------ | --------------------------------------- |
| `diffusion_steps` | 1–30     | 10           | Компромисс качество vs скорость         |
| `alpha`           | 0.0–1.0  | 0.3          | Вес акустического стиля от референса    |
| `beta`            | 0.0–1.0  | 0.7          | Вес просодического стиля от референса   |
| `embedding_scale` | 1.0–3.0  | 1.5          | Общая интенсивность стиля               |
| `t`               | 0.6–1.0  | 0.7          | Уровень шума (больше = больше вариаций) |

***

## Советы по производительности

### 1. Оптимизируйте число шагов диффузии

Значение по умолчанию 10 шагов балансирует качество и скорость. Для реального времени используйте 5 шагов; для максимального качества — 20–30.

```python
# Режим реального времени (быстро)
audio = tts.synthesize(text, diffusion_steps=5)

# Высокое качество (медленно)
audio = tts.synthesize(text, diffusion_steps=20)
```

### 2. Используйте torch.compile (PyTorch 2.0+)

```python
import torch
model = torch.compile(model, mode="reduce-overhead")
```

### 3. Вывод в смешанной точности

```python
with torch.autocast(device_type="cuda", dtype=torch.float16):
    audio = tts.synthesize(text, diffusion_steps=10)
```

### 4. Обрабатывайте несколько предложений пакетно

Обрабатывайте несколько предложений одновременно, когда это возможно, чтобы максимизировать загрузку GPU и снизить накладные расходы.

### 5. Кэшируйте встраивания (embeddings) референсного говорящего

```python
# Вычислить один раз, использовать многократно
speaker_embedding = tts.compute_speaker_embedding(reference_audio, sr)

# Повторно использовать для многих высказываний
for text in texts:
    audio = tts.synthesize_with_embedding(text, speaker_embedding)
```

***

## Устранение неполадок

### Проблема: espeak-ng не найден

```bash
apt-get install -y espeak-ng espeak-ng-data
# Проверка установки
espeak-ng --version
```

### Проблема: Phonemizer выдаёт ошибку

```bash
pip install phonemizer
# Тест
python3 -c "from phonemizer import phonemize; print(phonemize('hello world'))"
```

### Проблема: CUDA out of memory

```bash
# Уменьшите размер батча или используйте offloading на CPU
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:256
# Или переключитесь на FP16
```

### Проблема: Плохое качество аудио

* Увеличьте `diffusion_steps` на 15–20
* Убедитесь, что референсное аудио чистое, минимум 16 кГц
* Попробуйте отрегулировать `alpha` и `beta` параметры
* Используйте более длинный референс (15–30 секунд)

### Проблема: Не удаётся скачать модель с Hugging Face

```bash
pip install huggingface_hub
python3 -c "
from huggingface_hub import snapshot_download
snapshot_download('yl4579/StyleTTS2-LibriTTS', local_dir='Models/LibriTTS')
"
```

***

## Рекомендации Clore.ai по GPU

StyleTTS2 — лёгкая модель: чекпоинт LibriTTS \~300 МБ, вывод быстрый даже на скромных GPU.

| GPU        | VRAM  | Цена Clore.ai | Скорость вывода          | Лучше всего для                      |
| ---------- | ----- | ------------- | ------------------------ | ------------------------------------ |
| Только CPU | —     | \~$0.02/ч     | \~0.5× реального времени | Разработка, тестирование             |
| RTX 3090   | 24 ГБ | \~$0.12/ч     | \~15× реального времени  | Продуктовый API, клонирование голоса |
| RTX 4090   | 24 ГБ | \~$0.70/ч     | \~25× реального времени  | API с высокой конкурентностью        |
| A100 40GB  | 40 ГБ | \~$1.20/ч     | \~40× реального времени  | Генерация больших партий аудиокниг   |

{% hint style="info" %}
**RTX 3090 при \~$0.12/час** является оптимальным выбором для StyleTTS2. Модель достаточно мала, поэтому вы почти не тратите на неё время GPU — полный час синтезированного аудио стоит меньше $0.01 в аренде GPU. Для производства аудиокниг или сервисов клонирования голосов это чрезвычайно экономично.
{% endhint %}

**Совет по качеству клонирования голоса в режиме zero-shot:** Предоставьте 15–30 секунд чистого референсного аудио с частотой 22 kHz или 24 kHz. Модулю стилизующей диффузии требуется достаточное количество аудио, чтобы точно захватить стиль речи, темп и просодию. Шумные или короткие референсы значительно ухудшают качество.

***

## Ссылки

* **GitHub**: <https://github.com/yl4579/StyleTTS2>
* **Статья (arXiv)**: <https://arxiv.org/abs/2306.07691>
* **Hugging Face (LJSpeech)**: <https://huggingface.co/yl4579/StyleTTS2-LJSpeech>
* **Hugging Face (LibriTTS)**: <https://huggingface.co/yl4579/StyleTTS2-LibriTTS>
* **Демо пространство**: <https://huggingface.co/spaces/styletts2/styletts2>
* **CLORE.AI Маркетплейс**: <https://clore.ai/marketplace>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-ru/audio-i-golos/styletss2.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
