Linnet: 41M On-Device Streaming English TTS

Introduction
VoxRT (Wiseport Ltd.) just shipped Linnet linnet-en-35m — a lightweight English on-device text-to-speech stack that streams from the first frame. GitHub released the weights as weights-v1 at 2026-11-04T06:36Z, the Hugging Face mirror VoxRT/linnet-en-35m landed the same minute, and runtime v0.1.0 followed at 2026-11-04T08:02Z with Linux, Python wheels, Android AAR, and iOS xcframework.
This is a maker-ready phone/desktop TTS drop, not a research card with no binary.
What Shipped
- Vendor / product: Linnet
linnet-en-35m— VoxRT - Modality: generative TTS (English, streaming, on-device)
- Open vs closed: code Apache-2.0; weights under Linnet Weights License 1.0 (free commercial inference with the built-in voices; custom voices, fine-tunes, and general-purpose TTS APIs need a separate written license)
- Runnable today: unpack
weights-v1intolocal/, thenpip install linnet-ttsor the Rustsynthexample; also Android AAR + iOS Swift package fromv0.1.0 - Concrete fact: ~41.4M params end-to-end (31.5M flow LM + 9.9M Vocos-style decoder); fp16 runtime file ~83 MB; 24 kHz mono at 1 NFE / 80 ms frame; measured RTF about 9% on iPhone 11 and 7% on iPhone 13 Pro Max (1 thread)
Repo: VoxRT/LinnetTTS.
Architecture, Briefly
Linnet is an autoregressive flow language model over continuous 48-dim latents (one LM step = 80 ms = two 24-dim codec frames at 25 Hz), then a causal Vocos-style neural codec decoder to 24 kHz. Everything is causal — no lookahead — so chunks concatenate bit-for-bit to the offline result. Two built-in voices ship as linnet-en-f1 and linnet-en-m1; the voice encoder that would mint new prompts from recordings is not in this release.
Run It
pip install linnet-ttsUnpack GitHub weights-v1 (or the HF mirror) into local/. Voices are linnet-en-f1 and linnet-en-m1; defaults are temp 0.3 and cfg 2.0. Follow the package README for Session / synthesize + stream APIs.
import linnet_ttsOr use the Rust example after cloning the repo and placing weights under local/. Mobile makers get linnet-tts-0.1.0.aar and LinnetTTS-0.1.0.xcframework.zip on the same v0.1.0 release.
License Caveats
- Built-in voices: free to ship inside your own products, including commercial / closed-source apps.
- Reserved without a separate VoxRT license: custom voice creation, modifying the weights, training, and offering a general-purpose TTS API.
- Read
WEIGHTS_LICENSE.md— the license text governs.
Limits Worth Knowing
- English only — other languages produce garbage.
- No text normalisation inside the model: write numbers, dates, currencies, and phones as words before synthesis.
- A slight roughness can show up on headphones.
- Browser/WASM and an int8 W8A8 weight file are planned later, not day-0.
Original Source
- https://github.com/VoxRT/LinnetTTS
- https://github.com/VoxRT/LinnetTTS/releases/tag/weights-v1
- https://github.com/VoxRT/LinnetTTS/releases/tag/v0.1.0
- https://huggingface.co/VoxRT/linnet-en-35m
Conclusion
If you want on-device English TTS that actually streams on a phone CPU today, with day-0 Python/Rust/Android/iOS bindings and clear commercial rules for the two built-in voices, Linnet linnet-en-35m is the November 4 file to grab.
—Anabel ♡
