Pocket TTS 100M
Native Apple runtime · PocketTTS
PocketTTS adds native CoreML speech synthesis to speech-swift. All stages default to CPU-only execution. The English Alba preset streams 1,920-sample frames at 24 kHz (80 ms per frame).
Awaited delivery applies backpressure. Each request owns its recurrent state and seed. Cancellation, callback failures, and generation limits report errors; successful completion emits one empty final chunk. Voice cloning and other languages are unsupported by this bundle.
Download the published bundle aufklarer/Pocket-TTS-100M-CoreML-INT8 on first use, or load a local export. Retain attribution to Kyutai, FluidInference, and Alba MacKenna under CC BY 4.0.
Swift and CLI usage
speech speak "Hello world." --engine pocket --stream \
--pocket-bundle-dir /path/to/bundle --pocket-seed 42 -o hello.wavimport PocketTTS
let model = try PocketTTSModel.fromBundle(URL(fileURLWithPath: "/path/to/bundle"))
try await model.generateStreaming(text: "Hello world.") { chunk in
await consume(chunk.samples)
}HTTP and WebSocket
Use pocket-tts with voice alba. Streaming HTTP requires PCM; WebSocket emits audio deltas. The existing default models are unchanged.
curl http://localhost:8080/v1/audio/speech \
-H 'Content-Type: application/json' \
-d '{"model":"pocket-tts","voice":"alba","input":"Hello world.","response_format":"pcm","stream":true}' \
-o hello.pcmApple CPU benchmark
Apple M5 Pro · 48 GiB · cpuOnly · first_audio_ms 78.9 · RTF 0.337 · peak_rss 866.8 MiB · n=5 · seed=42 · 2026-10-17
Pocket TTS 100M is the low-latency, on-device English text-to-speech backend in speech-core. The public ONNX bundle uses the fixed Alba voice and streams audio as soon as each acoustic frame is ready.
Inference is genuinely interleaved: one autoregressive latent is decoded and emitted before generation of the next latent. Each non-final callback carries 1,920 Float32 samples — 80 ms at 24 kHz — avoiding the fixed full-graph floor of buffered TTS exports.
Published bundle
| Item | Details |
|---|---|
| Model | soniqo/Pocket-TTS-100M-ONNX-INT8 |
| Release | v1.0.0 · ad5d3fae3fb2f10024583708597afca8337c094c |
| Bundle size | 120.3 MiB |
| Runtime | ONNX Runtime · C++17 · dynamic INT8 + FP32 |
| Output | 24 kHz mono Float32 PCM · 1,920 samples / 80 ms per frame |
| Language / voice | English · fixed Alba voice |
Download and verify
The speech-core downloader pins v1.0.0 and verifies every published file by SHA-256.
bash scripts/download_pocket_tts_onnx.sh /models/pocket-tts-onnx
C++ API
#include <speech_core/models/onnx_pocket_tts.h>
speech_core::PocketTtsConfig config;
config.intra_threads = 2;
config.flow_steps = 4;
speech_core::OnnxPocketTts tts("/models/pocket-tts-onnx", config);
tts.synthesize("Hello world.", "en",
[](const float* samples, size_t length, bool is_final) {
// Each non-final callback is 1,920 Float32 samples:
// 80 ms at 24 kHz.
});
Streaming contract
The callback receives one 80 ms frame at a time; the final callback marks end of stream. last_metrics() reports conditioning, first-audio and total latency, frame and sample counts, EOS state, cancellation, and the effective seed. cancel() stops an active synthesis.
Galaxy S23 Ultra benchmark
A clean rerun of the public v1.0.0 bundle used ONNX Runtime 1.27, two CPU threads, and a Galaxy S23 Ultra. These are direct engine measurements, not UI or complete voice-pipeline timings.
| Metric | Result |
|---|---|
| TTFA p50 / p95 | 127.7 / 133.7 ms |
| Total latency p50 / p95 | 467.5 / 485.3 ms |
| Median RTF | 0.4495 |
| Peak RSS | 373.7 MiB |
Round-trip intelligibility
The device gate synthesized 46 command and assistant phrases, resampled the audio through the production 24-to-16 kHz path, and transcribed it with the deployed Parakeet-EOU recognizer.
| Metric | Result |
|---|---|
| Corpus | 46 phrases |
| Exact transcripts | 31 / 46 |
| WER / CER | 8.00% / 3.47% |
| Empty audio / transcript / EOS failures | 0 / 0 / 0 |
Round-trip ASR measures intelligibility, not naturalness or listener preference; it complements listening tests.
Integration status
The C++17 ONNX backend is merged in speech-core and builds for Windows, Linux, and Android. The current speech-android SDK/JNI path still selects Kokoro by default; Kotlin model selection, download wiring, and SDK exposure are follow-up work. This section describes the ONNX release; the native Swift CoreML runtime is documented above.
Limits and license
- English only; the public checkpoint bakes in the fixed Alba voice and does not support arbitrary voice cloning.
- The model and voice are CC BY 4.0. Keep the Alba MacKenna attribution included in the bundle manifest.
- The recurrent graphs are CPU-oriented. Hardware acceleration is opt-in because Android execution-provider support varies by device and ONNX Runtime build.
- The speech-core source is Apache 2.0; the model bundle retains its own CC BY 4.0 terms.