UtteraUttera

Cómo montar tu propio servidor de voz, paso a paso

15 de septiembre de 2026

Necesitas una máquina con Linux instalado, preferentemente alguna versión de Ubuntu, y acceso con privilegio de root. Necesitas también una tarjeta gráfica NVIDIA con su controlador funcionando: esto no va en CPU a una velocidad que sirva para nada.

Y no necesitas una cuenta con nosotros. Los motores que mueven Uttera están publicados con licencia Apache 2.0 y se pueden levantar sin pedirle permiso a nadie. Esta entrada es el camino completo.

Antes de empezar: qué vas a acabar teniendo

Dos servicios HTTP corriendo en tu máquina:

Los dos hablan la API de OpenAI, así que el SDK oficial de openai funciona contra ellos cambiando la URL base. Tus audios no salen de tu red.

Paso 0: elegir motor, que es la decisión que importa

Hay dos familias, y elegir mal es la forma más rápida de perder una tarde. La diferencia no es de calidad: es de cómo usan la memoria de la GPU.

Tu GPU Qué instalar
8 – 24 GB de VRAM hot/colduttera-stt-hotcold y uttera-tts-hotcold
32 GB o más vLLMuttera-stt-vllm y uttera-tts-vllm

Hot/cold carga y descarga el modelo según hace falta, así que puedes compartir la GPU con otras cosas. Es lo que quieres en un equipo personal o en un laboratorio doméstico.

vLLM reserva la memoria al arrancar —unos 22 a 29 GB— y a cambio hace continuous batching: muchas peticiones simultáneas a la vez, con mucho mejor aprovechamiento. Es lo que quieres si vas a transcribir horas de audio al día.

Entre 16 y 24 GB, vLLM funciona, pero se queda la tarjeta entera y pierdes justo la flexibilidad que hace útil a hot/cold en ese rango. Si dudas, empieza por hot/cold: se cambia después.

Si prefieres números antes que consejos, están publicados y son reproducibles en uttera-benchmarks, con cuatro perfiles de carga y dos corpus.

Paso 1: el sistema

sudo apt update
sudo apt install -y git python3 python3-venv ffmpeg curl file espeak-ng

ffmpeg no es opcional: es lo que convierte a mp3, opus y flac. espeak-ng lo usa la síntesis para convertir el texto en fonemas.

Para la GPU, el controlador de NVIDIA por la vía normal de Ubuntu (ubuntu-drivers suele bastar). Compruébalo antes de seguir:

nvidia-smi

Si eso no te muestra la tarjeta, para aquí y arréglalo. Todo lo demás depende de ello.

Y añade tu usuario a los grupos que dan acceso al dispositivo:

sudo usermod -aG video $USER
sudo usermod -aG render $USER

Cierra la sesión y vuelve a entrar, o los grupos no se aplican. Es el fallo número uno.

Paso 2: transcripción

El repositorio es uttera-stt-hotcold — Whisper con la arquitectura de trabajador hot/cold. Ahí está el README completo, la tabla de modelos y las variables de entorno.

git clone https://github.com/uttera/uttera-stt-hotcold.git
cd uttera-stt-hotcold
chmod +x setup.sh
./setup.sh

setup.sh crea el entorno virtual, instala las dependencias y se descarga el modelo. Es seguro volver a ejecutarlo si algo falla a mitad.

La elección de modelo es tuya y es un compromiso entre memoria y calidad:

Modelo VRAM Notas
small ~2 GB Equilibrado, para máquinas pequeñas
medium ~5 GB Por defecto
turbo ~6 GB El recomendado. Destilado de large-v3: casi su calidad a mucha más velocidad
large-v3 ~10 GB Máxima precisión

Se elige con WHISPER_MODEL en el fichero .env. Los 99 idiomas están en todos menos en las variantes .en.

Arrancarlo a mano, para ver que vive:

source venv/bin/activate
uvicorn main_stt:app --host 127.0.0.1 --port 9005

Paso 3: síntesis

El repositorio es uttera-tts-hotcold — servidor de síntesis con backends intercambiables (Coqui XTTS-v2, VoxCPM2 y más) mediante una sola variable de entorno, TTS_BACKEND.

git clone https://github.com/uttera/uttera-tts-hotcold.git
cd uttera-tts-hotcold
chmod +x setup.sh
./setup.sh

Aquí hay una decisión más: el motor de voz se cambia con una variable, TTS_BACKEND.

Una advertencia que está en el propio repositorio y conviene leer antes de perder el rato: el backend voxcpm en hot/cold no es para producción. Su ruta de torch.compile no se lleva con el pool de subprocesos y provoca una carrera del asignador de CUDA bajo carga concurrente — está confirmado por los mantenedores de VoxCPM. Para ese motor en serio, el repositorio bueno es uttera-tts-vllm. En hot/cold se queda para desarrollo y pruebas, y avisa al cargar.

Sobre las voces: setup_assets.sh te deja las seis voces estándar. Las voces de referencia para clonado no vienen incluidas, por derechos: pones tus propios .wav en assets/voices/elite/ y los registras en voices.json. No hay que tocar código.

Paso 4: comprobar que funciona

Transcribir:

curl -X POST http://localhost:9005/v1/audio/transcriptions \
  -F "file=@muestra.wav" \
  -F "language=es"

Sintetizar:

curl -X POST http://localhost:9004/v1/audio/speech \
  -H 'Content-Type: application/json' \
  -d '{"input":"Hola mundo","voice":"alloy"}' \
  -o hola.mp3

Si las dos responden, ya tienes el servidor. El resto es que arranque solo.

Paso 5: que arranque solo

Un servicio de usuario de systemd basta, y no necesita root:

# ~/.config/systemd/user/uttera-stt.service
[Unit]
Description=Uttera STT Hot/Cold Server
After=network.target

[Service]
Type=simple
WorkingDirectory=%h/uttera-stt-hotcold
ExecStart=%h/uttera-stt-hotcold/venv/bin/uvicorn main_stt:app --host 127.0.0.1 --port 9005
Restart=always
RestartSec=5

[Install]
WantedBy=default.target
systemctl --user daemon-reload
systemctl --user enable --now uttera-stt.service

El de síntesis es el mismo cambiando el directorio, main_tts:app y el puerto.

Si tienes GPU grande: la vía vLLM

Son otros dos repositorios, uttera-tts-vllm y uttera-stt-vllm, construidos sobre vLLM para sacarle partido a una tarjeta dedicada. Cambia el repositorio y poco más:

git clone https://github.com/uttera/uttera-tts-vllm.git
cd uttera-tts-vllm
cp .env.example .env
./setup.sh
source venv/bin/activate
uvicorn main_tts:app --host 0.0.0.0 --port 9004

Con uttera-stt-vllm igual, con main_stt:app y el 9005. Aquí setup.sh además predescarga el modelo y las voces.

Lo que no vas a encontrar en GitHub, y conviene decirlo

Lo publicado son los motores: lo que convierte audio en texto y texto en audio. Eso es el trabajo de verdad y es lo que corre en tu máquina.

Lo que no está publicado es la capa de servicio que hay encima en uttera.ai: claves de API, control de créditos, reparto entre varios equipos, facturación. Eso es nuestro producto, y montarlo por tu cuenta tiene sentido si lo que quieres es vender voz a terceros — pero si lo que quieres es que tus audios no salgan de tu red, no te hace falta nada de eso.

Dicho de otra forma: si esta guía te resuelve el problema, nos parece perfecto que no nos pagues. Y si un día prefieres no mantener GPUs, ahí estamos.

Por dónde seguir

Y si te atascas, escríbenos igual: support@uttera.ai. Que no seas cliente no significa que no queramos saber dónde falla la guía.

¿Algo que añadir o que corregir? Escríbenos a support@uttera.ai. Si nos corriges, editamos la entrada y te damos crédito.

← Todas las entradas