Skip to main content
Glama

VoiceCard

Clona tu voz y conviértela en un vídeo de forma de onda compartible, todo impulsado por MCP. Sin GUI. Solo Apple Silicon.

La clonación de voz ya es algo común. El factor diferencial es la entrega: un MP4 corto con una hermosa forma de onda reactiva al audio se reproduce en línea en WhatsApp, iMessage, Signal y Slack, donde los archivos de audio sin procesar se atascan, no se reproducen automáticamente o no cruzan entre iOS/Android. Cada clip que envías es también un anuncio de la herramienta. Esa es toda la idea.

La interfaz es el MCP. Hablas con él desde Claude Code, Cursor o cualquier agente compatible con MCP:

"Clona mi voz desde ~/Desktop/me.mov (aquí tienes la transcripción) y luego haz un clip de 15 segundos con la paleta Miami que diga feliz cumpleaños, con mi foto en el centro."

Cómo funciona

Totalmente autónomo. El habla se genera localmente con mlx-audio (Qwen3-TTS mediante MLX), el vídeo de forma de onda se renderiza con MLX / Pillow y se multiplexa con ffmpeg. Sin nube, sin Voicebox, sin aplicación de escritorio.

La clonación es aprendizaje en contexto zero-shot: recorta tu referencia a ~12 segundos y condiciona con ella. No hay paso de entrenamiento ni un modelo separado por voz.

Related MCP server: Rheo MCP Server

Requisitos

  • Mac con Apple Silicon (arm64). Se aplica al inicio.

  • No hay que instalar nada más a mano. ffmpeg se incluye integrado (binario estático mediante imageio-ffmpeg); se usa automáticamente un ffmpeg del sistema en el PATH si existe.

La primera ejecución es la lenta

La instalación en sí es rápida, pero no descarga los modelos de IA. En la primera clone_voice / make_clip, VoiceCard descarga de forma diferida a la caché compartida de Hugging Face (~/.cache/huggingface/hub/):

  • Qwen3-TTS pesos (~unos pocos GB) — síntesis de voz.

  • Whisper (large-v3-turbo, ~1.5 GB) — se usa para transcribir automáticamente las referencias y sincronizar los subtítulos.

Ambos quedan en caché, así que solo ocurre una vez. Reserva unos minutos, algo de ancho de banda y ~varios GB de disco para esa primera llamada.

No se requiere cuenta ni token de Hugging Face — ambos modelos son públicos y se descargan de forma anónima. Hugging Face solo se usa como servidor de descargas. Eso sí, las descargas anónimas tienen límite de velocidad; si la primera descarga es lenta o está limitada, configura un token gratuito para descargas más rápidas / con mayor límite de velocidad (totalmente opcional):

export HF_TOKEN=hf_xxx      # optional — only speeds up / de-throttles the first download

Instalación

Necesita uv (brew install uv, o el instalador de una sola línea de esa página). Nada más — ffmpeg viene integrado, los modelos se descargan solos.

En una sola línea, directamente desde GitHub:

uv tool install git+https://github.com/JasonMakes801/voicecard-mcp

Luego regístralo con Claude Code (el comando voicecard ya está en tu PATH):

claude mcp add -s user voicecard -- voicecard

Eso es todo. Pide a tu agente que haga clone_voice y make_clip.

git clone https://github.com/JasonMakes801/voicecard-mcp
cd voicecard-mcp
uv tool install .                      # or: uv run voicecard

# register the in-place checkout
claude mcp add -s user voicecard -- uv --directory "$PWD" run voicecard

Herramientas

Herramienta

Qué hace

list_voices()

Lista las voces guardadas, cada una con su ref_text, ref_audio y el avatar asociado (o null).

palettes()

Enumera las paletas disponibles (nombre + colores) y genera un muestrario visual (devuelve {palettes, swatch}); muestra el muestrario para que el usuario elija de un vistazo.

clone_voice(name, source, transcript?, photo?)

Clona desde un archivo de audio o vídeo. Recorta la referencia a ~12s y guarda un perfil. transcript es opcional: si lo omites, VoiceCard transcribe automáticamente la referencia (Whisper). photo es un avatar complementario opcional que se copia en el perfil para que voz y cara viajen juntos.

speak(text, voice)

Genera habla con una voz clonada; devuelve una ruta wav.

make_clip(text, voice, palette?, photo?, label?, aspect?, layout?, arc?, captions?)

Genera la voz y renderiza el mp4 de forma de onda para compartir. Los subtítulos (burbujas emergentes sincronizadas con la locución) están activados por defecto; el avatar recurre a la photo almacenada de la voz. Devuelve la ruta del mp4.

Paletas: Noir (predeterminada), 70s Gold, Miami, Aurora, Sunset, Mint, Blueprint Proporción: square (1080², predeterminada), portrait (9:16) Diseño: linear (predeterminado — foto circular + forma de onda de gradiente compacta debajo, estilo Dynamic Island) · circle (anillo de espectro reactivo al audio centrado) Arc (solo diseño circle): full (predeterminado, anillo reflejado) · top (picos en la mitad superior)

Configuración (env)

Variable

Predeterminado

VOICECARD_OUT

~/VoiceCard (perfiles + clips renderizados)

VOICECARD_MODEL

mlx-community/Qwen3-TTS-12Hz-1.7B-Base-bf16

VOICECARD_WHISPER

mlx-community/whisper-large-v3-turbo

VOICECARD_FFMPEG

anula el binario de ffmpeg (si no, PATH del sistema; si no, el incluido)

VOICECARD_URL

destino del QR impreso en cada clip

VOICECARD_TAGLINE

eslogan impreso en cada clip

Pruebas

uv pip install -e ".[test]"

pytest tests/test_fast.py tests/test_mcp.py -q      # fast: no model, no network (~1s)
VOICECARD_RUN_MODEL_TESTS=1 pytest tests/test_integration.py -q   # real Qwen+Whisper (downloads GBs)
bash scripts/virgin_install_test.sh                 # fresh-venv install + smoke, from scratch
  • Rápidas (test_fast.py, test_mcp.py): integridad de las paletas, alineación de los subtítulos (palabras de entrada, tiempos de STT), validación de argumentos y la superficie del protocolo MCP.

  • Integración (test_integration.py, condicionadas): clone → speak → make_clip de principio a fin, comprobando que el mp4 tiene audio+vídeo y duración no nula.

  • Instalación limpia (scripts/virgin_install_test.sh): instala en un venv desechable y verifica las importaciones, el respaldo de ffmpeg incluido (sin brew), el script de consola y las suites sin modelos contra el paquete instalado.

Notas

  • La salida es estéreo, +faststart, perfil H.264 High, ajustada para una reproducción automática integrada en las aplicaciones de mensajería.

  • La forma de onda está estilizada para que siempre parezca viva, no un analizador de espectro de diagnóstico.

  • La descarga de Core ML / ANE del decodificador autorregresivo no está planificada (las formas dinámicas + la caché KV + la decodificación secuencial encajan mal con ANE). Una futura descarga del vocoder a Core ML es lo único que merece la pena explorar.

Hoja de ruta

  • Subtítulos sin Whisper (aprovechar la alineación propia de Qwen). Qwen3-TTS funciona a 12 Hz y ya conoce la sincronización de las palabras internamente gracias a su atención cruzada (una cresta monótona de token de texto → marco de audio). Hoy recuperamos la sincronización ejecutando Whisper sobre la salida: robusto, pero todo un segundo modelo. En su lugar, parchea la decodificación de mlx-audio para exponer la atención cruzada de la región objetivo (recorta la referencia ICL por delante), extrae una alineación monótona y mapea tokens de texto → palabras. Esto sacaría a Whisper de la ruta crítica por clip: combinado con pasar transcript en el momento de la clonación, Whisper nunca se ejecutaría (ni se descargaría) para un usuario normal. Riesgo: la decodificación interna de mlx-audio no es una API estable, así que fija la versión y añade una prueba de deriva (sincronizaciones derivadas de Qwen frente a Whisper en un fixture; falla si divergen). Nota: no hay fonemas que alinear — solo tokens de texto BPE → marcos de audio.

Licencia

MIT. Eres responsable de clonar únicamente voces que poseas o que estés autorizado a usar.

Related MCP Connectors

Related MCP Servers