loudkit
Servidor MCP local de texto a voz: 28 voces en 10 idiomas más perfiles de voz clonados, salida en WAV/FLAC/MP3/Opus. Se ejecuta en el dispositivo a través de stdio, sin clave API.
Documentación
loudkit
Texto a voz con sonido natural que se ejecuta en tu propio hardware.
Veintiocho voces en diez idiomas, clonación de voz a partir de unos diez segundos de audio y SDK nativos para Python, Swift, Go, Rust y TypeScript. Descarga el modelo una vez y ejecútalo sin conexión, sin cuenta, telemetría ni factura de uso.
loudkit es el motor de voz dentro de LoudReader, una aplicación de lectura que lee en voz alta artículos, PDFs y libros en el dispositivo. El motor está aquí bajo Apache-2.0 para cualquiera que quiera construir directamente con él.
Escucha las voces | Pruébalo en el navegador | Abrir en Colab | Modelo | Documentación
Escucha una voz con un solo comando
pip install "loudkit[torch,audio,hub]"
loudkit speak --voice joe "Hello from loudkit." --play
La primera ejecución descarga el modelo de 747 MB y las 28 voces, y luego se ejecuta
sin conexión. --play usa el reproductor del sistema; añade -o hello.wav para conservar el archivo.
Cada otra voz funciona de la misma manera: --voice kathleen, --voice dave.
Lo mismo desde Python
import loudkit as lk
engine = lk.load("loudreader/loudr-1")
voice = engine.voice("joe")
engine.synthesize("Hello from loudkit.", voice, seed=7).save("hello.wav")
engine.voices() lista los 28 nombres. synthesize acepta texto de cualquier
longitud, y engine.stream(...) entrega el mismo audio frase por frase
para que la reproducción pueda comenzar antes. Las 28 voces, incluyendo Henry, Oliver, Oscar y
Sophie, están incluidas en ambas descargas de modelo y se cargan por nombre.
Primeros pasos es la página que debes leer a continuación.
Lo mismo en Swift, Go, Rust y TypeScript
Cada versión carga el modelo por nombre, lo descarga y verifica en la primera llamada, y se ejecuta sin conexión después. Los fragmentos necesitan la versión 0.1.1 de cada paquete.
Swift (CoreML, macOS 14 o iOS 17). Añade
.package(url: "https://github.com/loudreader/loudkit", from: "0.1.1") a
Package.swift. Guía.
import LoudKit
let engine = try await Engine.load("loudreader/loudr-1")
let voice = try engine.voice(named: "joe")
try engine.synthesize("Hello from loudkit.", voice: voice, seed: 7).saveWav("hello.wav")
Go (ONNX Runtime). go get github.com/loudreader/loudkit/go@v0.1.1.
Guía.
eng, err := loudkit.Load("loudreader/loudr-1")
if err != nil { log.Fatal(err) }
defer eng.Close()
v, err := eng.Voice("joe")
if err != nil { log.Fatal(err) }
res, err := eng.Synthesize("Hello from loudkit.", v, loudkit.Options{Seed: 7})
if err != nil { log.Fatal(err) }
if err := res.SaveWav("hello.wav"); err != nil { log.Fatal(err) }
Rust (ONNX Runtime). cargo add loudkit@0.1.1.
Guía.
use loudkit::{Engine, Options};
let mut engine = Engine::load("loudreader/loudr-1")?;
let voice = engine.voice("joe")?;
let options = Options { seed: 7, ..Default::default() };
engine.synthesize("Hello from loudkit.", &voice, &options)?.save_wav("hello.wav")?;
TypeScript (ONNX Runtime, Node 20). npm install loudkit@0.1.1.
Guía.
import { Engine } from "loudkit";
const engine = await Engine.load("loudreader/loudr-1");
const voice = engine.voice("joe");
(await engine.synthesize("Hello from loudkit.", voice, { seed: 7 })).saveWav("hello.wav");
await engine.close();
Go y Rust necesitan libonnxruntime en la máquina (brew install onnxruntime,
o una compilación de los lanzamientos de ONNX Runtime); las guías indican dónde busca cada
versión. El mismo texto, voz y semilla generan los mismos tokens de voz en los
cinco idiomas.
Dos modelos
loudreader/loudr-1 es el predeterminado y se ejecuta en todos los backends y en todos los
idiomas. loudreader/loudr-1-turbo es más rápido, con un pequeño costo en
naturalidad, y en 0.1.1 se ejecuta en los cinco SDK. La cadena pasada
a load es toda la elección:
Elegir un modelo.
Voces
La galería de voces reproduce las 28 voces junto a la grabación de la que se derivó cada una. Inglés, español, francés, alemán, italiano, polaco, portugués, neerlandés, sueco y danés, diez voces en inglés y dos para cada otro idioma. VOICES.md registra la fuente, la licencia y la base de consentimiento de cada una; provienen de grabaciones donadas para tecnología de voz o de corpus CC0 y CC-BY.
Hemos evaluado el inglés de oído y no hablamos los otros nueve idiomas lo suficientemente bien como para juzgarlos. Si los hablas, por favor escucha y cuéntanos qué suena mal.
Clona una voz
A partir de una grabación que poseas o tengas permiso para usar, de cinco a diez segundos de un hablante:
pip install "loudkit[torch,audio,enroll,hub]"
loudkit clone my-recording.wav --checkpoint loudreader/loudr-1 --name my-voice --language en
loudkit speak --voice voices/my-voice.safetensors "Now in a cloned voice." -o cloned.wav
El resultado es un perfil portátil de aproximadamente 150 KB, no otra copia del
modelo. En Python la misma ruta es lk.enroll(...); cada versión tiene enroll.
Consulta Clonar una voz
y Uso responsable.
Velocidad medida
| ruta | hardware | loudr-1 | loudr-1-turbo |
|---|---|---|---|
| motor PyTorch dividido* | Apple M3 Pro | 3.29x | 5.77x |
| Swift, generador nativo más renderizador CoreML | Apple M3 Pro | 2.49x | 3.44x |
| ONNX Runtime, proveedor de CPU | Apple M3 Pro | 1.14x | 1.59x |
| PyTorch con gráficos CUDA | RTX 3090 | 8.55x | 13.05x |
| PyTorch con gráficos CUDA | Jetson Orin Nano | 1.85x | 2.50x |
* "Dividido" describe la colocación del dispositivo, no un modelo o punto de control diferente. El generador de tokens se ejecuta en la CPU mientras el renderizador de mel y vocoder se ejecuta en la GPU de Apple a través de MPS. Las ventanas adyacentes pueden superponerse entre los dos dispositivos.
Más alto es más rápido, y 1.0x significa tiempo real. Cada fila se midió en 0.1.1 (2026-09-06, ambos modelos): las filas de Apple en una laptop en uso normal, las filas de NVIDIA en las piezas nombradas, con el mismo pasaje, voz y semilla. Las filas A100, L4 y T4 están en la página de benchmarks.
Para cargas de trabajo por lotes, el generador de tokens alcanza un rendimiento agregado de 16.7x en lote 1 y 57.3x en lote 64 en la RTX 3090 con loudr-1, y 42.0x a 155.0x con loudr-1-turbo. El resultado medido más alto es 223.6x, turbo en una A100 en lote 64 (85.3x con loudr-1), medido en 0.1.1. Son números de rendimiento solo del generador, no latencia de una sola solicitud ni RTF de extremo a extremo. Los comandos completos, el hardware y las advertencias están en Benchmarks.
Integraciones
Para un proceso que mantiene un motor activo en lugar de pagar el costo de carga por llamada. Los contratos están en Servidor y agentes.
loudkit serve: un servidor HTTP con las rutas propias de loudkit y un/v1/audio/speechcompatible con OpenAI, con transmisión por Server-Sent Events. Los agentes que hablan la API de voz de OpenAI, entre ellos Hermes Agent y OpenClaw, se conectan solo con configuración.loudkit serve --grpc: el mismo motor detrás de un esquema tipado con contrapresión.loudkit serve --mcp: un servidor MCP en stdio para hosts de agentes (vista previa).- Un módulo de Speech Dispatcher para lectores de pantalla de Linux, en
integrations/. - Imágenes Docker y compose para el servidor.
Los WAV guardados desde Python y las respuestas del servidor llevan una nota legible por máquina
sobre cómo se creó el audio, nombrando el modelo, la voz, la semilla y el backend y
llevando un checksum que vincula la nota con el sonido; las versiones de Go, Rust, JS y Swift
escriben PCM plano. loudkit escribe esa nota y loudkit verify la lee.
No son C2PA Content Credentials: nada lo firma y ninguna herramienta C2PA lo lee.
Alcance
loudkit es una caja de herramientas de inferencia, no una plataforma de voz alojada. No proporciona cuentas, facturación, multiinquilino, entrenamiento de modelos ni control de emociones. El servidor local espera que proporciones cualquier autenticación orientada al público, límites de velocidad y TLS. No ayudará con suplantación no revelada, evasión de autenticación de voz o eliminación de la nota legible por máquina del audio generado. SUPPORTED.md establece el límite.
Documentación
El índice de documentación lista las doce páginas que un usuario necesita: primeros pasos, una página por idioma, elección de modelo, clonación, texto largo y transmisión, servidores, solución de problemas y las dos tarjetas de modelo. La tarjeta de modelo cubre el linaje, los límites y lo que contiene cada descarga.
Licencia
El código y el lanzamiento de loudr-1 son
Apache-2.0. El
tokenizador y el codificador de hablante conservan su licencia MIT original de Chatterbox.
NOTICE lista cada
componente y licencia de origen.