Model reference · open weights

ZeroTTS

Available as managed deployment Audio zeroweight-ai Text→speech 1 variants 875 dl/mo

ZeroTTS is an open-weight audio or speech model from zeroweight-ai. AxForge deploys and operates it for you on dedicated EU-owned hardware — with the licence handled where one is required.

Available as managed deployment — configured and operated for you on dedicated EU hardware, quoted per deployment.

What it is

Released byzeroweight-ai
TypeAudio & music
TaskText→speech
Runs withonnx
Released2026-08-15
Popularity875 downloads / month
LicenceOpen weights

About

What ZeroTTS is

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).

Read the full model card
  • 🗣️ 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
    WER1.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, CPU0.50×6.12×0.71×0.73×
    Time to first audio, CPU~70 ms~34 s~6.1 s~5.1 s
    Parameters202 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

    From the published model card. Full card on the HuggingFace links in the sidebar.

    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

    Using it via the API

    Call it like any OpenAI endpoint

    Once AxForge deploys zerotts for you, it answers on the OpenAI-compatible API — the same base URL and keys as every other model. (zerotts below is illustrative; you get the exact model name on deployment.)

    $ curl -sS https://api.axforge.ai/v1/audio/transcriptions \
      -H "Authorization: Bearer $AXFORGE_API_KEY" \
      -F model="zerotts" -F file=@audio.mp3

    Create an account — your API key is available in the console. 3M free tokens every 30 days with every new account.

    © 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms