# Fish Speech

Fish Speech es un sistema de texto a voz (TTS) multilingüe 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 producción de audiolibros, doblaje, asistentes virtuales y creación de contenido a gran escala.

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

{% hint style="success" %}
Todos los ejemplos se pueden ejecutar en servidores GPU alquilados a través de [CLORE.AI Marketplace](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 de manera eficiente en GPUs de gama media (RTX 3080/3090). Para inferencia por lotes o servir a múltiples 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 [CLORE.AI Marketplace](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, configure lo siguiente:

**Imagen Docker:**

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

**Mapeo de puertos:**

```
22   → acceso SSH
7860 → Interfaz web 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 desplegado, abra su navegador y vaya a:

```
http://<your-clore-server-ip>: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@<your-clore-server-ip> -p <ssh-port>
```

### Paso 2: Extraer y ejecutar 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: Verificar el acceso a la GPU

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

Debería ver su GPU listada con VRAM disponible.

### Paso 4: Comprobar la descarga del modelo

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

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

Espere hasta que vea:

```
Se está ejecutando en la URL local:  http://0.0.0.0:7860
```

### Paso 5: Acceder a la WebUI

Navegue a `http://<server-ip>:7860` en su navegador.

### Paso 6: (Opcional) Habilitar 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 vía WebUI

1. Abra la WebUI en `http://<server-ip>:7860`
2. Introduzca texto en el **"Text"** campo:

   ```
   Bienvenido a Clore.ai, el mercado de nube con GPU para cargas de trabajo de IA.
   ```
3. Seleccione idioma: **Inglés**
4. Haz clic **"Generate"**
5. Descargue el `.wav` archivo

***

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

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

1. En la WebUI, navegue a la **"Voice Clone"** pestaña
2. Suba su archivo de audio de referencia (`.wav` o `.mp3`, 10–30 segundos)
3. Introduzca la transcripción del audio de referencia (opcional pero mejora la calidad)
4. Introduzca el texto objetivo a sintetizar
5. Haz clic **"Clone & Generate"**

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

***

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

```python
import requests
import base64

# Endpoint de la API de Fish Speech
API_URL = "http://<ip-de-su-servidor-clore>:8080/v1/tts"

payload = {
    "text": "Hola, esto es una prueba de Fish Speech ejecutándose en la infraestructura GPU de Clore.ai.",
    "reference_id": None,  # Usar voz por defecto
    "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://<ip-de-su-servidor-clore>:8080/v1/tts"

texts = {
    "en": "Clore.ai provides affordable GPU cloud computing for AI researchers.",
    "zh": "Clore.ai 为 AI 研究人员提供经济实惠的 GPU 云计算服务。",
    "ja": "Clore.aiはAI研究者向けの手頃なGPUクラウドコンピューティングを提供します。",
    "ko": "Clore.ai는 AI 연구자들을 위한 저렴한 GPU 클라우드 컴퓨팅을 제공합니다.",
    "fr": "Clore.ai fournit un calcul GPU cloud abordable pour les chercheurs en 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"Saved {filename}")
```

***

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

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

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

# Lote de textos para convertir
texts = [
    "Chapter one: The beginning of a new era in artificial intelligence.",
    "Chapter two: How GPU computing transformed machine learning.",
    "Chapter three: The rise of voice synthesis technologies.",
    "Chapter four: Building the future with Clore.ai infrastructure.",
    "Chapter five: Conclusion and next steps.",
]

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             | Por defecto | Descripción                                        |
| ------------------ | ----------- | -------------------------------------------------- |
| `--listen`         | `0.0.0.0`   | Interfaz para enlazar el servidor                  |
| `--port`           | `7860`      | Puerto para la WebUI de Gradio                     |
| `--compile`        | `false`     | Habilitar torch.compile para inferencia más rápida |
| `--device`         | `cuda`      | Dispositivo a usar (`cuda`, `cpu`, `mps`)          |
| `--half`           | `true`      | Usar precisión mitad 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. Habilitar torch.compile para una inferencia más rápida

```bash
# Añadir la bandera --compile al arrancar
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á 20–40 % más rápida.

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

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

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

### 3. Pre-cargar voces de referencia

Almacene voces de referencia usadas frecuentemente en el directorio de referencias del contenedor para evitar reprocesarlas:

```bash
# Copiar audio de referencia dentro del contenedor
docker cp my_voice.wav fish-speech:/workspace/references/my_voice.wav
```

### 4. Optimización de memoria GPU

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

# Limpiar 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 en lote, 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
# Verificar el driver NVIDIA dentro del contenedor
docker exec fish-speech nvidia-smi

# Si falla, compruebe el driver del host
nvidia-smi

# Re-ejecute con flags explícitos de GPU
docker run --gpus all --rm fishaudio/fish-speech:latest nvidia-smi
```

### Problema: Error por falta de memoria (OOM)

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

# Usar FP16 para reducir a la mitad el uso de VRAM
# Reiniciar el contenedor con la bandera --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: Puerto 7860 no accesible

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

# Comprobar el enlace del puerto
docker port fish-speech

# Verificar el firewall (en el servidor Clore)
# Asegurarse de que el puerto 7860 esté mapeado en la configuración de pedido de CLORE.AI
```

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

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

# Pre-descargar 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 de audio es pobre

* Asegúrese de que el audio de referencia esté limpio (sin ruido de fondo, frecuencia de muestreo ≥16 kHz)
* Mantenga el audio de referencia entre 10–30 segundos
* Proporcione la transcripción del audio de referencia para un mejor alineamiento
* Intente aumentar `--num_samples` para generar múltiples opciones y elegir la mejor

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

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

# Comprueba los logs por 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 en Hugging Face**: <https://huggingface.co/fishaudio/fish-speech-1.4>
* **CLORE.AI Marketplace**: <https://clore.ai/marketplace>
* **Comunidad en Discord**: <https://discord.gg/Es5qTB9BcN>

***

## Recomendaciones de GPU en Clore.ai

| Caso de uso                    | GPU recomendada | Coste estimado en Clore.ai |
| ------------------------------ | --------------- | -------------------------- |
| Desarrollo/Pruebas             | RTX 3090 (24GB) | \~$0.12/gpu/hr             |
| TTS de producción              | RTX 4090 (24GB) | \~$0.70/gpu/hr             |
| Inferencia de alto rendimiento | A100 80GB       | \~$1.20/gpu/hr             |

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


---

# 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/fish-speech.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.
