Vietnamese Text to Speech & Voice Cloning
Pricing
Pay per usage
Vietnamese Text to Speech & Voice Cloning
Vietnamese text to speech at studio quality: 23 built-in voices (North, Central, South accents, male and female), voice cloning from a 3-8 second clip, English-Vietnamese mixed text and emotion cues. MP3, WAV and Opus output. No rental fee - you pay Apify compute only.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Andrew Babo
Maintained by CommunityActor stats
0
Bookmarked
60
Total users
18
Monthly active users
3 days ago
Last modified
Categories
Share
Vietnamese Text to Speech & Voice Cloning (VieNeu-TTS v3 Turbo)
Powered by the open-source VieNeu-TTS model by Phạm Nguyễn Ngọc Bảo (@pnnbao97, Apache-2.0). Andrew Babo only packages and speed-optimises it for Apify — see Credits & source. No rental or usage fee: you pay Apify compute only.
Turn Vietnamese text into natural, studio-clean 48 kHz speech — with 23 built-in Vietnamese voices (North / Central / South accents, male & female), zero-shot voice cloning from a 3–8 second clip, English–Vietnamese code-switching, and inline emotion cues. Runs on CPU only, so it is cheap to run at scale on Apify.
Keywords: Vietnamese text to speech, Vietnamese TTS API, giọng đọc tiếng Việt AI, AI voice generator Vietnamese, voice cloning tiếng Việt, text to speech MP3, TTS for YouTube/TikTok voiceover.
What you can build
- YouTube, TikTok and Reels Vietnamese voiceovers
- Audiobooks and story narration (
doc_truyenstyle voices) - News reading and e-learning narration (
tin_tucstyle voices) - IVR prompts, notifications and accessibility read-aloud
- Cloned brand/personal voice for repeatable content
Quick start
{"text": "Xin chào, đây là giọng đọc tiếng Việt tự nhiên do AI tạo ra.","voice": "Adam","format": "mp3"}
Run it from the API:
curl -X POST \"https://api.apify.com/v2/acts/andrew_babo~vieneu-tts/runs?token=$APIFY_TOKEN&waitForFinish=180" \-H "Content-Type: application/json" \-d '{"text":"Xin chào, đây là giọng nói tiếng Việt.","voice":"Trúc Ly","format":"mp3"}'
The audio file lands in the run key-value store (audio.wav / audio.mp3 / audio.ogg) and one dataset row carries audio_url plus timing metrics.
Voice IDs (23 built-in Vietnamese voices)
Pass the exact name in the voice field (Vietnamese diacritics included). Default: Adam.
| Voice ID | Gender | Accent (region) | Style |
|---|---|---|---|
Adam (default) | Male | South (Nam) | Natural — tự nhiên |
Phạm Tuyên | Male | North (Bắc) | Natural — tự nhiên |
Xuân Vĩnh | Male | North (Bắc) | Natural — tự nhiên |
Mạnh Dũng | Male | North (Bắc) | Natural — tự nhiên |
Minh Quân | Male | North (Bắc) | Natural — tự nhiên |
Quang Sơn | Male | Central (Trung) | Natural — tự nhiên |
Minh Đức | Male | North (Bắc) | News — tin tức |
Minh Triết | Male | South (Nam) | News — tin tức |
Thanh Bình | Male | North (Bắc) | Storytelling — kể chuyện |
Anh Khôi | Male | North (Bắc) | Storytelling — kể chuyện |
Thái Sơn | Male | South (Nam) | Storytelling — kể chuyện |
Đức Trí | Male | South (Nam) | Audiobook — đọc truyện |
Trúc Ly | Female | North (Bắc) | Natural — tự nhiên |
Đoan Trang | Female | North (Bắc) | Natural — tự nhiên |
Ngọc Huyền | Female | North (Bắc) | Natural — tự nhiên |
Ngọc Trân | Female | Central (Trung) | Natural — tự nhiên |
Mai Anh | Female | North (Bắc) | News — tin tức |
Thùy Dung | Female | South (Nam) | News — tin tức |
Ngọc Linh | Female | North (Bắc) | Storytelling — kể chuyện |
Thục Đoan | Female | South (Nam) | Storytelling — kể chuyện |
Quỳnh Anh | Female | North (Bắc) | Audiobook — đọc truyện |
Mỹ Duyên | Female | South (Nam) | Audiobook — đọc truyện |
Kim Thanh | Female | South (Nam) | Audiobook — đọc truyện |
Picking a voice:
- Ads / social videos:
Adam,Trúc Ly,Thùy Dung - News / corporate:
Minh Đức,Mai Anh,Minh Triết - Story & audiobook:
Thái Sơn,Ngọc Linh,Quỳnh Anh,Kim Thanh - Central accent:
Quang Sơn,Ngọc Trân
If a voice name is misspelled the run fails with the full list of valid IDs.
Voice cloning (zero-shot, no training)
Give a public URL to a clean reference clip and the model speaks any Vietnamese text in that voice. Cloning overrides voice.
{"text": "Đây là giọng đã được nhân bản từ đoạn ghi âm mẫu.","ref_audio_url": "https://example.com/reference.wav","denoise": true,"format": "wav"}
Reference clip checklist:
| Requirement | Recommendation |
|---|---|
| Length | 3–8 seconds (6 s is the sweet spot) |
| Content | One speaker, natural sentences, no music or background voices |
| Format | WAV or MP3, mono, 16 kHz or higher, no heavy compression |
| Delivery | Record in the emotion you want — emotion is transferred from the clip, not from a parameter |
| Hosting | Direct-download URL (S3, key-value store, CDN). Google Drive share links do not work. |
| Consent | Only clone voices you own or have written permission to use |
denoise: true (default) cleans hiss and room noise before enrollment. Turn it off if your clip is already studio-quality and sounds over-processed after cloning.
Cloning tips:
- Same clip = consistent voice across many runs, so store it once and reuse the URL.
- A clip recorded cheerfully clones a cheerful voice; a calm clip clones a calm voice.
- Clips shorter than ~3 s or longer than ~10 s reduce similarity.
Emotion cues (Vietnamese, exactly 3 supported)
Write cues inline in the text:
| Cue | Also accepted | Effect |
|---|---|---|
[cười] | [cuoi], [laugh], [chuckle], [haha] | Laughter |
[thở dài] | [tho dai], [sigh], [breath] | Sigh |
[hắng giọng] | [hang giong], [clear throat], [cough] | Throat clear |
Example:
Mình không tin nổi chuyện đó [cười]. Thôi kể tiếp nhé [hắng giọng].
Any other bracketed tag ([buồn], [khóc], [hét], …) is not an emotion. The actor strips unknown tags and reports them in the warnings field of the dataset row instead of reading them aloud.
Tone presets and inline directives
tone sets delivery style (it fills temperature / speed only when you did not set them yourself):
tone | Feel |
|---|---|
tự nhiên | Natural (default) |
trầm | Calm, slower |
nhẹ nhàng | Gentle |
kể chuyện | Storytelling |
vui | Cheerful |
hào hứng | Excited |
trang trọng | Formal / news |
Inline directives inside text (sticky until the next marker):
[tone: vui] Chào cả nhà, tin vui đây! [pause: 1s] [tone: trầm] Nhưng có một điều cần lưu ý.
[pause] inserts 0.5 s; [pause: 1s] inserts a custom silence (0.05–10 s).
Input reference
| Field | Type | Default | Description |
|---|---|---|---|
text | string | required | Vietnamese or Vi/En mixed text, up to 10,000 characters. |
voice | enum | Adam | One of the 23 voice IDs above. |
ref_audio_url | string | — | Reference clip URL for voice cloning; overrides voice. |
denoise | boolean | true | Clean the reference clip before enrollment. |
tone | enum | tự nhiên | Delivery preset (table above). |
expressiveness | enum | medium | low / medium / high. Overridden by temperature. |
temperature | number | 0.8 | 0.1–1.5. Higher = more expressive, less stable. |
speed | string | 1.0 | 1.2 ≈ 20% faster. |
pitch_preserve | boolean | true | Change speed without the chipmunk effect. |
precision | enum | auto | fp32 (cleanest) / int8 (fastest) / auto follows quality. |
quality | enum | smooth | smooth = seamless single pass for short text; fast = parallel, slightly faster. |
single_pass | boolean | false | Force one engine to render the whole text. |
trim_silence | boolean | auto | Trim edge silence; auto-off when emotion cues are present. |
format | enum | wav | wav 48 kHz PCM, mp3 128 kbps, opus 64 kbps. |
Output
{"audio_url": "https://api.apify.com/v2/key-value-stores/<store-id>/records/audio.mp3","engine": "vieneu-v3-turbo","chars": 49,"chunks": 1,"duration_s": 5.8,"load_ms": 7300.0,"synth_ms": 2900.0,"ms_total": 10300.0,"rtf": 0.5,"peak_ram_mb": 1100.0,"cores": 4,"sample_rate": 48000,"bytes": 556844,"format": "mp3"}
rtf < 1 means synthesis is faster than realtime. warnings appears only when unknown bracketed tags were removed.
Standby mode (low-latency API)
Enable Standby to keep the model warm and skip the ~15–40 s cold model load:
curl -X POST "https://<actor-standby-url>/" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"text":"Xin chào từ chế độ Standby.","voice":"Mai Anh","format":"mp3"}' \--output speech.mp3
The response body is the audio file; timing metrics come back in the X-TTS-Metrics header. Warm requests typically run 7–13 s for a short sentence on a 16 GB / 4 vCPU container.
Performance and cost notes
- CPU-only: no GPU required, 16 GB memory recommended (4 GB minimum).
int8is the fastest mode;fp32is the reference-fidelity mode.- Long narration: keep the whole passage in one run for prosody continuity, or split at sentence boundaries client-side and join with a short pause.
Limitations
- Vietnamese-first. English words inside Vietnamese sentences work; full English paragraphs are better served by an English TTS actor.
- Emotion cues are experimental model behaviour, not guaranteed on every sentence.
- Cloning quality depends heavily on the reference clip.
- Cold start pays the model load once per container.
Credits & source
The underlying model and Python library are not the work of the Actor publisher.
Original author: Phạm Nguyễn Ngọc Bảo — Speech AI Specialist and Medical NLP Researcher (Nhân dân Gia Định Hospital, Ho Chi Minh City, Vietnam), creator and maintainer of VieNeu-TTS.
| Resource | Link |
|---|---|
| Author (GitHub) | https://github.com/pnnbao97 |
| Source repository | https://github.com/pnnbao97/VieNeu-TTS |
| Models (Hugging Face) | https://huggingface.co/pnnbao-ump/VieNeu-TTS |
| Python package | https://pypi.org/project/vieneu/ |
| Project website | https://www.vieneu.io |
Model lineage: VieNeu-TTS is built on the neuphonic/neutts-air base and trained on the author's own Vietnamese speech datasets (pnnbao-ump/VieNeu-TTS-140h, then VieNeu-TTS-1000h); later v2/v3 lines add bilingual English–Vietnamese data and podcast-style multi-speaker support. This Actor runs the v3 Turbo line through the official vieneu package. Released under the Apache License 2.0.
What Andrew Babo did: Andrew Babo is not the model author. His role is to package VieNeu-TTS as an Apify Actor and optimise it for fast CPU inference on the Apify platform — a warm multi-engine pool, int8/fp32 precision selection, chunking and seam levelling for smooth joins, Standby warm start to cut cold-load time, inline tone / pause directives, emotion-cue validation, and MP3/Opus export.
Pricing: this Actor charges no rental and no usage fee. You pay only Apify platform compute for the time your run consumes.
Licensing and consent
VieNeu-TTS weights, preset voices and the vieneu library are distributed by the original author under the Apache License 2.0; the copyright stays with Phạm Nguyễn Ngọc Bảo. Keep that attribution if you redistribute anything derived from this Actor, and review the upstream model card and dataset terms before commercial distribution. For cloning, use only recordings you own or are authorized to process — do not impersonate anyone without permission.