- Framework de reconocimiento de voz en tiempo real que realiza todo el procesamiento en el dispositivo
- Mediante una arquitectura de modelo basada en streaming, genera texto en tiempo real incluso mientras el usuario habla, y logra una tasa de error más baja que Whisper Large v3 (WER 6.65%)
- Funciona con la misma API en múltiples plataformas como Python, iOS, Android, MacOS, Linux, Windows y Raspberry Pi, y está optimizado sobre un núcleo en C++ y OnnxRuntime
- Incluye modelos por idioma (inglés, coreano, japonés, español, etc.) y funciones de reconocimiento de comandos (Intent Recognition), lo que permite a los desarrolladores crear interfaces de voz fácilmente
- Mejora las limitaciones de Whisper en entrada fija de 30 segundos, ausencia de caché y precisión por idioma, y destaca como una alternativa adecuada para implementar interfaces de voz de baja latencia en entornos edge
Resumen de Moonshine Voice
- Moonshine Voice es un toolkit de IA open source para desarrollar aplicaciones de voz en tiempo real
- Todo el procesamiento se realiza en el dispositivo local, lo que garantiza respuestas rápidas y privacidad
- Gracias al procesamiento en streaming, el texto puede actualizarse incluso mientras el usuario habla
- El modelo es una arquitectura entrenada desde cero basada en investigación propia, y ofrece mayor precisión que Whisper Large v3
- Ofrece varios tamaños, desde un modelo ultraligero de 26 MB hasta un modelo mediano de 245M parámetros
- Soporta varios idiomas, incluidos inglés, coreano, japonés, chino, español, vietnamita, árabe y ucraniano
Principales mejoras frente a Whisper
- Elimina la ventana de entrada fija de 30 segundos de Whisper para admitir entradas de longitud variable
- Añade caché para reducir cálculos redundantes durante el streaming y acortar considerablemente la latencia
- Con entrenamiento de modelos individuales por idioma, logra mayor precisión para un mismo tamaño de modelo
- Mediante una biblioteca central en C++ multiplataforma, permite usar la misma API desde Python, Swift, Java y otros lenguajes
- Logra una tasa de error más baja con un modelo de 245M parámetros más pequeño que Whisper Large v3 (1.5B parámetros)
Funciones principales y estructura de la API
- Integra toda la canalización de reconocimiento de voz en una sola biblioteca para procesar de forma unificada entrada de micrófono, detección de voz (VAD), conversión a texto, identificación de hablante y reconocimiento de comandos
- Clases principales:
- Transcriber: convierte la entrada de audio en texto
- MicTranscriber: procesa automáticamente la entrada del micrófono
- IntentRecognizer: reconocimiento de comandos basado en lenguaje natural
- Con una arquitectura basada en eventos, detecta en tiempo real cambios de estado como LineStarted / LineUpdated / LineCompleted
Modelos y rendimiento
- Moonshine Medium Streaming (245M): WER 6.65%, superior a Whisper Large v3 (7.44%)
- Moonshine Small Streaming (123M): WER 7.84%
- Moonshine Tiny Streaming (34M): WER 12.00%
- El modelo Tiny en coreano fue evaluado con un WER de 6.46%
- Todos los modelos se ofrecen en formato .ort basado en OnnxRuntime y están aligerados con cuantización de 8 bits
Desarrollo y despliegue
- Puede instalarse en entornos principales como Python (pip install moonshine-voice), Swift (SPM), Android (Maven) y Windows (headers de C++)
- Ofrece un paquete optimizado para Raspberry Pi, con reconocimiento en tiempo real usando un micrófono USB
- Se publica bajo licencia MIT (modelo en inglés) y Moonshine Community License (modelos en otros idiomas)
- Hoja de ruta futura: binarios más ligeros para móviles, idiomas adicionales, identificación de hablante mejorada y personalización por dominio
Benchmarks y usos
- Con una velocidad de procesamiento más de 5 veces superior a Whisper, es adecuado para interfaces de voz en tiempo real
- Está diseñado con una latencia objetivo inferior a 200 ms, por lo que puede usarse en aplicaciones conversacionales
- A través de un ejemplo de reconocimiento de comandos, puede reconocer variantes en lenguaje natural como “Turn on the lights”
- Su rendimiento ya fue validado públicamente en el HuggingFace OpenASR Leaderboard
1 comentarios
Comentarios en Hacker News
Según el OpenASR Leaderboard, Parakeet V2/V3 y Canary-Qwen (una versión ajustada de Qwen) rinden mejor que Moonshine
Los tres modelos son open source, pero Parakeet es el modelo más pequeño
Yo uso Parakeet V3 localmente junto con Handy, y funciona muy bien
Así que me parece difícil hacer una comparación directa
Me sorprende que el leaderboard no muestre información sobre el tamaño de los modelos
Incluso este texto lo estoy escribiendo hablándole a Handy
El manejo automático de puntuación también es perfecto, y como convierte voz a texto localmente al instante, es mucho más cómodo que Google Docs
Antes hasta instalé el navegador Orion para intentar usar entrada por voz basada en Chrome, pero ahora con Handy me basta
Mi velocidad de tecleo era de 100~120 WPM, y esto es aún más rápido
De verdad es una herramienta que mejora la calidad de vida
Al usar codex-cli y Handy juntos en macOS, el atajo predeterminado (Option+Space) mete espacios a mitad del dictado
En cambio, la combinación Left Ctrl + Fn funciona de forma limpia
Me da curiosidad saber qué atajos usan otras personas
Lo probé por mi cuenta y es realmente excelente
Ahora planeo usarlo como app predeterminada en todo mi trabajo con clientes
Felicidades por el resultado
En lo personal, lo que más me interesa es la función de streaming
Yo hice LocalVoxtral, una app de dictado para macOS basada en Voxtral Realtime, y la diferencia de UX entre streaming y STT offline es enorme
Cuando las palabras aparecen al instante mientras hablas, el bucle de retroalimentación cambia por completo
Puedes detectar errores y corregir frases en tiempo real, así que se siente mucho más natural
Me da curiosidad cuál es en la práctica la latencia de streaming de Moonshine
También quisiera saber si hay un endpoint WebSocket compatible con OpenAI Realtime
Elegí Moonshine por defecto porque tiene el mejor equilibrio entre precisión y latencia
Más adelante planeo añadir un benchmark objetivo que compare varios modelos con el mismo audio
También tengo un servidor WebSocket personalizado (rift-local) hecho tomando como referencia la API de Sherpa-onnx
Está optimizado para una sola conexión, así que no es ideal para conexiones múltiples
He ayudado a varios streamers de Twitch a añadir funciones de transcripción y traducción a sus streams mediante obs-localvocal
Principalmente se usaba para convertir voz en alemán en subtítulos en inglés
Hace falta una alternativa más rápida y precisa que Whisper, pero los streamers prefieren plugins instalables para OBS
Moonshine no tiene función de traducción ni soporta detección automática multilingüe, así que tiene limitaciones para streamers que cambian mucho de idioma
Sería ideal tener una función que detecte el idioma automáticamente y cambie de modelo
Afirmar que tiene mayor precisión que Whisper Large v3 es una apuesta audaz
Me pregunto si en la evaluación se consideró el problema del hallucination loop de Whisper
También quisiera saber si el uso de VRAM al desplegarlo en edge devices se ajusta a una Mac de 8 GB
Si corre sin cuantización, sería bastante significativo
En un entorno de streaming, la estabilidad parcial importa más que un simple WER
En el caso de un asistente de voz, si la transcripción parcial cambia cada pocos cientos de ms, la UX se arruina
Si hubiera métricas como latencia al primer token, proporción en tiempo real y porcentaje de tokens corregidos después de 1 s/3 s, la comparación sería mucho más útil
Si esos números son buenos, sería muy prometedor para pipelines de asistentes locales
Yo también he vivido la experiencia de reinterpretar sobre la marcha lo que estoy diciendo, y parece algo que pasa con frecuencia incluso de forma inconsciente
Si es así, quizá no haga falta que esa tasa sea demasiado baja
Los idiomas compatibles actualmente son inglés, árabe, japonés, coreano, chino, español, ucraniano y vietnamita, y la mayoría son de tamaño Base (58M parámetros)
No entiendo por qué en la guía de instalación para Raspberry Pi recomiendan
'sudo pip install --break-system-packages moonshine-voice'Aunque en la documentación también presentan una alternativa usando uv
Si usas uv run, no hace falta ejecutar
sourcepor separadoNo queda claro si la “mejora de precisión” es con base en inglés o en multilingüe
Como mínimo deberían ofrecer una tabla de WER por idioma para poder comparar
Me pregunto si hay planes de soporte para JavaScript en el navegador
Antes había una demo, pero ya no está
Hubo un tiempo en que sí funcionaba localmente, pero en algún momento se rompió sin razón aparente
También hay un documento comparativo que organiza soluciones de transcripción offline en el navegador
Además existe una demo separada de Moonshine basada en transformers.js (con WebGPU y fallback a WASM)
Si quieres probar Moonshine con una GUI en el navegador, ejecuta el siguiente comando
Esto abrirá RIFT, un frontend web para transcripción local, y también tiene botón de copiar
Además permite compararlo con Web Speech API y otros modelos, incluidas APIs en la nube
Enlaces relacionados: rift-local, demo de RIFT