★ TTS tiếng Việt · mã nguồn mở

Giọng đọc
tiếng Việt,
nhỏ mà rõ.

Ngọc Huyền small 6,1M tham số chạy ONNX ngay trên CPU: 24 kHz, tự ngắt nghỉ, đọc đúng số, ngày giờ, viết tắt và từ điển riêng. Nghe thử trong trình duyệt rồi tải app cho máy của bạn.

  • 6,1M tham số acoustic
  • 24 kHz WAV mono
  • ~0,03 RTF trên CPU
  • 8 nền tảng
Nghe thử nhanh N0 · Q · 6,1M
0/3000Tối đa 3000 ký tự
Tuỳ chọn nâng cao
Nghe mẫu có sẵn (không cần gọi API)

Không lưu văn bản hay audio · 6 lượt/phút mỗi IP · demo nghiên cứu, phi thương mại.

Vì sao ViFastTts

Đủ chuẩn để đọc tiếng Việt.
Đủ nhẹ để chạy mọi nơi.

Không phải model đa ngữ gắn thêm tiếng Việt: frontend được thiết kế cho âm tiết Việt, model non-autoregressive chạy tất định và xuất ONNX để dùng lại trên desktop, mobile, extension hay server.

Chuẩn âm tiết Việt

25 âm đầu · 2 âm đệm · 15 âm chính · 11 âm cuối · 6 thanh → 264 vần. Parser vét cạn 49.104 tổ hợp, 0 lỗi; 39K từ thật parse 6.617/6.633.

Nhỏ và nhanh trên CPU

Acoustic 6,1M + vocoder 13,5M. ONNX FP32, RTF ~0,03 trên VPS CPU; không cần GPU, không cần PyTorch khi dùng ONNX.

Chạy offline

Desktop, extension, Android và iOS đóng gói model + ONNX Runtime. Đọc không cần mạng và không gửi văn bản ra ngoài.

Đọc đúng từ khó

Từ điển hơn 200 mục, quy tắc STEM (hoá học, toán, lý, LaTeX), đánh vần OOV và bảng đọc riêng của bạn. Hỗ trợ cụm/domain như khongdich.com.

Tất định, dễ tích hợp

Cùng một câu cho cùng một kết quả. REST /api/tts, stream NDJSON, CLI server, Python engine và ONNX cho mọi stack.

Một model, mọi nền tảng

Windows, macOS, Linux, Android, iOS Simulator, Chrome/Edge, CLI/server và web tĩnh. Cùng model, cùng cách đọc, cùng bộ test.

Kiến trúc

Văn bản → âm tiết →
mel → WAV 24 kHz.

Mỗi âm tiết thành 7 ID (âm đầu, đệm, chính, cuối, thanh điệu, ranh giới, dấu câu). Model dự đoán mel + thời lượng + F0 trong một lượt, vocoder dựng sóng. Không tự hồi quy, không lấy mẫu ngẫu nhiên.

  • 2.942 test pass / 24 skip; ruff sạch, parser audit 0 lỗi.
  • Holdout: mel L1 4,0 dB · duration MAE 1,37 frame.
  • ONNX opset 18, batch và độ dài động, FP32/FP16/INT8.
pipeline.txt
# văn bản tiếng Việt
"Sáng nay trời đẹp"
        ↓  frontend
7 ID / âm tiết  ·  4 âm tiết
        ↓  acoustic 6,1M
mel + thời lượng + f0/vuv/energy
        ↓  vocoder 13,5M
WAV · 24 kHz · mono · PCM16
Tải về

Chọn nền tảng.
Cài trong vài phút.

Bản portable v0.3.5, model FP32 nằm sẵn trong gói. Không cần Python, Node hay GPU cho các app. Mỗi tab có file tải, yêu cầu hệ thống, các bước cài và xử lý sự cố.

Windows 10/11 · x64

Bản desktop đầy đủ: giao diện, server nội bộ, model và ONNX Runtime đi kèm.

Các bước cài

  1. Tải và giải nénChuột phải file ZIP → Extract All. Đừng chạy trực tiếp trong file ZIP.
  2. Chạy ứng dụngMở thư mục vừa giải nén → chạy vifasttts-desktop.exe.
  3. Vượt SmartScreenBản chưa ký số: bấm More info → Run anyway.
  4. Đọc thửNhập câu → bấm Đọc. Model, vocoder và ONNX Runtime đã nằm trong gói; không cần tải thêm.
  5. Bật server nội bộ (tuỳ chọn)Vào Cài đặt → Bật server để dùng cho extension/điện thoại tại http://127.0.0.1:8000.
Xử lý sự cố Windows

SmartScreen/Defender cảnh báo: bản build chưa ký số nên có thể bị cảnh báo; chọn More info → Run anyway. Chỉ tải từ GitHub Release chính thức.

Lỗi thiếu DLL: cài Microsoft Visual C++ Redistributable 2015–2022 x64 rồi mở lại.

Không mở được file: kiểm tra đã giải nén toàn bộ ZIP, không chạy từ file nén; thử chạy bằng quyền user thường trước.

Không kết nối được từ điện thoại: bật Cho phép LAN trên desktop, dùng IP LAN (ví dụ http://192.168.1.100:8000) và mở firewall cho port 8000.

Kiểm tra SHA256 trước khi cài (tuỳ chọn nhưng nên làm)

Tải SHA256SUMS.txt cùng release, đặt cạnh file vừa tải. macOS/Linux:

grep 'vifasttts-desktop-windows-x64.zip' SHA256SUMS.txt | shasum -a 256 -c -

Windows PowerShell:

Get-FileHash .\vifasttts-desktop-windows-x64.zip -Algorithm SHA256

So hash với dòng tương ứng trong SHA256SUMS.txt. Không khớp → tải lại; không chạy file lạ.

Mô hình

Một giọng. Hai định dạng bundle.

Model N0 Ngọc Huyền Q-init: acoustic small 6,1M, 24 kHz, ONNX FP32. Dùng bundle để đổi giọng hoặc tải riêng cho app/CLI; desktop/extension/mobile đã có model sẵn.

.vfa — acoustic-only28 MB

Chỉ chứa acoustic; cần vocoder ONNX đi kèm. Nhẹ, phù hợp khi đã có vocoder trong app/server.

.vfts — full bundle76 MB

Tự chứa vocoder + frontend; nạp một file là chạy. Phù hợp chia sẻ, mobile và web.

Thông tin modelN0

arch=v2_slot5 · vocab_version=vi-q25-v1 · 24 kHz · một giọng nữ Bắc. License model/dataset CC BY-NC 4.0, code MIT.

API & Python

Gọi model bằng
một request.

Demo VPS đã mở API công khai để thử. Muốn chạy riêng, dùng vifasttts server hoặc quickstart Python — cùng engine ONNX, không cần torch.

  • POST
    /api/tts

    Trả WAV 24 kHz. Nhận text, speed, alpha, dialect, overrides.

  • POST
    /api/tts/stream

    NDJSON: units → audio PCM16 → done; dùng cho phát ngay.

  • GET
    /api/config

    Giới hạn, defaults và capabilities để UI tự cấu hình.

  • GET
    /api/overrides

    Từ điển có sẵn, quy tắc đã duyệt và ví dụ STEM.

  • POST
    /api/feedback

    Góp ý/báo lỗi; nội dung chỉ admin xem.

  • GET
    /healthz

    Trạng thái model, arch, vocab hash, alpha.

Demo công khai: tối đa 3000 ký tự, 6 lượt/phút/IP, không lưu văn bản hay audio. Hợp đồng đầy đủ: docs/API_CONTRACT.md ↗

curl · WAV
# tạo file WAV từ câu tiếng Việt
curl -s https://vifasttts.hoctuthien.com/api/tts \
  -H 'content-type: application/json' \
  -d '{"text":"Xin chào, đây là ViFastTts.","speed":1.0}' \
  -o out.wav
python · local server
import requests

r = requests.post(
    "http://127.0.0.1:8000/api/tts",
    json={"text": "Xin chào", "speed": 1.0},
    timeout=120,
)
r.raise_for_status()
open("out.wav", "wb").write(r.content)

Quickstart demo Python

Cần Python ≥ 3.11; script tự tải ONNX (kiểm sha256), tạo venv và chạy web ở cổng 8090.

git clone https://github.com/dvchd/ViFastTts.git
cd ViFastTts
./scripts/run_ngochuyen_demo.sh

Windows PowerShell:

powershell -ExecutionPolicy Bypass -File .\scripts\run_ngochuyen_demo.ps1

CLI ONNX (không cần torch)

Cài package và gọi trực tiếp bằng ONNX Runtime + numpy.

cd ViFastTts
pip install -e ".[onnx]"
vifasttts synthesize-onnx \
  --acoustic acoustic.onnx \
  --vocoder vocoder.onnx \
  --text "Xin chào" \
  --output out.wav

Tài liệu: PYTHON_ENGINE.md ↗

Sản phẩm

Hai sản phẩm,
một hệ sinh thái.

Cùng chạy local-first, cùng mục tiêu tiếng Việt nhẹ và nhanh: một bên đọc thành tiếng, một bên gõ thành chữ.

Đang xem · TTS

ViFastTts

Giọng đọc tiếng Việt non-autoregressive, ONNX CPU, 24 kHz.

  • Model Ngọc Huyền small 6,1M tham số
  • Desktop, extension, Android, iOS Simulator
  • API REST/stream, CLI server, Python, ONNX
Cùng hệ sinh thái · Bộ gõ

ViFastKey

Bộ gõ Telex, Simple Telex, VNI và VIQR trên lõi Rust nhỏ, chạy local.

  • WASM gõ thử ngay trong trình duyệt
  • C ABI cho IMK/TSF/Fcitx5/IBus
  • API Python, app desktop và mobile
Hỏi đáp

Những câu thường gặp.

Không thấy câu trả lời? Gửi góp ý ở phần Góp ý — nội dung chỉ admin xem.

Dùng thương mại được không?

Code repo là MIT, nhưng model mẫu và dataset ngochuyen_voice là CC BY-NC 4.0 — chỉ dùng nghiên cứu/phi thương mại. Không dùng để giả giọng, lừa đảo hoặc bán lại khi chưa có quyền riêng.

Cần GPU hay Python không?

Không, với app desktop, extension và mobile: model + ONNX Runtime đã đóng gói. Python chỉ cần khi chạy quickstart/dev hoặc train; ONNX chạy CPU là đủ cho demo và phần lớn nhu cầu.

Vì sao chỉ có một giọng?

Mỗi checkpoint là một người nói, một phương ngữ — không cần speaker_id hay audio mẫu. Muốn giọng khác, train checkpoint mới theo docs/TRAINING_N0.md rồi export ONNX.

macOS Intel có bản không?

Bản phát hành hiện chỉ có arm64 (Apple Silicon). Máy Intel có thể dùng web demo, Python/ONNX hoặc build từ source; xem docs/INSTALL.md.

App có trên App Store / CH Play chưa?

Chưa. Android là APK debug (cài ngoài store); iOS chỉ chạy Simulator, chưa ký Apple Developer. Desktop cũng chưa ký số nên có cảnh báo SmartScreen/Gatekeeper.

Demo có lưu văn bản hay audio không?

Không lưu văn bản hay audio. Server chỉ ghi thống kê ẩn danh (số ký tự, thời lượng, thời gian xử lý, hash visitor), không lưu IP/text; góp ý chỉ admin xem khi đã đặt mật khẩu.

RTF ~0,03 nghĩa là gì?

RTF = thời gian xử lý chia cho thời lượng audio; nhỏ hơn 1 là nhanh hơn thời gian thực. Con số ~0,03 đo trên VPS CPU với ONNX; máy yếu hơn sẽ chậm hơn, máy mạnh hơn có thể nhanh hơn.

Làm sao báo lỗi hoặc góp ý?

Dùng form Góp ý ngay trên trang này. Nếu là lỗi cài đặt, kèm hệ điều hành, file đã tải và thông báo lỗi để dễ tái hiện.

Thống kê

Demo đang được dùng thế nào.

Số liệu ẩn danh, tự làm mới khi tải trang. Lượt tải chỉ đếm lúc bấm nút trên landing, không phải số file đã tải xong.

— audio đã tạo
— lượt bấm tải
— người dùng ẩn danh
— góp ý / báo lỗi

Lượt bấm tải theo nền tảng

Đang tải…

Đếm ở nút tải trên landing và trang demo. Người dùng có thể bấm rồi huỷ, nên đây là tín hiệu nhu cầu, không phải số lượt cài hoàn tất.