# Dia TTS (Nari Labs)

Dia от Nari Labs — это продвинутая модель преобразования текста в речь, которая специализируется на **реалистичных многоголосых диалогах**. В отличие от традиционного TTS, который обрабатывает одного говорящего за раз, Dia генерирует естественные разговоры между несколькими говорящими с эмоциями, смехом, колебаниями и другими невербальными сигналами. При 1,6 миллиардах параметров она работает на любой видеокарте с 8 ГБ и более.

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

* **Многоголосые диалоги**: Генерирует разговоры между 2 и более говорящими за один проход
* **Невербальные сигналы**: Смех `(смеётся)`, колебания `(вздыхает)`, паузы — автоматически встраиваются
* **Эмоциональная речь**: Естественная интонация без явных тегов эмоций
* **1,6B параметров**: Помещается на RTX 3070/3080 (8–10 ГБ видеопамяти)
* **Лицензия Apache 2.0**: Полное коммерческое использование
* **Интеграция с HuggingFace**: Работает с библиотекой Transformers

## Требования

| Компонент | Минимум        | Рекомендуется   |
| --------- | -------------- | --------------- |
| GPU       | RTX 3070 (8GB) | RTX 3080 (10GB) |
| VRAM      | 8GB            | 10GB+           |
| ОЗУ       | 16GB           | 32GB            |
| Диск      | 10GB           | 15GB            |
| Python    | 3.9+           | 3.11            |

**Рекомендуемый GPU на Clore.ai**: RTX 3080 10GB (\~$0.2–0.5/день)

## Установка

```bash
# Вариант 1: pip install
pip install dia-tts

# Вариант 2: Из исходников
git clone https://github.com/nari-labs/dia.git
cd dia
pip install -e .
```

## Быстрый старт

### Базовый многоголосый диалог

```python
from dia import Dia

# Загрузить модель
model = Dia.from_pretrained("nari-labs/Dia-1.6B")

# Сгенерировать многоголосый разговор
# [S1] = Говорящий 1, [S2] = Говорящий 2
text = """[S1] Эй, ты пробовал новую платформу для аренды GPU?
[S2] Ты про Clore? Да, я арендовал RTX 4090 вчера.
[S1] Как прошло?
[S2] (смеётся) Честно? Гораздо дешевле, чем я ожидал. Примерно два бакса в день.
[S1] Не может быть. Это... это действительно безумие."""

audio = model.generate(text)

# Сохранить в файл
import soundfile as sf
sf.write("dialog.wav", audio, samplerate=24000)
```

### С эмоциями и невербальными сигналами

```python
# Dia автоматически обрабатывает естественные речевые паттерны
text = """[S1] Я только что получил результаты...
[S2] И? Не томи меня!
[S1] (вздыхает) Мы прошли. Мы действительно прошли все тесты.
[S2] (смеётся) Я же говорила! Я говорила, что у нас получится!
[S1] Не могу в это поверить... (смеётся) Ладно, ладно, давайте праздновать."""

audio = model.generate(text, temperature=0.8)
sf.write("emotional_dialog.wav", audio, samplerate=24000)
```

### Один говорящий

```python
# Работает и для одного говорящего
text = "[S1] Добро пожаловать в документацию Clore AI. В этом руководстве мы пройдём по настройке вашей первой аренды GPU и развертыванию модели машинного обучения."

audio = model.generate(text)
sf.write("narration.wav", audio, samplerate=24000)
```

## Веб-интерфейс Gradio

```python
# Запустить интерактивную демонстрацию
python -m dia.app --port 7860 --share

# Или вручную:
import gradio as gr
from dia import Dia

model = Dia.from_pretrained("nari-labs/Dia-1.6B")

def generate_speech(text):
    audio = model.generate(text)
    return (24000, audio)

demo = gr.Interface(
    fn=generate_speech,
    inputs=gr.Textbox(label="Диалог (используйте теги [S1], [S2])", lines=10),
    outputs=gr.Audio(label="Generated Speech"),
    title="Dia TTS — Многоголосый диалог"
)
demo.launch(server_port=7860)
```

## Сценарии использования

* **Генерация подкастов**: Создавайте разговорные подкасты по сценариям
* **Диалоги для аудиокниг**: Генерируйте диалоги персонажей с различными голосами
* **Диалоги для игр**: Разговоры NPC с естественными речевыми паттернами
* **Данные для обучения**: Генерируйте разнообразные речевые датасеты для обучения ASR
* **Голоса для чатботов**: Многотуровые диалоги с эмоциональными ответами

## Советы для пользователей Clore.ai

* **RTX 3080 — идеально**: 10 ГБ видеопамяти легко справляются с Dia примерно за \~$0.2–0.5/день
* **Пакетная генерация**: Обрабатывайте несколько диалогов в цикле, чтобы максимально использовать время аренды
* **Сохраняйте модели на постоянном хранилище**: Если у вашего экземпляра Clore есть постоянный диск, кешируйте модель, чтобы избежать повторной загрузки
* **Температура 0.7–0.9**: Ниже = более последовательный, выше = более выразительный/разнообразный
* **Только английский**: В настоящее время Dia ориентирована на английский — для многоязычности см. руководство Qwen3-TTS

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

| Проблема                          | Решение                                                                                    |
| --------------------------------- | ------------------------------------------------------------------------------------------ |
| CUDA — недостаточно памяти        | Используйте `model.to("cuda", torch_dtype=torch.float16)` для половинной точности          |
| Голоса говорящих похожи           | Добавьте больше текста/контекста для каждого говорящего; попробуйте увеличить температуру  |
| Невербальные сигналы игнорируются | Убедитесь в правильном формате: `(смеётся)`, `(вздыхает)` в скобках                        |
| Низкое качество аудио             | Увеличьте `num_steps` параметр, если он доступен; убедитесь в частоте дискретизации 24 кГц |

## Дополнительное чтение

* [GitHub Nari Labs](https://github.com/nari-labs/dia)
* [Модель на HuggingFace](https://huggingface.co/nari-labs/Dia-1.6B)
* [Сравнение: Dia vs ElevenLabs](https://nari-labs.github.io/dia/) — официальная демонстрационная страница


---

# Agent Instructions: 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/dia-tts.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.
