> 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-es/audio-y-voz/fish-speech.md).

# Fish Speech

Ejecuta TTS multilingüe Fish Speech y clonación de voz zero-shot en GPUs de Clore.ai

Fish Speech es un sistema multilingüe de texto a voz (TTS) de última generación con capacidades de clonación de voz zero-shot. Con más de 15.000 estrellas en GitHub, admite inglés, chino, japonés, coreano, francés, alemán, árabe, español y más — todo desde un único modelo. Usando solo 10–15 segundos de audio de referencia, Fish Speech puede clonar cualquier voz con una fidelidad notable, lo que lo hace ideal para la producción de audiolibros, el doblaje, los asistentes virtuales y la creación de contenido a escala.

Fish Speech utiliza una arquitectura basada en transformadores con un vocoder VQGAN, logrando puntuaciones de naturalidad casi humanas en los benchmarks estándar de TTS. La WebUI (Gradio) lo hace accesible sin escribir una sola línea de código, mientras que la API REST permite una integración fluida en los flujos de producción.

{% hint style="success" %}
Todos los ejemplos se pueden ejecutar en servidores GPU alquilados a través de [Marketplace de CLORE.AI](https://clore.ai/marketplace).
{% endhint %}

***

## Requisitos del servidor

| Parámetro | Mínimo                  | Recomendado             |
| --------- | ----------------------- | ----------------------- |
| GPU       | NVIDIA RTX 3080 (10 GB) | NVIDIA RTX 4090 (24 GB) |
| VRAM      | 8 GB                    | 16–24 GB                |
| RAM       | 16 GB                   | 32 GB                   |
| CPU       | 4 núcleos               | 8+ núcleos              |
| Disco     | 20 GB                   | 40 GB                   |
| SO        | Ubuntu 20.04+           | Ubuntu 22.04            |
| CUDA      | 11.8+                   | 12.1+                   |
| Puertos   | 22, 7860                | 22, 7860                |

{% hint style="info" %}
Fish Speech funciona eficientemente en GPU de gama media (RTX 3080/3090). Para inferencia por lotes o para atender a varios usuarios concurrentes, se recomienda una RTX 4090 o A100.
{% endhint %}

***

## Despliegue rápido en CLORE.AI

La forma más rápida de poner en marcha Fish Speech es mediante la imagen oficial de Docker directamente desde Docker Hub.

### 1. Encuentra un servidor adecuado

Ve a [Marketplace de CLORE.AI](https://clore.ai/marketplace) y filtra por:

* **VRAM**: ≥ 8 GB
* **GPU**: RTX 3080, 3090, 4080, 4090, A100, H100
* **Disco**: ≥ 20 GB

### 2. Configura tu despliegue

En el formulario de pedido de CLORE.AI, configura lo siguiente:

**Imagen de Docker:**

```
fishaudio/fish-speech:latest
```

**Mapeos de puertos:**

```
22   → Acceso SSH
7860 → Interfaz web de Gradio
```

**Variables de entorno:**

```
NVIDIA_VISIBLE_DEVICES=all
CUDA_VISIBLE_DEVICES=0
```

**Comando de inicio (opcional — inicia automáticamente la WebUI):**

```bash
python -m tools.webui --listen 0.0.0.0 --port 7860
```

### 3. Accede a la interfaz

Una vez implementado, abre tu navegador y navega a:

```
http://<tu-ip-del-servidor-clore>:7860
```

La WebUI de Gradio se cargará con la interfaz completa de Fish Speech lista para usar.

***

## Configuración paso a paso

### Paso 1: conéctate por SSH a tu servidor

```bash
ssh root@<la-ip-de-tu-servidor-clore> -p <puerto-ssh>
```

### Paso 2: Descarga y ejecuta el contenedor Docker

```bash
docker pull fishaudio/fish-speech:latest

docker run -d \\
  --name fish-speech \
  --gpus all \\
  -p 7860:7860 \
  -p 22:22 \
  -v /workspace/fish-speech:/workspace \
  -e NVIDIA_VISIBLE_DEVICES=all \
  fishaudio/fish-speech:latest \\
  python -m tools.webui --listen 0.0.0.0 --port 7860
```

### Paso 3: Verifica el acceso a la GPU

```bash
docker exec fish-speech nvidia-smi
```

Deberías ver tu GPU listada con la VRAM disponible.

### Paso 4: Comprueba la descarga del modelo

Fish Speech descarga automáticamente los pesos del modelo en la primera ejecución (\~3–5 GB). Supervisa el progreso:

```bash
docker logs -f fish-speech
```

Espera hasta que veas:

```
Running on local URL:  http://0.0.0.0:7860
```

### Paso 5: Accede a la WebUI

Navega a `http://<ip-del-servidor>:7860` en tu navegador.

### Paso 6: (Opcional) Habilita el servidor API

```bash
docker exec -d fish-speech \
  python -m tools.api_server --listen 0.0.0.0 --port 8080
```

***

## Ejemplos de uso

### Ejemplo 1: Texto a voz básico mediante la WebUI

1. Abre la WebUI en `http://<ip-del-servidor>:7860`
2. Introduce texto en el **"Texto"** campo:

   ```
   Bienvenido a Clore.ai, el mercado de GPU en la nube para cargas de trabajo de IA.
   ```
3. Selecciona el idioma: **Inglés**
4. Haz clic en **"Generar"**
5. Descarga el `.wav` archivo

***

### Ejemplo 2: Clonación de voz zero-shot

Clona cualquier voz usando solo 10–15 segundos de audio de referencia:

1. En la WebUI, navega a la **"Clonación de voz"** pestaña
2. Sube tu archivo de audio de referencia (`.wav` o `.mp3`, 10–30 segundos)
3. Introduce la transcripción del audio de referencia (opcional, pero mejora la calidad)
4. Introduce el texto objetivo a sintetizar
5. Haz clic en **"Clonar y generar"**

El modelo analizará las características de la voz y sintetizará el habla con esa voz.

***

### Ejemplo 3: TTS basado en API (Python)

```python
import requests
import base64

# Punto final de la API de Fish Speech
API_URL = "http://<your-clore-server-ip>:8080/v1/tts"

payload = {
    "text": "Hola, esta es una prueba de Fish Speech ejecutándose en la infraestructura GPU de Clore.ai.",
    "reference_id": None,  # Usa la voz predeterminada
    "format": "wav",
    "streaming": False
}

response = requests.post(API_URL, json=payload)

if response.status_code == 200:
    with open("output.wav", "wb") as f:
        f.write(response.content)
    print("Audio guardado en output.wav")
else:
    print(f"Error: {response.status_code} - {response.text}")
```

***

### Ejemplo 4: TTS multilingüe

```python
import requests

API_URL = "http://<your-clore-server-ip>:8080/v1/tts"

texts = {
    "en": "Clore.ai proporciona computación en la nube con GPU asequible para investigadores de IA.",
    "zh": "Clore.ai 为 los investigadores de IA proporciona computación en la nube con GPU asequible.",
    "ja": "Clore.ai ofrece computación en la nube con GPU asequible para investigadores de IA.",
    "ko": "Clore.ai ofrece computación en la nube con GPU asequible para investigadores de IA.",
    "fr": "Clore.ai proporciona computación en la nube con GPU asequible para investigadores de IA.",
}

for lang, text in texts.items():
    payload = {"text": text, "format": "wav"}
    response = requests.post(API_URL, json=payload)
    if response.status_code == 200:
        filename = f"output_{lang}.wav"
        with open(filename, "wb") as f:
            f.write(response.content)
        print(f"Guardado {filename}")
```

***

### Ejemplo 5: Procesamiento por lotes de archivos de audio

```python
import requests
import os
from pathlib import Path

API_URL = "http://<your-clore-server-ip>:8080/v1/tts"
OUTPUT_DIR = Path("./tts_outputs")
OUTPUT_DIR.mkdir(exist_ok=True)

# Lote de textos a convertir
texts = [
    "Capítulo uno: El comienzo de una nueva era en la inteligencia artificial.",
    "Capítulo dos: Cómo la computación GPU transformó el aprendizaje automático.",
    "Capítulo tres: El auge de las tecnologías de síntesis de voz.",
    "Capítulo cuatro: Construyendo el futuro con la infraestructura de Clore.ai.",
    "Capítulo cinco: Conclusión y próximos pasos.",
]

for i, text in enumerate(texts):
    payload = {
        "text": text,
        "format": "wav",
        "streaming": False
    }
    response = requests.post(API_URL, json=payload, timeout=60)
    if response.status_code == 200:
        output_path = OUTPUT_DIR / f"chapter_{i+1:02d}.wav"
        with open(output_path, "wb") as f:
            f.write(response.content)
        print(f"✓ Generado: {output_path}")
    else:
        print(f"✗ Falló el capítulo {i+1}: {response.status_code}")

print(f"\nTodos los archivos guardados en {OUTPUT_DIR}")
```

***

## Configuración

### Docker Compose (Configuración de producción)

```yaml
version: '3.8'

services:
  fish-speech:
    image: fishaudio/fish-speech:latest
    container_name: fish-speech
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
      - CUDA_VISIBLE_DEVICES=0
    ports:
      - "7860:7860"
      - "8080:8080"
    volumes:
      - ./models:/workspace/models
      - ./outputs:/workspace/outputs
      - ./references:/workspace/references
    command: >
      bash -c "python -m tools.webui --listen 0.0.0.0 --port 7860 &
               python -m tools.api_server --listen 0.0.0.0 --port 8080 &
               wait"
    restart: unless-stopped
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
```

### Opciones clave de configuración

| Opción             | Valor predeterminado | Descripción                                           |
| ------------------ | -------------------- | ----------------------------------------------------- |
| `--listen`         | `0.0.0.0`            | Interfaz a la que enlazar el servidor                 |
| `--port`           | `7860`               | Puerto para la WebUI de Gradio                        |
| `--compile`        | `false`              | Habilita torch.compile para una inferencia más rápida |
| `--device`         | `cuda`               | Dispositivo a usar (`cuda`, `cpu`, `mps`)             |
| `--half`           | `true`               | Usa precisión media FP16 (ahorra VRAM)                |
| `--num_samples`    | `1`                  | Número de muestras de audio a generar                 |
| `--max_new_tokens` | `1024`               | Máximo de nuevos tokens para la generación            |

### Variantes del modelo

| Modelo                | Tamaño   | Idiomas   | Notas                  |
| --------------------- | -------- | --------- | ---------------------- |
| `fish-speech-1.4`     | \~3 GB   | 8 idiomas | Última versión estable |
| `fish-speech-1.2-sft` | \~2,5 GB | 8 idiomas | Variante afinada       |
| `fish-speech-1.2`     | \~2,5 GB | 8 idiomas | Modelo base            |

***

## Consejos de rendimiento

### 1. Habilita torch.compile para una inferencia más rápida

```bash
# Añade el indicador --compile al iniciar
python -m tools.webui --listen 0.0.0.0 --port 7860 --compile
```

La primera ejecución será más lenta (la compilación tarda 2–5 minutos), pero la inferencia posterior será entre un 20 % y un 40 % más rápida.

### 2. Usa precisión media (FP16)

FP16 reduce el uso de VRAM en \~50 % con una pérdida mínima de calidad:

```bash
python -m tools.webui --listen 0.0.0.0 --port 7860 --half
```

### 3. Precarga voces de referencia

Almacena las voces de referencia usadas con frecuencia en el directorio de referencias del contenedor para evitar reprocesarlas:

```bash
# Copia el audio de referencia en el contenedor
docker cp my_voice.wav fish-speech:/workspace/references/my_voice.wav
```

### 4. Optimización de memoria de la GPU

```bash
# Establece la fracción óptima de memoria CUDA
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512

# Limpia la caché de la GPU entre lotes grandes
docker exec fish-speech python -c "import torch; torch.cuda.empty_cache()"
```

### 5. Ajuste del tamaño de lote

Para solicitudes API por lotes, tamaños de lote óptimos:

* **RTX 3080 (10 GB)**: batch\_size = 1–2
* **RTX 3090/4090 (24 GB)**: batch\_size = 4–8
* **A100 (40/80 GB)**: batch\_size = 16–32

***

## Solución de problemas

### Problema: El contenedor no arranca — CUDA no encontrado

```bash
# Verifica el controlador NVIDIA dentro del contenedor
docker exec fish-speech nvidia-smi

# Si falla, comprueba el controlador del host
nvidia-smi

# Vuelve a ejecutar con indicadores explícitos de GPU
docker run --gpus all --rm fishaudio/fish-speech:latest nvidia-smi
```

### Problema: Error de memoria insuficiente (OOM)

```bash
# Comprueba el uso de VRAM
docker exec fish-speech nvidia-smi

# Usa FP16 para reducir a la mitad el uso de VRAM
# Reinicia el contenedor con el indicador --half
docker stop fish-speech
docker run -d --name fish-speech --gpus all -p 7860:7860 \
  fishaudio/fish-speech:latest \\
  python -m tools.webui --listen 0.0.0.0 --port 7860 --half
```

### Problema: El puerto 7860 no es accesible

```bash
# Comprobar que el contenedor esté en ejecución
docker ps | grep fish-speech

# Comprueba el enlace del puerto
docker port fish-speech

# Verifica el firewall (en el servidor de Clore)
# Asegúrate de que el puerto 7860 esté mapeado en la configuración de tu pedido de CLORE.AI
```

### Problema: La descarga del modelo falla / descarga lenta

```bash
# Comprueba la conectividad a Internet desde el contenedor
docker exec fish-speech curl -I https://huggingface.co

# Pre-descarga manualmente los modelos
docker exec fish-speech python -c "
from huggingface_hub import snapshot_download
snapshot_download('fishaudio/fish-speech-1.4')
"
```

### Problema: La calidad del audio es mala

* Asegúrate de que el audio de referencia esté limpio (sin ruido de fondo, frecuencia de muestreo de 16 kHz o superior)
* Mantén el audio de referencia entre 10 y 30 segundos
* Proporciona la transcripción del audio de referencia para mejorar la alineación
* Prueba a aumentar `--num_samples` para generar múltiples opciones y elegir la mejor

### Problema: La WebUI carga pero la generación se queda colgada

```bash
# Comprueba la utilización de la GPU durante la generación
docker exec fish-speech watch -n1 nvidia-smi

# Comprueba los registros en busca de errores
docker logs fish-speech --tail 50
```

***

## Enlaces

* **GitHub**: <https://github.com/fishaudio/fish-speech>
* **Docker Hub**: <https://hub.docker.com/r/fishaudio/fish-speech>
* **Documentación oficial**: <https://speech.fish.audio>
* **Modelos de Hugging Face**: <https://huggingface.co/fishaudio/fish-speech-1.4>
* **Marketplace de CLORE.AI**: <https://clore.ai/marketplace>
* **Comunidad de Discord**: <https://discord.gg/Es5qTB9BcN>

***

## Recomendaciones de GPU para Clore.ai

| Caso de uso                    | GPU recomendada | Costo estimado en Clore.ai                |
| ------------------------------ | --------------- | ----------------------------------------- |
| Desarrollo/Pruebas             | RTX 3090 (24GB) | $0.07–0.21/gpu/hr                         |
| TTS de producción              | RTX 4090 (24GB) | $0.14–0.42/gpu/hr                         |
| Inferencia de alto rendimiento | A100 80GB       | [bare metal](https://clore.ai/bare-metal) |

> 💡 Todos los ejemplos de esta guía pueden desplegarse en [Clore.ai](https://clore.ai/marketplace) servidores GPU. Explora las GPUs disponibles y alquila por hora: sin compromisos, acceso root completo.


---

# 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, and the optional `goal` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-es/audio-y-voz/fish-speech.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
