Pocket TTS 100M CoreML INT8
Native CPU speech synthesis for Apple platforms, with an English Alba preset. The language-model linear weights use the existing upstream INT8 conversion; conditioning, the eight-step fused flow decoder and Mimi retain FP16 weights. The bundle emits 1,920-sample frames at 24 kHz (80 ms) during generation.
| Property | Value |
|---|---|
| Model | Kyutai Pocket TTS, 100M |
| Format | Precompiled CoreML .mlmodelc |
| Language / voice | English / Alba |
| Output | Mono Float32 PCM, 24 kHz |
| Cache | Six layers, 512 positions |
| Flow steps | Eight, fixed in the exported graph |
| Sampling | Temperature 0.7, request-local deterministic seed |
| Bundle | Approximately 299 MiB; exact sizes in manifest.json |
Files
| Path | Size | Purpose |
|---|---|---|
cond_prefill.mlmodelc/ |
127.3 MiB | Text conditioning, FP16 weights |
flowlm_stepv2.mlmodelc/ |
73.5 MiB | Autoregressive backbone, INT8 linear weights |
flow_decoder_fused.mlmodelc/ |
18.5 MiB | Fused flow-matching decoder, FP16 weights |
mimi_decoder.mlmodelc/ |
39.9 MiB | Streaming audio decoder, FP16 weights |
constants_bin/ |
39.7 MiB | Tokenizer, text/BOS embeddings, padded Alba voice state |
config.json |
0.7 KiB | Versioned Swift runtime contract |
manifest.json |
5.6 KiB | SHA-256 and byte size for every packaged file |
NOTICE, LICENSE |
18.5 KiB | Attribution and CC BY 4.0 license |
Performance
Measurements use the release speech-swift runtime with every graph on CPU. Synthesis timings exclude loading; RTF is wall time divided by output duration. Warmup and measured iterations are recorded separately. RSS and physical footprint are process memory metrics, not model file sizes.
| Metric | Apple M5 Pro CPU-only |
|---|---|
| First PCM, median of five warm requests | 78.9 ms |
| Full synthesis, median | 943.4 ms / 2.8 s audio |
| RTF (lower is faster) | 0.337 |
| Peak process RSS, including load | 866.8 MiB |
| Largest post-run physical footprint | 343.7 MiB |
| Independent ASR round trip | 0 / 150 word errors, 12 phrases |
See the CPU benchmark report for measurements, round trips, and reproducible commands. These measurements do not establish listener preference or performance on an iPhone.
Usage
Use the Pocket TTS runtime on the
feat/pocket-tts branch
until it is merged into the default branch.
import PocketTTS
let model = try await PocketTTSModel.fromPretrained()
try await model.generateStreaming(text: "Hello world.") { chunk in
await consume(chunk.samples)
}
speech speak "Hello world." --engine pocket --stream -o hello.wav
speech speak "Hello world." --engine pocket --stream \
--pocket-bundle-dir /path/to/bundle --pocket-seed 42 -o hello.wav
The Python benchmark driver invokes the native release binary, then runs ASR in a separate process after synthesis exits. Python is not needed for Swift inference.
import json
import subprocess
run = subprocess.run([
"pocket-tts-bench", "--bundle-dir", "/path/to/bundle",
"--text", "Hello world.", "--runs", "3", "--warmup", "1",
"--output-dir", "/tmp/pocket-bench",
], check=True)
with open("/tmp/pocket-bench/metrics.jsonl") as source:
measurements = [json.loads(line) for line in source]
Limits
English and the fixed Alba preset only. No arbitrary voice cloning, speed control or multilingual pack loading. Text is limited to 4,096 characters and split around a 50-token target. A generation/cache limit throws instead of returning success with a clipped final word. Each successful stream ends with one empty final marker. Cancellation and failures terminate the stream with an error; previously delivered audio is partial.
Source and attribution
- Kyutai Pocket TTS
- CoreML conversion by FluidInference,
revision
91748676fe3c8b2eb3007b3125253bcd898202c3,v2.1/english/. - Alba voice by Alba MacKenna.
Weights and the Alba voice are CC BY 4.0. Retain Kyutai, FluidInference and Alba MacKenna attribution when redistributing. The learned graph weights are preserved, not requantized. Mimi omits redundant passthrough outputs to avoid CoreML BNNS input/output name collisions; the host retains that unchanged state. All graph operations and recurrent inputs are preserved. The voice snapshot is expanded into explicit padded F32 cache tensors for the native runtime.
Links
- Downloads last month
- 36
Model tree for aufklarer/Pocket-TTS-100M-CoreML-INT8
Base model
kyutai/pocket-tts