# Dia TTS (Nari Labs)

Dia de Nari Labs es un avanzado modelo de texto a voz que se especializa en **diálogo multivocal realista**. A diferencia del TTS tradicional que maneja un solo hablante a la vez, Dia genera conversaciones naturales entre múltiples hablantes con emoción, risas, vacilaciones y otras señales no verbales. Con 1.6B de parámetros, funciona en cualquier GPU de 8GB+.

## Características clave

* **Diálogo multivocal**: Genera conversaciones entre 2+ hablantes en una sola pasada
* **Señales no verbales**: Risa `(se ríe)`, vacilación `(suspira)`, pausas — incrustadas automáticamente
* **Discurso emocional**: Entonación natural sin etiquetas explícitas de emoción
* **1.6B de parámetros**: Cabe en RTX 3070/3080 (8-10GB VRAM)
* **Licencia Apache 2.0**: Uso comercial completo
* **Integración con HuggingFace**: Funciona con la biblioteca Transformers

## Requisitos

| Componente | Mínimo         | Recomendado     |
| ---------- | -------------- | --------------- |
| GPU        | RTX 3070 (8GB) | RTX 3080 (10GB) |
| VRAM       | 8GB            | 10GB+           |
| RAM        | 16GB           | 32GB            |
| Disco      | 10GB           | 15GB            |
| Python     | 3.9+           | 3.11            |

**GPU recomendada de Clore.ai**: RTX 3080 10GB (\~$0.2–0.5/día)

## Instalación

```bash
# Opción 1: pip install
pip install dia-tts

# Opción 2: Desde el código fuente
git clone https://github.com/nari-labs/dia.git
cd dia
pip install -e .
```

## Inicio rápido

### Diálogo multivocal básico

```python
from dia import Dia

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

# Generar conversación multivocal
# [S1] = Hablante 1, [S2] = Hablante 2
text = """[S1] Oye, ¿has probado la nueva plataforma de alquiler de GPU?
[S2] ¿Te refieres a Clore? Sí, alquilé una RTX 4090 ayer.
[S1] ¿Qué tal estuvo?
[S2] (se ríe) ¿Honestamente? Mucho más barato de lo que esperaba. Como dos dólares al día.
[S1] No puede ser. Eso... eso es en serio una locura."""

audio = model.generate(text)

# Guardar en archivo
import soundfile as sf
sf.write("dialog.wav", audio, samplerate=24000)
```

### Con emoción y señales no verbales

```python
# Dia maneja automáticamente patrones naturales del habla
text = """[S1] Acabo de recibir los resultados...
[S2] ¿Y? ¡No me dejes en suspenso!
[S1] (suspira) Aprobamos. De hecho pasamos todas las pruebas.
[S2] (se ríe) ¡Te lo dije! ¡Te dije que lo lograríamos!
[S1] No lo puedo creer... (se ríe) está bien, está bien, vamos a celebrar."""

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

### Hablante único

```python
# También funciona para hablante único
text = "[S1] Bienvenido a la documentación de Clore AI. En esta guía, repasaremos cómo configurar tu primer alquiler de GPU y desplegar un modelo de aprendizaje automático."

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

## Interfaz web Gradio

```python
# Lanzar demo interactiva
python -m dia.app --port 7860 --share

# O manualmente:
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="Diálogo (usa etiquetas [S1], [S2])", lines=10),
    outputs=gr.Audio(label="Voz generada"),
    title="Dia TTS — Diálogo multivocal"
)
demo.launch(server_port=7860)
```

## Casos de uso

* **Generación de podcast**: Crear podcasts conversacionales a partir de guiones
* **Diálogos de audiolibros**: Generar conversaciones entre personajes con voces distintivas
* **Diálogo para juegos**: Conversaciones de NPC con patrones de habla naturales
* **Datos de entrenamiento**: Generar conjuntos de datos de habla diversos para entrenamiento de ASR
* **Voces para chatbots**: Diálogo de múltiples turnos con respuestas emocionales

## Consejos para usuarios de Clore.ai

* **RTX 3080 es ideal**: 10GB de VRAM maneja Dia fácilmente a \~ $0.2–0.5/día
* **Generación por lotes**: Procesa múltiples diálogos en un bucle para maximizar tu tiempo de alquiler
* **Guardar modelos en almacenamiento persistente**: Si tu instancia Clore tiene disco persistente, cachea el modelo para evitar descargarlo de nuevo
* **Temperatura 0.7–0.9**: Menor = más consistente, mayor = más expresivo/variado
* **Solo inglés**: Dia actualmente se enfoca en inglés — para multilingüe, consulta la guía de Qwen3-TTS

## Solución de problemas

| Problema                           | Solución                                                                            |
| ---------------------------------- | ----------------------------------------------------------------------------------- |
| CUDA fuera de memoria              | Usa `model.to("cuda", torch_dtype=torch.float16)` para media precisión              |
| Los hablantes suenan similar       | Agrega más texto/contexto por hablante; prueba una temperatura más alta             |
| Se ignoran las señales no verbales | Asegúrate del formato correcto: `(se ríe)`, `(suspira)` entre paréntesis            |
| Calidad de audio baja              | Aumente `num_steps` parámetro si está disponible; asegura tasa de muestreo de 24kHz |

## Lecturas adicionales

* [GitHub de Nari Labs](https://github.com/nari-labs/dia)
* [Modelo en HuggingFace](https://huggingface.co/nari-labs/Dia-1.6B)
* [Comparación: Dia vs ElevenLabs](https://nari-labs.github.io/dia/) — página de demostración oficial


---

# 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-es/audio-y-voz/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.
