ZeroTTS / README.md
zeroweightai's picture
Update README (intro bullets, trimmed benchmark section, voice example) and banner image
aba7690 verified
|
Raw
History Blame
6.98 kB
metadata
license: mit
language:
  - vi
library_name: onnx
pipeline_tag: text-to-speech
tags:
  - text-to-speech
  - tts
  - vietnamese
  - onnx
  - onnxruntime
  - zero-shot
  - speech-synthesis
  - voice-cloning
  - vietnamese-tts
  - tieng-viet
metrics:
  - wer
model-index:
  - name: ZeroTTS
    results:
      - task:
          type: text-to-speech
          name: Zero-Shot Text-to-Speech
        dataset:
          type: zeroweight-ai/ZeroBench-TTS
          name: ZeroBench-TTS
          split: test
        metrics:
          - type: wer
            value: 0.56
            name: WER (%)  normalized text
          - type: utmos
            value: 2.91
            name: UTMOSv2 naturalness MOS
          - type: speaker_similarity
            value: 0.936
            name: Speaker similarity (WavLM-SV cosine)
          - type: excess_silence
            value: 0.029
            name: Excess silence (s)
      - task:
          type: text-to-speech
          name: Zero-Shot TTS  monolingual Vietnamese
        dataset:
          type: zeroweight-ai/ZeroBench-TTS
          name: ZeroBench-TTS (vietnamese)
          config: vietnamese
          split: test
        metrics:
          - type: wer
            value: 0.21
            name: WER (%)  normalized text
      - task:
          type: text-to-speech
          name: Zero-Shot TTS  Vietnamese/English code-switching
        dataset:
          type: zeroweight-ai/ZeroBench-TTS
          name: ZeroBench-TTS (code_switch)
          config: code_switch
          split: test
        metrics:
          - type: wer
            value: 0.95
            name: WER (%)  normalized text
      - task:
          type: text-to-speech
          name: Zero-Shot TTS  cross-lingual voice prompt
        dataset:
          type: zeroweight-ai/ZeroBench-TTS
          name: ZeroBench-TTS (cross_lingual)
          config: cross_lingual
          split: test
        metrics:
          - type: wer
            value: 0.38
            name: WER (%)  normalized text
      - task:
          type: text-to-speech
          name: Zero-Shot TTS  acronyms, dates, numbers
        dataset:
          type: zeroweight-ai/ZeroBench-TTS
          name: ZeroBench-TTS (challenging)
          config: challenging
          split: test
        metrics:
          - type: wer
            value: 0.61
            name: WER (%)  normalized text
ZeroTTS — Vietnamese zero-shot text-to-speech

ZeroTTS

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 — 13× fewer word errors than the next open model, and it runs faster than real time on a laptop CPU.

  • 🎯 Ultra-natural — 2.91 UTMOS, ~0.5 MOS above every other open Vietnamese system, with near-zero dead air (0.029 s vs 0.23–0.53 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 a built-in normalizer that reads 31/12/2025 and 1.250 tỷ the way a person would.

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

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

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:

for chunk in tts.synthesize_stream("Một đoạn văn bản dài hơn…", voice="maichi"):
    play(chunk)   # (1, n) float32 at 48 kHz

Benchmarks

Measured on ZeroBench-TTS against OmniVoice, XTTS-v2-vietnamse and viXTTS, on normalized text (dates, numbers and acronyms already spoken out): 0.56 % WER (4× fewer errors than the next-best system, median 0.00 % on all four subsets), 2.91 UTMOS, and 0.029 s of dead air. On CPU it runs ~2× faster than real time (RTF 0.5×) with first audio in ~70 ms of streaming.

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

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/<name>/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 is not an English TTS system and is not evaluated as one.

Do not use it to impersonate a real person, to generate speech attributed to someone without their consent, or to produce audio intended to deceive. The shipped voices are for evaluation and demos.

Synthetic speech should be disclosed as synthetic wherever a listener might reasonably assume otherwise.

Credits

Speech codec: MOSS-Audio-Tokenizer-Nano by the OpenMOSS team, Apache-2.0. Its ONNX decoder graphs are redistributed under onnx/codec/ so ZeroTTS has no external runtime dependency; the encoder is not included. See onnx/codec/LICENSE-Apache-2.0.txt.

@misc{gong2026mossaudiotokenizerscalingaudiotokenizers,
  title={MOSS-Audio-Tokenizer: Scaling Audio Tokenizers for Future Audio Foundation Models},
  author={Yitian Gong and Kuangwei Chen and Zhaoye Fei and Xiaogui Yang and Ke Chen
          and Yang Wang and Kexin Huang and Mingshu Chen and Ruixiao Li
          and Qingyuan Cheng and Shimin Li and Xipeng Qiu},
  year={2026}, eprint={2602.10934}, archivePrefix={arXiv}, primaryClass={cs.SD}
}

License

ZeroTTS weights and code: MIT.

The ZeroBench-TTS dataset is CC-BY-NC-4.0 because it redistributes reference audio from VIVOS, viVoice, phoaudiobook and Emilia. That license applies to the benchmark dataset only — not to these weights.