Instructions to use INGMUYLEANG/VoxPocket-v5 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- VoxCPM
How to use INGMUYLEANG/VoxPocket-v5 with VoxCPM:
import soundfile as sf from voxcpm import VoxCPM model = VoxCPM.from_pretrained("INGMUYLEANG/VoxPocket-v5") wav = model.generate( text="VoxCPM is an innovative end-to-end TTS model from ModelBest, designed to generate highly expressive speech.", prompt_wav_path=None, # optional: path to a prompt speech for voice cloning prompt_text=None, # optional: reference text cfg_value=2.0, # LM guidance on LocDiT, higher for better adherence to the prompt, but maybe worse inference_timesteps=10, # LocDiT inference timesteps, higher for better result, lower for fast speed normalize=True, # enable external TN tool denoise=True, # enable external Denoise tool retry_badcase=True, # enable retrying mode for some bad cases (unstoppable) retry_badcase_max_times=3, # maximum retrying times retry_badcase_ratio_threshold=6.0, # maximum length restriction for bad case detection (simple but effective), it could be adjusted for slow pace speech ) sf.write("output.wav", wav, 16000) print("saved: output.wav") - Notebooks
- Google Colab
- Kaggle
VoxPocket: small Khmer text-to-speech
VoxPocket is a 0.89B Khmer TTS model (44.1 kHz), built on VoxCPM 1.5 and trained on real Khmer speech plus speech distilled from VoxCPM2. It reads Khmer, Khmer mixed with English words, and plain English, can clone a voice from a short clip, and takes a style (happy, sad, angry, whisper, โฆ) or a voice description.
๐ฃ๏ธ Try it in your browser: VoxPocket demo.
Highlights of this release
- Reads Khmer more clearly: 3.7% median letter error on held-out sentences (previous release: 5.1%), and fewer badly read sentences (12 โ 7 of 40).
- In our GPU benchmark it reads Khmer better than VoxCPM2 (its 2.4B teacher: 4.3% vs 4.8%), while being 2.7ร smaller, 33% faster and using 38% less energy.
- New training data for emotions (whisper, angry/upset, happy, surprised, sad), longer text, and English words inside Khmer.
Use
from voxcpm.core import VoxCPM
import soundfile as sf
m = VoxCPM.from_pretrained(hf_model_id="INGMUYLEANG/VoxPocket-v5", load_denoiser=False)
sr = m.tts_model.sample_rate # 44100
# 1) clone a voice: a clean 4โ9 s clip + exactly what is said in it
wav = m.generate(text="แแฝแแแแธแแแแแขแผแแแถแแแขแแแแแแถ แขแแแปแแ
แแแพแแแแแแถแแแแถแแแถแแแแแ",
prompt_wav_path="my_voice.wav", prompt_text="<words spoken in my_voice.wav>",
cfg_value=2.0, inference_timesteps=10)
sf.write("clone.wav", wav, sr)
# 2) clone + style: put the style in brackets before the text
wav = m.generate(text="(angry and upset tone)แ แแแปแขแแแธแแถแแแถแขแแแแแแแบแแแแแแแแ?",
prompt_wav_path="my_voice.wav", prompt_text="<words spoken in my_voice.wav>")
# 3) design a voice, no clip: describe it in brackets
wav = m.generate(text="(A young woman, clear and bright voice, cheerful tone)แแฝแแแแธแแแแแขแผแแแถแแแขแแแแแแถแ")
Tips:
- Reference clips: short (about 4โ9 s) and clean, with the exact words that are spoken.
- Long text: split it into sentences and join the audio (see the long-text chart below).
- Doubled words (
แ): write them out (แแแแถแแแแแถแ) or let your text step expand them. - Styles that work best:
whispering quietly,angry and upset tone,happy, smiling tone,surprised and amazed tone,sad, low and slow tone,excited and energetic,calm, slow and steady,serious and clear news-reader tone.
Other checkpoints
The main folder is the checkpoint that read Khmer best in our tests (step 30,000). Later checkpoints are in
checkpoints/ for comparison; they score close to it.
| Folder | Training step | Median letter error |
|---|---|---|
| (main) | 30,000 | 3.7% |
checkpoints/step-35000 |
35,000 | 4.0% |
checkpoints/step-40000 |
40,000 | 4.0% |
checkpoints/final-43200 |
43,200 (end) | 4.0% |
from huggingface_hub import snapshot_download
path = snapshot_download("INGMUYLEANG/VoxPocket-v5", allow_patterns=["checkpoints/final-43200/*"])
m = VoxCPM.from_pretrained(hf_model_id=f"{path}/checkpoints/final-43200", load_denoiser=False)
Results
All tests use the same voice clip, cfg 2.0, 10 steps and seed 0. A Khmer speech recognizer
(seanghay/Qwen3-ASR-0.6B-Khmer) listens back and we count letter errors on Khmer letters (lower is better).
The test sentences were never used in training.
| 40 held-out sentences | median error | mean error | sentences with > 10% errors |
|---|---|---|---|
| VoxPocket (this release) | 4.3% | 6.1% | 8 / 40 |
| VoxPocket (previous release) | 6.6% | 7.2% | 10 / 40 |
| VoxCPM2 (2.38B) | 4.8% | 7.0% | 12 / 40 |
Measured on the GPU below with the final checkpoint. The same test on a second machine gives 3.7% (step 30,000) vs 5.1% for the previous release.
Speed, memory and power
| On 1ร NVIDIA GeForce RTX 5090 | VoxPocket | VoxCPM2 |
|---|---|---|
| Parameters | 0.89B | 2.38B |
| Speed | 3.6ร real time | 2.7ร |
| Time to first sound (streaming) | 64 ms | 77 ms |
| Peak GPU memory (short / long text) | 3.8 / 6.3 GB | 6.5 / 8.9 GB |
| GPU power while speaking | 173 W | 205 W |
| Energy per minute of speech | 0.80 Wh | 1.29 Wh |
| CPU RAM | 1.9 GB | 3.1 GB |
Long text in one go
Reading one whole paragraph without splitting: this release reads short paragraphs (up to ~3 sentences) much better than the previous one and no longer stops early, but on very long paragraphs (450+ characters) it still makes many mistakes, and VoxCPM2 is better there. Split long text into sentences for the best result.
Training progress
Training
- Starting point: the previous VoxPocket release (VoxCPM 1.5 fine-tuned on Khmer), trained for one more full pass.
- Data: 778,028 clips, about 1,010 h of unique audio (1,247 h with real speech counted twice):
- 237 h of real Khmer speech, given double weight so voices stay natural
- about 600 h of synthetic VoxCPM2 speech, every clip checked by a speech recognizer (kept only โค 15% letter error), including 340 h of new data: styled and emotional speech (whisper, angry, happy, surprised, sad), long multi-sentence reading, and Khmer sentences with English words
- 157 h of voice clip + style pairs, so a cloned voice can change its tone
- Settings: learning rate 2e-5 with warm-up, effective batch 18 clips, 43,200 steps.
Training hardware
| GPU | GPU memory | Training run |
|---|---|---|
| 1ร NVIDIA GeForce RTX 5090 | 32 GB (CUDA 13) | 43,200 steps (one full pass over ~1,010 h of audio) in about 14 h |
Limits
- Very long text in one go still has errors; split into sentences.
- Styles on cloned voices change the tone less than designed voices (no clip) do.
- Excited, Angry and Surprised with English-only text can be read aloud as words instead of used as a tone; use them with Khmer or Khmer + English text for now (English support is coming).
- Rare words and names can be swapped for common ones; English loanwords inside Khmer can sound Khmer-ish.
- English is basic. The model is made for Khmer first.
- Do not use it to impersonate real people or to make deceptive audio. Only clone voices you have permission to use.
Citation
@misc{ing2026voxpocket,
author = {Ing, Muyleang},
title = {VoxPocket: A Small Khmer Text-to-Speech Model with Voice Cloning and Styles},
year = {2026},
publisher = {Hugging Face},
url = {https://huggingface.co/INGMUYLEANG/VoxPocket-v5}
}
VoxPocket is built on VoxCPM 1.5 and its synthetic data was made with VoxCPM2 (OpenBMB); please also credit VoxCPM when you use it.
Author
Ing Muyleang, built with the help of AI tools (agy, Claude).
Contact
Questions: contact the author through the Hugging Face profile or GitHub.
- Downloads last month
- 29



