loudkit

Servidor MCP local de texto para fala: 28 vozes em 10 idiomas, além de perfis de voz clonados, com saída em WAV/FLAC/MP3/Opus. Funciona no dispositivo via stdio, sem chave de API.

Documentação

LoudKit

loudkit

Síntese de voz com som natural que roda no seu próprio hardware.

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

Vinte e oito vozes em dez idiomas, clonagem de voz a partir de cerca de dez segundos de áudio e SDKs nativos para Python, Swift, Go, Rust e TypeScript. Baixe o modelo uma vez e rode offline, sem conta, telemetria ou cobrança de uso.

loudkit é o motor de fala dentro do LoudReader, um aplicativo de leitura que fala artigos, PDFs e livros no dispositivo. O motor está aqui sob Apache-2.0 para quem quiser construir diretamente com ele.

Ouça as vozes | Experimente no navegador | Abra no Colab | Modelo | Documentação

Ouça uma voz em um comando

pip install "loudkit[torch,audio,hub]"
loudkit speak --voice joe "Hello from loudkit." --play

A primeira execução baixa o modelo de 747 MB e as 28 vozes; depois disso, roda offline. --play usa o player do sistema; adicione -o hello.wav para manter o arquivo. Todas as outras vozes funcionam da mesma forma: --voice kathleen, --voice dave.

O mesmo a partir do 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 os 28 nomes. synthesize aceita texto de qualquer extensão, e engine.stream(...) entrega o mesmo áudio frase por frase para que a reprodução possa começar cedo. Todas as 28 vozes, incluindo Henry, Oliver, Oscar e Sophie, estão incluídas nos downloads de ambos os modelos e são carregadas pelo nome.

Começando é a página para ler em seguida.

O mesmo em Swift, Go, Rust e TypeScript

Cada porta carrega o modelo pelo nome, busca e verifica na primeira chamada e roda offline depois disso. Os trechos precisam da versão 0.1.1 de cada pacote.

Swift (CoreML, macOS 14 ou iOS 17). Adicione .package(url: "https://github.com/loudreader/loudkit", from: "0.1.1") a Package.swift. Guia.

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. Guia.

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. Guia.

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. Guia.

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 e Rust precisam de libonnxruntime na máquina (brew install onnxruntime, ou uma compilação dos lançamentos do ONNX Runtime); os guias indicam onde cada porta procura por ele. O mesmo texto, voz e semente geram os mesmos tokens de fala em todos os cinco idiomas.

Dois modelos

loudreader/loudr-1 é o padrão e roda em todos os backends e em todos os idiomas. loudreader/loudr-1-turbo é mais rápido, com um pequeno custo em naturalidade, e na versão 0.1.1 roda nos cinco SDKs. A string passada para load é toda a escolha: Escolhendo um modelo.

Vozes

A galeria de vozes reproduz todas as 28 vozes ao lado da gravação da qual cada uma foi treinada. Inglês, espanhol, francês, alemão, italiano, polonês, português, holandês, sueco e dinamarquês — dez vozes em inglês e duas para cada outro idioma. VOICES.md registra a fonte, a licença e a base de consentimento de cada uma; elas vêm de gravações doadas para tecnologia de fala ou de corpora CC0 e CC-BY.

Avaliamos o inglês de ouvido e não falamos os outros nove idiomas bem o suficiente para julgá-los. Se você fala, por favor ouça e nos diga o que soa errado.

Clone uma voz

A partir de uma gravação sua ou com permissão de uso, cinco a dez segundos de um único falante:

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

O resultado é um perfil portátil de cerca de 150 KB, não outra cópia do modelo. Em Python, o mesmo caminho é lk.enroll(...); toda porta tem enroll. Veja Clonando uma voz e Uso responsável.

Velocidade medida

caminhohardwareloudr-1loudr-1-turbo
motor PyTorch dividido*Apple M3 Pro3.29x5.77x
Swift, gerador nativo mais renderizador CoreMLApple M3 Pro2.49x3.44x
ONNX Runtime, provedor de CPUApple M3 Pro1.14x1.59x
PyTorch com gráficos CUDARTX 30908.55x13.05x
PyTorch com gráficos CUDAJetson Orin Nano1.85x2.50x

* "Dividido" descreve a colocação do dispositivo, não um modelo ou checkpoint diferente. O gerador de tokens roda na CPU enquanto o renderizador de mel e vocoder roda na GPU da Apple via MPS. Janelas adjacentes podem se sobrepor entre os dois dispositivos.

Mais alto é mais rápido, e 1.0x significa tempo real. Cada linha foi medida na versão 0.1.1 (2026-09-06, ambos os modelos): as linhas da Apple em um laptop em uso comum, as linhas da NVIDIA nas peças nomeadas, com a mesma passagem, voz e semente. As linhas A100, L4 e T4 estão na página de benchmark.

Para cargas de trabalho em lote, o gerador de tokens atinge 16.7x de throughput agregado no lote 1 e 57.3x no lote 64 na RTX 3090 com loudr-1, e 42.0x a 155.0x com loudr-1-turbo. O maior resultado medido é 223.6x, turbo em um A100 no lote 64 (85.3x com loudr-1), medido na versão 0.1.1. São números de throughput apenas do gerador, não latência de solicitação única ou RTF de ponta a ponta. Comandos completos, hardware e ressalvas estão em Benchmarks.

Integrações

Para um processo que mantém um motor aquecido em vez de pagar o custo de carga por chamada. Os contratos estão em Servidor e agentes.

  • loudkit serve: um servidor HTTP com rotas próprias do loudkit e um /v1/audio/speech compatível com OpenAI, com streaming via Server-Sent Events. Agentes que falam a API de fala da OpenAI, entre eles Hermes Agent e OpenClaw, conectam-se apenas com configuração.
  • loudkit serve --grpc: o mesmo motor por trás de um esquema tipado com backpressure.
  • loudkit serve --mcp: um servidor MCP em stdio para hosts de agentes (pré-visualização).
  • Um módulo Speech Dispatcher para leitores de tela Linux, em integrations/.
  • Imagens Docker e compose para o servidor.

WAVs salvos do Python e as respostas do servidor carregam uma nota legível por máquina sobre como o áudio foi feito, nomeando o modelo, a voz, a semente e o backend e carregando uma soma de verificação que liga a nota ao som; as portas Go, Rust, JS e Swift escrevem PCM simples. loudkit escreve essa nota e loudkit verify a lê. Não são C2PA Content Credentials: nada assina e nenhuma ferramenta C2PA lê.

Escopo

loudkit é uma caixa de ferramentas de inferência, não uma plataforma de fala hospedada. Não fornece contas, cobrança, multi-inquilinos, treinamento de modelo ou controle de emoção. O servidor local espera que você forneça qualquer autenticação voltada ao público, limites de taxa e TLS. Não ajudará com personificação não divulgada, contorno de autenticação de voz ou remoção da nota legível por máquina do áudio gerado. SUPPORTED.md declara o limite.

Documentação

O índice de documentação lista as doze páginas que um usuário precisa: começando, uma página por idioma, escolhendo um modelo, clonagem, texto longo e streaming, servidores, solução de problemas e os dois cartões de modelo. O cartão de modelo cobre linhagem, limites e o que cada download contém.

Licença

O código e o lançamento loudr-1 são Apache-2.0. O tokenizador e o codificador de falante mantêm sua licença MIT upstream do Chatterbox. NOTICE lista cada componente upstream e licença.