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

loudkit

Texto a voz con sonido natural que se ejecuta en tu propio hardware.

CI License Model Model Spaces Open in Colab loudkit MCP server score on Glama

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

rutahardwareloudr-1loudr-1-turbo
motor PyTorch dividido*Apple M3 Pro3.29x5.77x
Swift, generador nativo más renderizador CoreMLApple M3 Pro2.49x3.44x
ONNX Runtime, proveedor de CPUApple M3 Pro1.14x1.59x
PyTorch con gráficos CUDARTX 30908.55x13.05x
PyTorch con gráficos CUDAJetson Orin Nano1.85x2.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/speech compatible 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.