Retrato de Santiago Fernández

CubeLabs

IA · Fintech · Agentes · Automatización
🧠 IA

VoiceStudio: clona tu voz en local, sin nube

La alternativa open-source a ElevenLabs que corre en tu propia máquina — y le pone voz a tus agentes

⏱ 45 min 📊 Intermedio 📝 10 lecciones

VoiceStudio hace clonación de voz, diseño de voces nuevas, doblaje de vídeo, dictado y audiolibros en 646 idiomas sin mandar ni un byte de audio a la nube. En este curso instalas la app, clonas tu primera voz, doblas un vídeo, y la conectas a tus agentes por API OpenAI-compatible y por MCP. Todo local, todo tuyo.

VoiceStudio: clonación de voz, diseño de voz, doblaje de vídeo y transcripción local
VoiceStudio · repositorio oficial (github.com/debpalash/VoiceStudio)

Contenido

  1. Qué es VoiceStudio y por qué importa
  2. Hardware, requisitos e instalación
  3. Primer arranque: modelos, catálogo y GPU
  4. Clonación de voz: tu voz en 30 segundos
  5. Diseño de voz: crear voces que no existen
  6. Doblaje de vídeo paso a paso
  7. Dictado, transcripción, diarización y audiolibros
  8. El backend como plataforma: API OpenAI-compatible
  9. MCP: dale voz a tus agentes de IA
  10. Rendimiento, VRAM y solución de problemas

1. Qué es VoiceStudio y por qué importa

VoiceStudio es una aplicación de escritorio open-source (AGPL-3.0) que reúne en una sola interfaz todo el flujo de audio con IA: clonar una voz a partir de unos segundos de grabación, inventar una voz nueva describiéndola con palabras, doblar un vídeo a otro idioma, dictar en cualquier campo de texto y generar audiolibros. Su eslogan de posicionamiento es «la alternativa local a ElevenLabs»: mismo tipo de funciones, pero ejecutándose en tu hardware.

Lo interesante para quien trabaja con agentes es que VoiceStudio no es solo una app con ventana. El proceso Python que la acompaña es también un servidor de voz local que expone una API compatible con OpenAI en el puerto 3900 y un servidor MCP montado en /mcp/. Es decir: es el proveedor de voz, tú pones el agente.

CapacidadQué resuelve
Voice CloningReplica una voz desde un clip de referencia
Voice DesignCrea una voz desde una descripción en lenguaje natural
Video DubbingTranscribe → traduce → sintetiza con la voz elegida
Dictation WidgetDictado en cualquier app con un atajo global
Vocal IsolationSepara la voz de la música y el ruido
Speaker DiarizationDetecta quién habla en cada tramo
Batch QueueCola de trabajos para audiolibros y lotes largos
MCP ServerHerramientas de voz para agentes (Claude Code, Codex…)
💡 Tip

Si vienes del curso Speech-to-Speech, este es el complemento natural: allí montas el diálogo (VAD-STT-LLM-TTS) y aquí el estudio de voz (clonación, doblaje, diseño, dictado) que alimenta a ese pipeline.

2. Hardware, requisitos e instalación

Antes de instalar conviene saber qué aceleración vas a tener, porque marca la diferencia entre «genero un párrafo en segundos» y «lo genero en un minuto».

HardwareSoporte
GPU NVIDIA (Windows / Linux)Aceleración CUDA
Apple SiliconAceleración Metal (MPS)
Sin GPU dedicada (Intel/AMD integrada)Usable en CPU, más lento (~5 GB de disco para el build CPU de PyTorch)
Windows on ARM (Snapdragon X…)Experimental: app ARM64 + backend x64 emulado, solo CPU
Intel MacSolo interfaz; hay que conectarse a un backend remoto
1

Instala la app con un comando

En macOS y Linux el instalador oficial verifica la descarga por SHA-256 y conserva tus ajustes, proyectos y modelos.

# macOS / Linux — última release
curl -fsSL https://voicestudio.sh/install | sh

# Windows (PowerShell)
irm https://voicestudio.sh/install | iex
2

O baja el paquete a mano

Desde Releases: .dmg para macOS, .exe para Windows, .AppImage o .deb para Linux. El AppImage usa el runtime estático, así que no necesita libfuse2.

# Linux, AppImage
chmod +x VoiceStudio-Electron-*-linux-x64.AppImage
./VoiceStudio-Electron-*-linux-x64.AppImage

# Linux, paquete .deb
sudo apt install ./VoiceStudio-Electron-<version>-linux-x64.deb
3

Si vas a compilar desde el código

La instalación desde fuente pide Bun y uv; Electron es la única app de escritorio (las versiones Tauri están retiradas).

git clone https://github.com/debpalash/VoiceStudio.git
cd VoiceStudio
bun install
bun run setup:api   # prepara las dependencias de Python
bun run dev
4

Deja que un agente lo instale por ti

Si usas Claude Code, Codex o similar, puedes pegarle el prompt de instalación y que él detecte hardware, reutilice datos existentes y haga una generación de prueba. El repo publica además skills con npx skills add debpalash/VoiceStudio.

⚠️ Error común

En Linux, el paquete .deb puede entrar en conflicto con ffprobe. Si tras instalar dejan de funcionar herramientas de vídeo: sudo apt install --reinstall ffmpeg.

3. Primer arranque: modelos, catálogo y GPU

VoiceStudio no trae los pesos: los descarga de Hugging Face en el primer uso. El motor por defecto es OmniVoice, que ocupa unos 2,3 GB. Las descargas van con un descargador segmentado (multi-conexión) y con verificación por checksum, así que el proceso es seguro incluso si se corta a medias.

Qué motor elegir

El Model Catalogue lista todos los motores, con un panel «Why?» que explica por qué uno aparece como no disponible. Se cambia con Ctrl/Cmd+E o fijando variables de entorno.

Motor TTSCorre enClonación
VoiceStudio (OmniVoice) — por defectoCUDA · MPS · CPU✅
IndexTTS 2.5CUDA · CPU✅ + emoción
VoxCPM2CUDA · MPS · CPU✅ + diseño de voz
CosyVoice 3CUDA · CPU✅
MOSS-TTS-v1.5 (8B)CUDA · CPU✅
dots.tts (2B)CUDA · CPU✅
KittenTTS / Supertonic-3CPU— (voces preajustadas)
MLX-AudioApple SiliconSegún modelo

Para transcripción, el motor por defecto es WhisperX (marcas de tiempo por palabra + diarización, ideal para doblaje). Le acompañan Faster-Whisper, PyTorch Whisper, Parakeet TDT (25 idiomas), Moonshine (CPU ligero), FunASR/SenseVoice (50+ idiomas con diarización inline) y sherpa-onnx para dictado en streaming.

Comprueba que la GPU está trabajando

La app muestra un indicador de «GPU active» con el dispositivo detectado (cuda / mps / cpu) y el consumo de RAM/VRAM. Si aparece «cpu (no GPU acceleration detected)», todo funciona, pero varias veces más lento. Puedes forzar el dispositivo:

# Fijar dispositivo de cómputo (auto por defecto)
OMNIVOICE_DEVICE=cuda   # cuda | rocm | xpu | mps | cpu

# En hosts multi-GPU NVIDIA, exponer solo una tarjeta
CUDA_VISIBLE_DEVICES=0
💡 Tip

En CUDA puedes activar FlashInfer (OMNIVOICE_FLASHINFER=1) para acelerar la decodificación ~2×. Requiere instalar flashinfer-python y reserva VRAM extra (aproximadamente la mitad del tamaño de los pesos del LLM): en tarjetas justas de VRAM, déjalo apagado.

4. Clonación de voz: tu voz en 30 segundos

La clonación en VoiceStudio es zero-shot: no hay entrenamiento ni fine-tuning. Le das un clip de referencia y el motor lo imita al generar.

Reglas del clip de referencia

El flujo en la interfaz es: Voice cloning → elegir o añadir una referencia → escribir el guion → Generate. Si falta el modelo, la app lo propone e instala en ese momento.

Calidad de audio y export

Bajo el guion hay un control de calidad que afecta a la siguiente toma (los archivos ya generados no se tocan):

Precisión WAVUsoTamaño aprox./min (24 kHz mono)
Standard (16-bit PCM)Reproducción normal, máxima compatibilidad2,9 MB
For editing (24-bit PCM)Más margen para editar4,3 MB
Original (32-bit float)Máxima precisión de exportación5,8 MB
⚠️ Error común

Subir los sampling steps (8-64) no mejora automáticamente la voz ni el tamaño del WAV: solo cuesta más tiempo. La precisión de exportación tampoco inventa información que el modelo ya descartó.

Uso responsable

La app es AGPL-3.0, pero los pesos, tokenizadores y voces tienen licencias aparte y una licencia de pago de la app no las concede. Clona voces solo con permiso explícito de su dueño.

5. Diseño de voz: crear voces que no existen

El diseño de voz resuelve el problema contrario: no tienes ninguna grabación, pero sabes cómo quieres que suene. Describes la voz («mujer, 40 años, tono cálido, acento neutro, ritmo pausado») y el motor la construye.

En la interfaz eliges un preset o ajustas los rasgos: género, edad, tono, estilo y acento. Con MCP hay una herramienta que separa la descripción de la creación:

Herramienta MCPQué hace
describe_voiceTraduce tu descripción libre a atributos concretos y te dice qué palabras no supo mapear. No guarda nada.
design_voiceCrea un perfil de voz de diseño con identidad estable (semilla fija) y devuelve un profile_id.
💡 Tip

La clave del diseño de voz es la semilla: mientras ajustas rasgos la semilla se mantiene fija y la identidad no cambia. New seed genera otra identidad distinta. Guarda el perfil cuando des con la voz que buscabas.

Una vez guardada, esa voz se comporta igual que una clonada: aparece en list_voices y se puede invocar por nombre o por profile_id desde la API.

6. Doblaje de vídeo paso a paso

El doblaje es un pipeline de tres etapas: transcribir → traducir → hablar. La parte de traducción es enchufable y ahí está la gracia: puedes doblar sin conexión.

Motor de traducciónCategoría¿Necesita paquete?¿Clave?
Argos (Local, Fast)Offlineargostranslate (incluido)No
NLLB-200 (Local, Heavy)OfflineNinguno (usa transformers)No
Google Translate (Free)Onlinedeep_translatorNo
DeepL / MicrosoftOnlinedeep_translatorSí
LLM (OpenAI-compatible)LLMopenaiNormalmente sí

El flujo completo

  1. Abre Dub desde la barra lateral de clonación o el buscador de comandos.
  2. Sube o arrastra el audio/vídeo (o pega una URL). La preparación termina antes de empezar a transcribir.
  3. Elige idioma destino y motor de traducción, y lanza Translate.
  4. Revisa el texto traducido segmento a segmento: puedes editar y ajustar voz y tiempos por tramo.
  5. Genera. Las pistas terminadas se previsualizan y se exportan con el diálogo nativo de guardado.

Si ya tienes la traducción hecha

Paste Translation acepta el texto traducido de donde sea (ChatGPT, DeepL, un traductor humano) y lo mapea a tus segmentos sin re-transcribir y sin perder los tiempos. Detecta tres formatos: subtítulos con marcas de tiempo (.srt/.vtt), líneas numeradas (1. …) y líneas planas.

Exportación

El vídeo exportado puede llevar varias pistas de audio (original + uno o varios doblajes) y VoiceStudio marca el doblaje elegido como pista por defecto, de modo que se reproduce solo en cualquier reproductor. También puedes quemar subtítulos en la imagen (hardsub) en dos estilos: línea estática o karaoke con resaltado por palabra usando los tiempos registrados al transcribir. El script .ass del karaoke se puede descargar aparte desde GET /dub/ass/{job_id}.

⚠️ Error común

El karaoke no está disponible junto con el estilo dual (traducción + original): al activar dual, el quemado vuelve al estilo de línea.

7. Dictado, transcripción, diarización y audiolibros

La transcripción es la otra mitad del producto y usa el mismo backend. Estas son sus caras:

Para el dictado en streaming, sherpa-onnx es el motor ligero de CPU que emite final_kind: "utterance" antes del resumen autoritativo de la sesión. El cliente Python sin dependencias es cómodo para hooks y TUIs:

# Descubrir capacidades del backend
python -m backend.speech_client capabilities

# Transcribir un archivo
python -m backend.speech_client transcribe recording.wav
💡 Tip

El cliente usa VOICESTUDIO_URL si existe; si no, cae al backend en localhost con el puerto de OMNIVOICE_PORT (3900 por defecto) y manda OMNIVOICE_API_KEY como bearer si está definida.

8. El backend como plataforma: API OpenAI-compatible

Aquí es donde VoiceStudio deja de ser «una app» y se convierte en infraestructura. La raíz del servicio es http://localhost:3900 y la base URL compatible con OpenAI es http://localhost:3900/v1. Cualquier cliente que hable con los endpoints de audio de OpenAI puede apuntar aquí y usar tu voz clonada, sin salir de tu máquina.

Ruta OpenAISoporte en VoiceStudio
POST /v1/audio/speechTTS. model = motor instalado o alias OpenAI (tts-1, gpt-4o-mini-tts…); voice = id o nombre de perfil clonado, preset del motor o nombre de voz OpenAI; soporta speed y streaming audio/sse
POST /v1/audio/transcriptionsSTT con el motor activo. Formatos json, text, verbose_json, srt, vtt (stream=true no: usa el WebSocket)
POST /v1/audio/translationsAudio → texto en inglés. Requiere familia Whisper con checkpoint multilingüe (large-v3)
WS /v1/audio/transcriptions/streamParciales y finales en vivo (PCM o WebM/Opus)
GET /v1/models, GET /v1/audio/voicesMotores instalados y tus perfiles de voz
GET /.well-known/voicestudio-speechDescubrimiento de capacidades con URLs relativas (funciona detrás de proxy)

Tu primera petición de voz

curl http://127.0.0.1:3900/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{
    "model": "tts-1",
    "input": "Hola, esto lo dice mi propia voz clonada.",
    "voice": "mi-voz",
    "response_format": "mp3"
  }' --output saludo.mp3

Formatos de respuesta: mp3 (por defecto), opus (Opus en Ogg a 48 kHz), aac, flac/wav sin pérdida y pcm crudo a 24 kHz. Los comprimidos los codifica ffmpeg, que va incluido con la app.

⚠️ Error común

Si dos perfiles de voz comparten nombre, pedir la voz por nombre devuelve 409 ambiguous_voice con la lista de ids. Renombra uno o llama siempre por voice_id.

Sobre seguridad y privacidad: ningún protocolo añade llamada de red, cuenta, analítica ni proveedor cloud obligatorio; los micrófonos se quedan en el borde de la interfaz, y una GPU remota nunca asume que posee tu dispositivo de entrada. Fuera de una LAN de confianza, usa HTTPS/WSS y nunca mandes credenciales bearer en HTTP plano.

9. MCP: dale voz a tus agentes de IA

VoiceStudio trae un servidor MCP montado en el propio backend, en http://localhost:3900/mcp/. No hay nada extra que arrancar: si la app está abierta, el servidor está ahí. Con él, un agente no solo escribe: habla con tu voz.

Herramienta MCPQué hace
generate_speechTexto → WAV (o opus/ogg). Usa la voz asociada al agente salvo que pases profile_id
clone_voiceAudio de referencia → nuevo perfil de voz. Devuelve un profile_id
design_voiceDescripción → perfil de voz de diseño con identidad estable
transcribeAudio → texto (646 idiomas)
list_voices / list_languages / list_personalitiesEnumerar lo disponible
check_healthEstado del backend y GPU activa

Además expone recursos como voice://{profile_id} y history://recent (máximo 20 elementos), todos en texto JSON: parsea la respuesta con un parser JSON.

Conectarlo a Hermes Agent

Hermes conecta sin configuración extra en VoiceStudio: se añade el servidor al config.yaml y se reinicia.

mcp_servers:
  voicestudio:
    url: "http://127.0.0.1:3900/mcp/"
    headers:
      X-OmniVoice-Client-Id: "hermes"

Conectarlo a Codex CLI

[mcp_servers.voicestudio]
url = "http://127.0.0.1:3900/mcp/"
http_headers = { "X-OmniVoice-Client-Id" = "codex-cli" }

Para Claude Code y Cursor, la app exporta configuraciones ya hechas desde la sección Integrations. La cabecera X-OmniVoice-Client-Id sirve para vincular cada agente a una voz concreta: tu agente de código puede hablar con una voz y tu asistente personal con otra.

No inundes el contexto del agente con audio

Un WAV en base64 ocupa muchísimo contexto. Dos variables lo resuelven:

VariableValoresEfecto
OMNIVOICE_MCP_OUTPUT_MODEresources (def.) · files · bothfiles devuelve audio_url y output_path en disco en vez del base64
OMNIVOICE_MCP_BASE_PATHUn directorioFrontera de seguridad: solo se leen/escriben rutas dentro de él
OMNIVOICE_MCP_TIMEOUT_SSegundosEspera fija por herramienta, en vez de heredar los presupuestos del backend
💡 Tip

OMNIVOICE_MCP_OUTPUT_MODE=files es la combinación recomendada para agentes: el audio va al disco, el agente recibe solo una ruta y el contexto se mantiene limpio. Si el backend y el agente corren en contenedores distintos, monta el mismo directorio en la misma ruta en ambos.

⚠️ Error común

La primera llamada a generate_speech en una máquina sin el modelo descargado descarga OmniVoice (~2,3 GB) dentro del presupuesto de timeout. Instala el modelo antes o sube OMNIVOICE_GENERATE_TIMEOUT_S, o el agente recibirá un timeout en su primer uso.

10. Rendimiento, VRAM y solución de problemas

Los cuatro enemigos del rendimiento

  1. Arranques en frío en cada generación. Los pesos se cargan de forma perezosa (~8 s) y CUDA compila kernels la primera vez.
  2. Presión de memoria. En una máquina de 16 GB unificados, un navegador con muchas pestañas basta para degradar todo.
  3. Generar en CPU sin saberlo. Un driver actualizado, un desajuste CUDA/torch o hardware sin ruta GPU te tiran a CPU en silencio.
  4. Modelo «varado» en CPU. Si cancelas una transcripción a medias, el modelo TTS puede quedarse en CPU y todas las generaciones siguientes van 10-50× más lentas hasta reiniciar el backend.

Palancas útiles

VariablePor defectoPara qué
OMNIVOICE_DEVICEautoFijar cuda/mps/cpu si la autodetección falla
OMNIVOICE_GPU_WORKERSautoGeneraciones concurrentes: 1 por cada 5 GB libres, máximo 4. No subirlo en tarjetas ≤10 GB ni en Apple Silicon
OMNIVOICE_SINGLE_ENGINE_RESIDENT1Poner 0 en máquinas de 32 GB+ para tener varios motores calientes al cambiar
OMNIVOICE_GENERATE_TIMEOUT_S300Presupuesto de cómputo en host acelerado (+1 s por cada 40 caracteres a partir de 1200)
OMNIVOICE_CPU_GENERATE_TIMEOUT_S600Presupuesto en hosts que sintetizan en CPU
OMNIVOICE_ASR_VRAM_PREFLIGHT1Degradar precisión de transcripción en vez de reventar por VRAM. Déjalo activado

Diagnóstico rápido

💡 Tip

El repo documenta el caso de un host con una GPU CUDA o ROCm por debajo del mínimo de VRAM declarado por el motor: acaba paginando a RAM y rinde peor que la propia CPU. Si tu tarjeta va justa, elige un motor más ligero en lugar de forzar el grande.

Preguntas frecuentes

¿Qué hardware necesito para usar VoiceStudio en local?

Funciona con GPU NVIDIA (CUDA) en Windows y Linux, con Apple Silicon (Metal/MPS) y también sin GPU dedicada: en ese caso corre en CPU, más lento, y necesita unos 5 GB de disco para el build CPU de PyTorch. Los Mac con Intel solo ejecutan la interfaz y requieren conectarse a un backend remoto.

¿VoiceStudio es gratis? ¿Puedo usarlo comercialmente?

La aplicación es open-source bajo licencia AGPL-3.0, que permite uso comercial con sus condiciones. Ojo: los pesos de los modelos, los tokenizadores y las voces tienen licencias independientes, y una licencia de la app no te concede esos derechos. Cada motor puede tener requisitos propios.

¿Cuánto audio necesito para clonar una voz?

La app acepta clips de hasta 75 segundos, pero recomienda entre 5 y 15 segundos de voz limpia, sin música ni reverberación. El motor por defecto (OmniVoice) aprovecha hasta 20 segundos: selecciona el tramo con más habla y lo transcribe automáticamente.

¿Puedo doblar un vídeo a otro idioma sin conexión a internet?

Sí. El doblaje se divide en transcribir, traducir y hablar, y la traducción es enchufable: Argos y NLLB-200 son motores locales que funcionan sin conexión (Argos viene incluido). También puedes traducir el texto donde quieras y pegarlo con «Paste Translation», sin re-transcribir ni perder los tiempos.

¿Cómo conecto VoiceStudio con mis agentes de IA?

De dos formas. Por la API compatible con OpenAI en http://localhost:3900/v1 (endpoints de speech, transcriptions y translations), o por el servidor MCP montado en http://localhost:3900/mcp/, que expone herramientas como generate_speech, clone_voice y transcribe. Agentes como Claude Code, Codex CLI o Hermes Agent se conectan indicando la URL del servidor MCP.

¿El audio sale de mi máquina en algún momento?

No para los flujos locales: los modelos se descargan una vez de Hugging Face y luego todo el procesamiento ocurre en tu hardware. Los servicios remotos son opcionales y la analítica de uso requiere consentimiento. Los micrófonos siempre se capturan en el borde de la interfaz.