# Clonación de voz Chatterbox

Chatterbox es una familia de modelos de texto a voz de última generación y código abierto de [Resemble AI](https://resemble.ai). Realiza clonación de voz en cero disparos a partir de un breve clip de referencia (\~10 segundos), admite etiquetas paralingüísticas como `[risa]` y `[tos]`, y ofrece una variante multilingüe que cubre más de 23 idiomas. Hay tres variantes de modelos disponibles: Turbo (350M, baja latencia), Original (500M, controles creativos) y Multilingual (500M, 23+ idiomas).

**GitHub:** [resemble-ai/chatterbox](https://github.com/resemble-ai/chatterbox) **PyPI:** [chatterbox-tts](https://pypi.org/project/chatterbox-tts/) **Licencia:** MIT

## Características clave

* **Clonación de voz zero-shot** — clona cualquier voz a partir de \~10 segundos de audio de referencia
* **Etiquetas paralingüísticas** (Turbo) — `[risa]`, `[tos]`, `[risita]`, `[suspiro]` para discurso realista
* **Más de 23 idiomas** (Multilingual) — árabe, chino, francés, alemán, japonés, coreano, ruso, español y más
* **Ajuste de CFG y exageración** (Original) — control creativo sobre la expresividad
* **Tres tamaños de modelo** — Turbo (350M), Original (500M), Multilingual (500M)
* **Licencia MIT** — completamente abierto para uso comercial

## Requisitos

| Componente | Mínimo         | Recomendado         |
| ---------- | -------------- | ------------------- |
| GPU        | RTX 3060 12 GB | RTX 3090 / RTX 4090 |
| VRAM       | 6 GB           | 10 GB+              |
| RAM        | 8 GB           | 16 GB               |
| Disco      | 5 GB           | 15 GB               |
| Python     | 3.10+          | 3.11                |
| CUDA       | 11.8+          | 12.1+               |

**Recomendación de Clore.ai:** RTX 3090 (~~$0.30–1.00/día) para un margen cómodo de VRAM. RTX 3060 funciona para el modelo Turbo. Para el modelo Multilingual con textos largos, considere una RTX 4090 (~~$0.50–2.00/día).

## Instalación

```bash
# Instalar desde PyPI
pip install chatterbox-tts

# O instalar desde el código fuente
git clone https://github.com/resemble-ai/chatterbox.git
cd chatterbox
pip install -e .

# Verificar
python -c "from chatterbox.tts import ChatterboxTTS; print('Chatterbox listo')"
```

## Inicio rápido

### Modelo Turbo (Latencia más baja)

```python
import torchaudio as ta
from chatterbox.tts_turbo import ChatterboxTurboTTS

model = ChatterboxTurboTTS.from_pretrained(device="cuda")

# TTS básico con etiquetas paralingüísticas
text = "¡Hey, bienvenido de nuevo! [risita] Tengo grandes noticias para ti hoy."

# Clonación de voz — proporciona un clip de referencia de más de 10 segundos
wav = model.generate(text, audio_prompt_path="reference_voice.wav")

ta.save("output_turbo.wav", wav, model.sr)
print(f"Guardado a {model.sr} Hz")
```

### Modelo Original (Inglés, Controles Creativos)

```python
import torchaudio as ta
from chatterbox.tts import ChatterboxTTS

model = ChatterboxTTS.from_pretrained(device="cuda")

text = "The quick brown fox jumps over the lazy dog. It was a beautiful morning."

# Generar sin clonación de voz (usa la voz predeterminada)
wav = model.generate(text)
ta.save("output_default.wav", wav, model.sr)

# Generar con clonación de voz
wav = model.generate(text, audio_prompt_path="my_voice_sample.wav")
ta.save("output_cloned.wav", wav, model.sr)
```

## Ejemplos de uso

### Clonación de voz multilingüe

```python
import torchaudio as ta
from chatterbox.mtl_tts import ChatterboxMultilingualTTS

model = ChatterboxMultilingualTTS.from_pretrained(device="cuda")

# Francés
french_text = "Bonjour, comment allez-vous? Bienvenue dans notre démonstration."
wav_fr = model.generate(french_text, language_id="fr")
ta.save("output_french.wav", wav_fr, model.sr)

# Japonés
japanese_text = "こんにちは、テキスト読み上げのデモンストレーションです。"
wav_ja = model.generate(japanese_text, language_id="ja")
ta.save("output_japanese.wav", wav_ja, model.sr)

# Ruso con clonación de voz
russian_text = "Привет! Это демонстрация синтеза речи на русском языке."
wav_ru = model.generate(
    russian_text,
    language_id="ru",
    audio_prompt_path="russian_speaker.wav"
)
ta.save("output_russian.wav", wav_ru, model.sr)

print("Generación multilingüe completada")
```

### Etiquetas paralingüísticas (Turbo)

```python
import torchaudio as ta
from chatterbox.tts_turbo import ChatterboxTurboTTS

model = ChatterboxTurboTTS.from_pretrained(device="cuda")

samples = [
    ("greeting", "¡Hola! [risa] Es tan bueno verte de nuevo."),
    ("nervous", "Eh, bueno [tos] No estoy muy seguro sobre eso."),
    ("excited", "¡Dios mío! [risita] ¡Esa es una noticia absolutamente increíble!"),
]

for name, text in samples:
    wav = model.generate(text, audio_prompt_path="speaker_ref.wav")
    ta.save(f"para_{name}.wav", wav, model.sr)
    print(f"Generado: {name}")
```

### Script de procesamiento por lotes

```python
import torchaudio as ta
from chatterbox.tts import ChatterboxTTS
import os

model = ChatterboxTTS.from_pretrained(device="cuda")

# Procesar una lista de líneas (por ejemplo, para capítulos de audiolibros)
lines = [
    "Capítulo uno. La aventura comienza.",
    "Era una noche oscura y tormentosa.",
    "El héroe se paró en la encrucijada, incierto del camino por delante.",
]

os.makedirs("output_batch", exist_ok=True)

for i, line in enumerate(lines):
    wav = model.generate(line, audio_prompt_path="narrator_voice.wav")
    ta.save(f"output_batch/line_{i:03d}.wav", wav, model.sr)
    print(f"[{i+1}/{len(lines)}] {line[:40]}...")

print("Procesamiento por lotes completado")
```

## Consejos para usuarios de Clore.ai

* **Elección de modelo** — use Turbo para agentes de voz de baja latencia, Original para trabajos creativos en inglés, Multilingual para contenido en otros idiomas
* **Calidad del audio de referencia** — utilice un clip limpio y sin ruido de 10–30 segundos para obtener los mejores resultados de clonación de voz
* **Configuración con Docker** — imagen base `pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime`, exponer puerto `7860/http` para Gradio
* **Gestión de memoria** — llama a `torch.cuda.empty_cache()` entre lotes grandes para liberar VRAM
* **Idiomas compatibles** — ar, da, de, el, en, es, fi, fr, he, hi, it, ja, ko, ms, nl, no, pl, pt, ru, sv, sw, tr, zh
* **Espacio de HuggingFace** — prueba antes de alquilar en [huggingface.co/spaces/ResembleAI/Chatterbox](https://huggingface.co/spaces/ResembleAI/Chatterbox)

## Solución de problemas

| Problema                     | Solución                                                                                                        |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------- |
| `CUDA fuera de memoria`      | Use Turbo (350M) en lugar de Original/Multilingual (500M), o alquile una GPU más grande                         |
| La voz clonada no coincide   | Use un clip de referencia más largo (15–30s) y más limpio con ruido de fondo mínimo                             |
| `numpy` conflicto de versión | Ejecuta `pip install numpy==1.26.4 --force-reinstall`                                                           |
| Descarga lenta del modelo    | Los modelos se obtienen de HuggingFace en la primera ejecución (\~2 GB); pre-descárguelos con `huggingface-cli` |
| El audio tiene artefactos    | Reduzca la longitud del texto por generación; textos muy largos pueden degradar la calidad                      |
| `ModuleNotFoundError`        | Asegúrate de `pip install chatterbox-tts` completado sin errores; verifique la compatibilidad con Python 3.11   |


---

# 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/chatterbox-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.
