Releases: zeroweight-ai/ZeroTTS
Release list
v0.1.1 — PyPI page fixes
Packaging fix only — no code changes. The library, the CLI and the weights
are byte-for-byte what 0.1.0 shipped, so there is no reason to upgrade except a
readable project page.
Fixed
- Broken banner and images on the PyPI project page. PyPI renders the
README without any repository context, so relative paths like
docs/assets/banner.pngresolved againstpypi.organd 404'd. Every image
and in-repo link is now an absolute URL. - Blank sample players on PyPI. PyPI sanitizes the README against a tag
allowlist that has no<video>in it, so the three sample clips rendered as
empty table cells. Each player now carries a fallback.mp3link inside it —
GitHub still shows the video players, PyPI shows playable audio links.
Install
pip install --upgrade zerotts
zerotts say "Xin chào" --voice maichi -o out.wavFull changelog: v0.1.0...v0.1.1
v0.1.0 - first public release
First public release of ZeroTTS — Vietnamese zero-shot text-to-speech that runs
on ONNX Runtime. No PyTorch, no GPU, faster than real time on a laptop CPU.
Why it's worth a look
4× fewer word errors than the next-best open Vietnamese system, and the
fastest of the four on CPU. Measured on
ZeroBench-TTS,
every system reading the same normalized text:
| ZeroTTS | OmniVoice | XTTS-v2-vietnamse | viXTTS | |
|---|---|---|---|---|
| WER ↓ | 0.56 % | 2.12 % | 7.27 % | 8.61 % |
| Naturalness (UTMOS) ↑ | 2.91 | 2.75 | 2.49 | 2.34 |
| Dead air ↓ | 0.029 s | 0.386 s | 0.568 s | 0.215 s |
| RTF, CPU ↓ | 0.50× | 6.12× | 0.71× | 0.73× |
| Time to first audio, CPU ↓ | ~70 ms | ~34 s | ~6.1 s | ~5.1 s |
| Size | 202 M params, 0.86 GB fp32, CPU | 3.1 GB, GPU | 1.9 GB, GPU | 1.9 GB, GPU |
The gap is widest in latency: the two XTTS fine-tunes also beat real time, but
need seconds before the first sample. ZeroTTS streams its first audio frame in
about 70 ms.
What's in it
- Real-time streaming on CPU — RTF 0.50×, first chunk in ~70 ms, 8 threads,
no GPU anywhere in the path. - Vietnamese text normalization built in — dates, times, numbers,
%,@
and abbreviations expanded to Vietnamese words before synthesis, so
31/12/2026andZeroTTSare read the way a person would read them. - Code-switched English handled inside Vietnamese sentences.
- Eight voice packs shipped with the weights:
maichi,baotrang,
kimoanh,hamy,giahuy,huuduc,quangminh,tiendat. - Long-form chunking — sentence-aware splitting with the audio joined back
into one continuous take. - Three ways to run it — Python API, the
zerottsCLI, a Gradio web UI
(pip install "zerotts[webui]"), plus a fully in-browser WebAssembly demo
underjs/that downloads the weights once and synthesizes locally.
Install
pip install zerotts
zerotts say "Xin chào" --voice maichi -o out.wavfrom zerotts import ZeroTTS
tts = ZeroTTS.from_pretrained("zeroweight-ai/ZeroTTS")
audio = tts.synthesize("Xin chào các bạn, mình là ZeroTTS.", voice="maichi")
tts.save_audio(audio, "out.wav")Weights are pulled from
🤗 zeroweight-ai/ZeroTTS on first
use. Python 3.9+, MIT licensed.
Known limits
- Voice cloning from your own audio is not in this release. The voice
encoder is not published — a voice here is a precomputed latent array shipped
with the weights, so you get the eight packs above and no way to add a ninth.
Seedocs/VOICES.md, or
zeroweight.ai if you need latents for your own voice. - CFG above 1.0 doubles inference cost — it runs a second unconditional branch
per frame. The default of 1.0 is what the benchmark numbers were produced
with. - Unconditioned mode (no voice pack) does not keep a consistent speaker between
segments; it is a quality check, not a usable voice.
Speech codec: MOSS-Audio-Tokenizer-Nano
by the OpenMOSS team (Apache-2.0) — see NOTICE.