Model reference · open weights
VieNeu-TTS-Nano is an open-weight audio or speech model from pnnbao-ump. 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 by | pnnbao-ump |
|---|---|
| Type | Audio & music |
| Task | Text→speech |
| Released | 2026-09-04 |
| Popularity | 3k downloads / month |
| Licence | Open weights |
About
[!WARNING] Preview release — still under active testing. VieNeu-TTS v3 Nano is an experimental, lightweight model. It has known shortcomings (see Limitations below), its quality is noticeably lower than v3 Turbo, and weights, voices and the API may still change between revisions. VieNeu-TTS v3 Turbo remains the default and recommended model. Reach for Nano only when Turbo is too slow on your hardware or when you are deploying on a phone / edge device.
VieNeu-TTS v3 Nano is a 48M-parameter flow-matching TTS model for Vietnamese, built for edge devices and weak CPUs: old laptops, mini PCs, ARM single-board computers and Android phones. It ships as a handful of small ONNX graphs (≈280 MB at runtime), runs torch-free on ONNX Runtime, loads in about 3 seconds and synthesizes at roughly 3× the speed of v3 Turbo on the same CPU.
It is a different architecture from v3 Turbo (a non-autoregressive flow model instead of an LLM-style autoregressive backbone), which is where the speed comes from — and also where the quality gap comes from. It supports 6 built-in preset voices, inline emotion cues ([cười], [thở dài], [hắng giọng]) and outputs 24 kHz audio.
The reference implementation is the vieneu Python SDK (v3.5.0) via Vieneu(mode="v3nano").
| v3 Nano (preview) | v3 Turbo (default) | |
|---|---|---|
| Architecture | Flow-matching (OT-CFM), 48M params | Autoregressive LLM backbone + neural codec |
| Runtime | ONNX Runtime, CPU only, torch-free | ONNX (CPU) / PyTorch (GPU, auto-batched) |
| Speed on CPU (RTF, lower = faster) | 0.22 (16 steps) · 0.11 (8 steps) | 0.62 (fp32) · 0.37 (int8) |
| Model load time | ~3 s | ~14–19 s |
| Download size | ~280 MB | larger |
| Sample rate | 24 kHz | 48 kHz |
| Vietnamese quality | Good, close to Turbo on plain text | Best |
| English / En–Vi code-switching | Weak — Vietnamese accent, less stable | Good |
| Preset voices | 11 | 23 |
| Voice cloning | ✅ from a 3–8 s clip (SDK ≥ 3.5.4) | ✅ instant cloning from a 3–8 s clip |
| Frame-level streaming | ❌ (chunk-by-chunk only) | ✅ ~300 ms first audio |
Emotion cues [cười] [thở dài] [hắng giọng] | ✅ | ✅ |
| Status | Experimental / preview | Stable, recommended |
Choose Nano when: you need speed on a weak CPU, you are deploying on Android / ARM boards, or model load time and download size matter more than fidelity. Choose Turbo when: you want the best quality, English or bilingual text, the most faithful cloning, 48 kHz output, or real-time streaming — i.e. almost every other case.
The VieNeu-TTS v3 Nano architecture:
cfg=3, 16 Euler steps).{speaker_emb, style} so nothing needs to be encoded at runtime.Tác giả: Phạm Nguyễn Ngọc Bảo
vieneu)Nano needs only the minimal, torch-free install:
pip install vieneu
from vieneu import Vieneu
from time import time
# v3 Turbo is the default: Vieneu(). Nano must be requested explicitly.
tts = Vieneu(mode="v3nano") # ONNX, CPU, torch-free, ~3 s to load
text = "Xin chào các bạn, mình là giọng đọc của VieNeu Nano. [cười] Mình nhẹ hơn nhiều so với bản Turbo, nên chạy được cả trên những máy yếu."
# 1. Default voice (Adam) — 24 kHz
start = time()
audio = tts.infer(text)
tts.save(audio, "output_nano.wav")
print(f"{len(audio) / tts.sample_rate:.1f}s of audio in {time() - start:.2f}s")
# 2. Built-in voices by name
for label, voice_id in tts.list_preset_voices():
print(label, voice_id)
audio = tts.infer("Mình là Ái Hân nè!", voice="Ái Hân")
# 3. Emotion / non-verbal cues — EXPERIMENTAL: [cười] [thở dài] [hắng giọng]
audio = tts.infer("Nghe hay quá đi [cười]. Để mình nói tiếp [hắng giọng].", voice="Đức Trí")
# 4. Faster on very slow CPUs: 8 Euler steps + sway sampling (~2× faster, slightly rougher)
audio = tts.infer("Bản nhanh cho máy rất yếu.", voice="Xuân Tiên", steps=8, sway=-1)
Knobs: steps (Euler steps, default 16; 8 ≈ 2× faster, pair with sway=-1), cfg (classifier-free guidance, default 3.0; cfg=0 halves compute but hurts intelligibility), speed, seed, threads (ONNX Runtime threads). infer_stream() yields one finished sentence-chunk at a time; infer_batch() runs sequentially.
[!NOTE] **Voice cloning (SDK ≥ 3.5.
From the published model card. Full card on the HuggingFace links in the sidebar.
How it works
Using it via the API
Once AxForge deploys vieneu-tts-nano for you, it answers on the OpenAI-compatible API — the same base URL and keys as every other model. (vieneu-tts-nano 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="vieneu-tts-nano" -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.