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

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
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for aufklarer/Pocket-TTS-100M-CoreML-INT8

Finetuned
(48)
this model

Collection including aufklarer/Pocket-TTS-100M-CoreML-INT8