# 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
