Repository navigation
Releases: VoxRT/LinnetTTS
Release list
LinnetTTS 0.1.1
[0.1.1] - 2026-11-04
Fixed
- C API: every argument error sets the message of
linnet_last_error; the header states where a voice's width is validated. - Linux examples:
wav.hconverts float to 16-bit PCM exactly like the runtime'ssynthexample (round half away from zero),
so the C examples reproduce the reference MD5 of the weights release on x86-64. - Android
AudioTrackPlayer.drain()returned only at its deadline on devices whose playback head never reports the last frame;
it now returns as soon as the head stops advancing. - PyTorch package: blank text,
max_frames < 1, negativetempand a voice of the wrong width raiseValueError(same rules
as the wheel); the wheel raisesValueErrorfor negativethreads. - Documentation after an outside-developer pass over every channel: how to depend on the Rust crate,
soundfilein the
Python snippets, seeds not portable between the wheel and the PyTorch package, fp32-only parity tolerances, rpath for
hand-linked C programs, iOS device-build prerequisites and the Swift package tests' binary target, Android first-run
notes, and an honest statement on cross-architecture output: bit-identical per platform, below 2e-3 across
x86-64 / Apple / Android / Raspberry Pi (the reference MD5 holds on x86-64). - A stale prebuilt
_native.abi3.sois no longer tracked inbindings/python/.
Model weights are published separately (release weights-vN, see README.md).
LinnetTTS 0.1.0
0.1.0 - 2026-11-04
First public release of LinnetTTS: lightweight on-device English text-to-speech (flow LM over a 25 Hz continuous-latent
codec with a Vocos-style decoder, ~41M parameters, 24 kHz, streaming).
Added
python/—linnet_tts_torch, the reference model definition and inference in PyTorch (no training code). Bit-exact
against the training-side reference vectors intests/goldens/ref(tests/test_ref_goldens.py).runtime/— Rust runtime.linnet-ops: the kernels this model uses, scalar reference plus aarch64 NEON, x86_64 AVX2+FMA
and WASM SIMD128 fast paths, selected at run time on x86_64.linnet-tts: loader for thelinnet-tts/1safetensors
container (fp16 weight matrices, fp32 accumulation), SentencePiece tokenizer, streamingSession(one LM step = 80 ms =
1920 samples; the chunks concatenate bit-for-bit to the offline result), C API (include/linnet_tts.h), and a persistent
worker pool whose audio output is bit-identical for every thread count.bindings/linux/— C distributionlinnet-tts-<version>-linux-{x86_64,aarch64}.tar.gz(.so,.a, header, examples).bindings/python/— wheellinnet-tts(importlinnet_tts; abi3, CPython >= 3.9, NumPy in and out, GIL released).bindings/android/— AARcom.voxrt.linnet:linnet-tts(Kotlin API, JNI in Rust, arm64-v8a + x86_64, minSdk 24,
AudioTrackPlayer) and a sample app (package registry publishing follows the first tagged release; see
build/README.md).bindings/ios/— Swift packageLinnetTTSover a staticLinnetTTS.xcframework(ios-arm64, simulator arm64 + x86_64,
macos-arm64 for host tests; iOS 15 / macOS 12),LinnetPlayer, a SwiftUI sample app and XCTests (package
registry publishing follows the first tagged release; seebuild/README.md).docs/— model card, weight container format (linnet-tts/1), streaming contract. Golden vectors intests/goldens/
shared by the Python package and the Rust runtime.build/—set_version.sh(one version for every package),make_weights_release.sh(assembles and checks a weights
release directory), git hooks; GitHub Actions workflows for CI and tagged releases.
Weights
linnet-en-35mv1 (fp16 runtime file, fp32 reference file, tokenizer, built-in voices) is published separately as the
GitHub releaseweights-v1with a Hugging Face mirror, under the Linnet Weights License (WEIGHTS_LICENSE.md).
No weights are bundled in any package.
Known limitations
- English only; other languages produce garbage.
- No text normalisation inside the model: write numbers, dates, currencies and similar as words before synthesis.
- A slight roughness is audible on headphones in some utterances.
- Browser (WASM) and Node channels are deferred to a later release; the runtime keeps compiling for
wasm32-unknown-unknown. - An int8 (W8A8) weight variant for weaker devices is planned as a separate weights file.
Model weights are published separately (release weights-vN, see README.md).
Linnet weights v1 (linnet-en-35m)
Linnet weights v1 (linnet-en-35m)
First release of the Linnet model weights: English on-device text-to-speech, 41.4 M parameters (flow LM 31.5 M + codec decoder 9.9 M),
24 kHz, streaming, container linnet-tts/1 (safetensors). Trained in October 2026 (LM step 800 000, EMA weights).
Files
| file | size | purpose |
|---|---|---|
linnet-en-35m-weights-v1.tar.gz |
230 MB | all files below with the directory layout; unpack into local/ and run sha256sum -c SHA256SUMS |
linnet-en-35m.fp16.safetensors |
83 MB | runtime weights; load this with the Rust runtime and the bindings |
linnet-en-35m.safetensors |
166 MB | fp32 reference weights for linnet_tts_torch and the golden tests |
tokenizer.model |
102 KB | SentencePiece unigram, 6000 pieces |
voices/linnet-en-f1.npy (attached as linnet-en-f1.npy) |
15 KB | built-in voice, female, American |
voices/linnet-en-m1.npy (attached as linnet-en-m1.npy) |
15 KB | built-in voice, male, American |
MANIFEST.json |
contents, metadata, reference synthesis md5 | |
SHA256SUMS |
sha256sum -c SHA256SUMS |
|
WEIGHTS_LICENSE.md, model-card.md |
license and model card |
License: Linnet Weights License 1.0 (WEIGHTS_LICENSE.md), not an open-source license. Free, including commercially: running the
unmodified weights with the built-in voices inside your own products, on devices and on servers, shipping them as part of your product,
selling the audio you generate. A separate written license from VoxRT (help@voxrt.com) is required for creating or cloning voices
(including your own), fine-tuning or saving modified, quantised or converted copies of the weights, training any model with the weights
or their output, offering general-purpose text-to-speech to others as an API or service, and publishing the weights outside your product.
The license text governs; this summary does not. Products that use the weights show the notices in Section 8 of the license.
Built-in voices are synthetic (designed from text descriptions); they are not clones of real people.
Runtime: LinnetTTS v0.1.0 or later (https://github.com/VoxRT/LinnetTTS). The three files the runtime needs are the fp16 weights,
tokenizer.model and one voice file. Mirror: https://huggingface.co/VoxRT/linnet-en-35m.