KorvaTTS — Vietnamese-first, on-device text-to-speech
KorvaTTS is an open-source text-to-speech system focused on Vietnamese with natural code-switching (Vietnamese sentences that contain English words, brand names, tech terms). It runs entirely on-device through ONNX Runtime: no GPU required, no API calls, 44.1 kHz output.
The model is our own re-implementation of the 99M-parameter Supertonic 3 architecture (flow-matching TTS), trained from scratch on Vietnamese data, with a vocoder based on BlueCodec. Upstream Supertonic is being archived by its authors; KorvaTTS continues the line with a Vietnamese focus and an open roadmap toward voice cloning and training.
Highlights
- 🇻🇳 Vietnamese-first — trained on Vietnamese audiobook speech plus a private code-switching set
- 🔀 Code-switching — English words inside Vietnamese sentences are read naturally
- ⚡ Fast on CPU — real-time factor well below 1 on a laptop CPU; GPU optional
- 🔊 44.1 kHz WAV output, no external upsampler
- 🧩 Drop-in compatible with Supertonic 3 runtimes (see Compatibility)
- 🪪 Apache-2.0 for both code and weights
Voices
10 bundled voices — 5 female, 5 male. Listen to every voice on the Hugging Face model card.
| Female | Male |
|---|---|
bao_kim — Bảo Kim |
gia_bao — Gia Bảo |
khanh_vy — Khánh Vy |
hoang_nam — Hoàng Nam |
ngoc_huyen — Ngọc Huyền |
huu_dat — Hữu Đạt |
phuong_linh — Phương Linh |
quang_huy — Quang Huy |
quynh_nhu — Quỳnh Như |
thanh_phong — Thanh Phong |
Installation
pip install korvatts
Requires Python ≥ 3.10. For GPU inference install onnxruntime-gpu (CUDA) instead of onnxruntime.
Quick start
from korvatts import TTS
tts = TTS() # first run downloads weights + voices from Hugging Face
print(tts.list_voices())
wav, duration = tts.synthesize(
"Hôm nay team mình sẽ demo tính năng text-to-speech mới.",
voice="khanh_vy",
lang="vi",
total_steps=32, # default; best quality. Lower (8-16) for faster synthesis
speed=1.05, # default; 0.5 (slow) .. 2.0 (fast)
)
tts.save_audio(wav, "output.wav")
Command line:
korvatts voices
korvatts synth "Xin chào, đây là KorvaTTS." -v khanh_vy -o hello.wav
Use local assets instead of downloading: pass TTS(assets_dir="path/to/assets") or set KORVATTS_ASSETS_DIR. The directory must contain onnx/ and voice_styles/.
Language support
- Primary: Vietnamese (
lang="vi"), including English words embedded in Vietnamese text. - English (
lang="en"): part of the training data is English, so plain English works, but we do not guarantee English quality matches — or exceeds — the original Supertonic 3 English voices. Vietnamese is what this model is built for. - Other languages: the Supertonic 3 tag set (31 languages) is still accepted by the text encoder, but those languages were not in the training data; quality is untested.
Compatibility with Supertonic
The phase-1 weights keep the exact ONNX graph signatures and voice-style JSON format of Supertonic 3. You can copy the KorvaTTS onnx/ and voice_styles/ folders into any Supertonic 3 runtime (Python, Node.js, browser/WebGPU, Rust, C++, Swift, Flutter, …) and they will work unchanged.
This compatibility is intentional for phases 1–2. Phase 3 will change the architecture and will not be loadable by Supertonic runtimes. Version tags on Hugging Face will make it clear which checkpoints are compatible.
Roadmap
| Phase | Scope | Status |
|---|---|---|
| 1. ONNX inference | Python package, CLI, published weights + voice styles on Hugging Face | ✅ this release |
| 2. Voice cloning + training | Reference-audio → voice style encoder, PyTorch training / fine-tuning recipes, dataset tooling | 🔜 planned |
| 3. Architecture improvements | Original changes to the TTS + cloning architecture for better Vietnamese prosody and cloning fidelity. Breaks Supertonic compatibility. | 🧭 later |
Phase 2 starts once the phase-1 release has a healthy community around it — our goal is 1,000 GitHub stars ⭐ . Star the repo to move the roadmap forward, and join our Discord or watch the issues tab for progress.
Training data
- PhoAudiobook — 941 hours of curated Vietnamese audiobook speech, introduced in Zero-Shot Text-to-Speech for Vietnamese (ACL 2025).
- A private, author-collected Vietnamese/English code-switching set used to improve mixed-language reading. This set is not released.
Community
Join the KorvaTTS Discord to ask questions, share what you build, request voices, and follow phase-2 development: discord.gg/cX5rmsRcsg. Bug reports and feature requests are welcome on GitHub Issues.
Support the project
KorvaTTS is free and open source. Training runs and voice recordings cost real money — if this project is useful to you, a small donation goes directly into the voice cloning and training work in phase 2. Scan the VietQR code below with any Vietnamese banking app (international options coming later).
Contributing
Issues and pull requests are welcome. Run the checks locally:
pip install -e ".[dev]"
ruff check .
pytest # model tests auto-skip unless ./assets exists
Licenses
| Component | License |
|---|---|
| Source code in this repository | Apache-2.0 |
| Model weights & voice styles | Apache-2.0 — trained from scratch, not derived from Supertonic weights |
Portions of the inference code are adapted from Supertonic (MIT, © Supertone Inc.); the vocoder follows BlueCodec from BlueTTS (MIT). See NOTICE. KorvaTTS is not affiliated with Supertone Inc.
Acknowledgements & citation
KorvaTTS builds on the work of others. If you use it, please also cite them:
- Supertonic / SupertonicTTS — architecture and reference implementation. github.com/supertone-inc/supertonic
- BlueTTS / BlueCodec — vocoder design. github.com/maxmelichov/BlueTTS
- PhoAudiobook — Vietnamese training corpus. huggingface.co/datasets/thivux/phoaudiobook
@misc{korvatts2026,
title = {KorvaTTS: Vietnamese-first on-device text-to-speech},
author = {dogenthq},
year = {2026},
howpublished = {\url{https://github.com/dogenthq/KorvaTTS}}
}
@article{kim2025supertonictts,
title = {SupertonicTTS: Towards Highly Efficient and Streamlined Text-to-Speech System},
author = {Kim, Hyeongju and Yang, Jinhyeok and Yu, Yechan and Ji, Seunghun and Morton, Jacob and Bous, Frederik and Byun, Joon and Lee, Juheon},
journal = {arXiv preprint arXiv:2503.23108},
year = {2025}
}
@misc{melichov2025bluetts,
title = {BlueTTS},
author = {Melichov, Max},
year = {2025},
howpublished = {\url{https://github.com/maxmelichov/BlueTTS}}
}
@inproceedings{vu2025phoaudiobook,
title = {Zero-Shot Text-to-Speech for Vietnamese},
author = {Vu, Thi and Nguyen, Linh The and Nguyen, Dat Quoc},
booktitle = {Proceedings of the 63rd Annual Meeting of the Association for Computational Linguistics (Short Papers)},
year = {2025}
}
Metadata
Release files for korvatts 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| korvatts-0.1.3.tar.gz | 26.6 kB | With provenance | Details for korvatts-0.1.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| korvatts-0.1.3-py3-none-any.whl | Python 3 | none | any | Details for korvatts-0.1.3-py3-none-any.whl |
Total release size: 49.4 kB
Release files / korvatts-0.1.3.tar.gz
| Download URL | korvatts-0.1.3.tar.gz |
|---|---|
| Size | 26.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3bf2866c128ea4a9f8b290eb3c1da3ae2a17eeb819615f02f509f90be84e5fd3
|
|
BLAKE2b-256 checksum How to use checksums |
e23bdc777812488e54664e7789f6d306872ee5d1e3bf954c967e879101d3c59b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency logRelease files / korvatts-0.1.3-py3-none-any.whl
| Download URL | korvatts-0.1.3-py3-none-any.whl |
|---|---|
| Size | 22.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
614f72de915f79f92261aa2e5373048a6beb1624706147acf1a7d3ff0c62a645
|
|
BLAKE2b-256 checksum How to use checksums |
57523a6e78c36ca25abedaaf0b991cc921c99a1009c9bb8cf7b297190627a077
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency logSecurity for korvatts 0.1.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for korvatts-0.1.3.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.