Model reference · open weights

ZeroTTS

Audio zeroweight-ai Text→speech 1 build Open weights 875 dl/mo

ZeroTTS is an open-weight audio or speech model from zeroweight-ai. ZeroTTS (BF16) weighs 0 MB; the smallest configuration that runs it is RTX 3060 12 GB.

For self-hosting, compare this build's requirements below with the GPU you plan to rent.

  • ZeroTTS is a text-to-speech model developed by zeroweight-ai that supports Vietnamese and code-switched English.
  • It features zero-shot voice cloning from short audio references and is optimized for real-time streaming inference on CPU.
  • The model has 202 million parameters and is released under the MIT license.

Summary of the zeroweight-ai/ZeroTTS model card, 2026-10-01

What it is

Released byzeroweight-ai
Released2026-08-15
VRAM0 MB for the weights

What it runs on

Memory and cards for ZeroTTS (BF16)

0 MBweights, file size
1.6 GBruntime overhead
CardOne streamMemory
RTX 3060 12 GBfits11.6 GB
RTX 4060 Ti 16 GBfits15.4 GB
RTX 3090 24 GBfits23.4 GB
RTX 4090 24 GBfits23.4 GB
RTX 5090 32 GBfits31.0 GB
L40S 48 GBfits44.0 GB
A100 80 GBfits78.2 GB
H100 80 GBfits78.1 GB
RTX PRO 6000 Blackwell 96 GBfits93.8 GB
DGX Spark (GB10) 128 GB unifiedfits107 GB
H200 141 GBfits138 GB
B200 180 GBfits176 GB

From the model card

What zeroweight-ai says about ZeroTTS

Read the model card

Vietnamese Zero-Shot Text-to-Speech (TTS) with real-time streaming and voice cloning from seconds of audio. Fast, natural, and optimised for CPU inference.

The most accurate open Vietnamese TTS we know of — 4× fewer word errors than the next best model, and it runs faster than real time on a laptop CPU.

  • 🎯 Ultra-natural — 2.91 UTMOS above every other open Vietnamese system, with near-zero dead air (0.029 s).

  • 🗣️ Zero-shot voice cloning — a voice is a small latent array; drop it in and the model speaks in it, cloned from as little as 3 seconds of reference audio (up to 30 seconds). No fine-tuning, no per-speaker training.

  • ⚡ Real-time on CPU, streaming — ~2× faster than real time (RTF 0.5×), first audio chunk in ~70 ms. No GPU required.

  • 🇻🇳 Built for Vietnamese — tones, code-switched English, and reads 31/12/2025 and ZeroTTS without text normalizer.

  • Code, examples, browser demo: https://github.com/zeroweight-ai/ZeroTTS

  • Benchmark dataset: https://huggingface.co/datasets/zeroweight-ai/ZeroBench-TTS

  • Blogpost: https://zeroweight.ai/blog/zero-tts

Samples

Two-speaker conversation

Long-form narration

News read, code-switched English

Cross-lingual

Reference audio (Vietnamese)

Output (English)

Usage

pip install zerotts
from 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")

Streaming, with first audio in roughly 70 ms:

import queue

import numpy as np
import sounddevice as sd   # pip install sounddevice

TEXT = ("Đây là chế độ phát trực tuyến. Âm thanh được tạo ra và phát ngay lập tức, "
        "không cần chờ toàn bộ đoạn văn hoàn thành. Nhờ vậy, người nghe chỉ mất "
        "khoảng 70 mili giây là đã nghe thấy câu đầu tiên, ngay cả khi mô "
        "hình đang chạy trên CPU của một chiếc laptop bình thường.")

pending, tail = queue.Queue(), np.zeros(0, dtype="float32")

def feed(outdata, frames, _time, _status):
    global tail
    while len(tail) < frames and not pending.empty():
        tail = np.concatenate([tail, pending.get_nowait()])
    n = min(frames, len(tail))
    outdata[:n, 0] = tail[:n]
    outdata[n:] = 0
    tail = tail[n:]

with sd.OutputStream(samplerate=tts.sample_rate, channels=1,
                     dtype="float32", callback=feed):
    for chunk in tts.synthesize_stream(TEXT, voice="maichi"):
        pending.put(chunk.reshape(-1))   # chunk is (1, n) float32 at 48 kHz
    while not pending.empty() or len(tail):
        sd.sleep(50)                     # let the buffer drain before closing

Benchmarks

Measured on ZeroBench-TTS

Every system reads raw text — dates, numbers and acronyms verbatim, exactly as they appear in the wild, with no text frontend in front of the model.

ZeroTTSOmniVoiceXTTS-v2-vietnamseviXTTS
WER ↓1.03 %4.13 %16.42 %18.40 %
Naturalness (UTMOS) ↑2.912.762.432.35
Voice similarity (SSIM) ↑0.9360.9500.9400.935
Dead air (excess silence) ↓0.029 s0.340 s0.532 s0.233 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
Parameters ↓202 M775 M467 M467 M

4× fewer word errors than the next-best system, and the fastest of the four on CPU. The gap is much wider in latency than in throughput: the two XTTS fine-tunes also beat real time (0.71×) but need seconds to emit their first sample, while OmniVoice is 6× slower than real time. All three are sized and tuned for a GPU, and it shows.

Full comparison tables, per-subset breakdowns, and CPU speed methodology: docs/BENCHMARKS.md

Speed — CPU

RTF (realtime factor, wall-clock synthesis time ÷ output audio duration — lower is faster; below 1× is faster than real time) and time-to-first-audio, all measured on CPU, single request, 8 inference threads pinned to a dedicated core pool (no other synthesis running concurrently). Three Vietnamese samples — short (26 chars), medium (77 chars), long (227 chars) — each run 6 times with the first 2 (cold-cache) discarded; figures below are the mean of the remaining 4.

ZeroTTSOmniVoiceXTTS-v2-vietnamseviXTTS
RTF — short0.51×10.87×0.70×0.71×
RTF — medium0.47×4.82×0.70×0.70×
RTF — long0.53×2.67×0.71×0.78×
TTFA — short53 ms21.7 s4.02 s2.45 s
TTFA — medium66 ms28.9 s4.02 s3.72 s
TTFA — long89 ms52.3 s10.3 s9.22 s

ZeroTTS's time-to-first-audio comes from its real streaming path — first audio frame, not first full utterance. The three baselines have no working CPU streaming path, so their TTFA is the time to the complete utterance.

Voices, and voice cloning

A voice is a small array of speaker latents, (1, n_voice_queries, d_model), shipped as a .npz under voices/. That array is the entire speaker conditioning — no reference transcript, no audio prompt.

Voice cloning is not available in this release. Those latents come from a voice encoder that reads a reference clip, and that encoder is not published. This repository ships ready-to-use voices; it cannot create new ones from audio.

To get latents for your own speaker, see zeroweight.ai or get in touch.

Because a voice is just an array, latents obtained that way drop into voices//voice.npz and work with no code change.

Intended use and limitations

Built for Vietnamese. It handles English words embedded in Vietnamese text (code_switch), but it

Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.

How it works

How audio & music work

Audio or textinputAudio modelrecognise / synthesiseText or audiooutputSpeech-to-text turns audio into text; text-to-speech and music models turn text into audio.

Benchmarks

Reported results

As published on the model card: the maker's own numbers, not measured by AxForge.

TaskDatasetMetricScore
Zero-Shot Text-to-SpeechZeroBench-TTSWER (%) — raw text1.030
Zero-Shot Text-to-SpeechZeroBench-TTSUTMOSv2 naturalness MOS2.910
Zero-Shot Text-to-SpeechZeroBench-TTSSpeaker similarity (WavLM-SV cosine)0.936
Zero-Shot Text-to-SpeechZeroBench-TTSExcess silence (s)0.029
Zero-Shot TTS — monolingual VietnameseZeroBench-TTS (vietnamese)WER (%) — raw text0.160
Zero-Shot TTS — Vietnamese/English code-switchingZeroBench-TTS (code_switch)WER (%) — raw text0.970
Zero-Shot TTS — cross-lingual voice promptZeroBench-TTS (cross_lingual)WER (%) — raw text1.420
Zero-Shot TTS — acronyms, dates, numbersZeroBench-TTS (challenging)WER (%) — raw text1.750
© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms