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.

Reading quality

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

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

Long text

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 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
Safetensors
Model size
0.8B params
Tensor type
F32
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for INGMUYLEANG/VoxPocket-v5

Finetuned
(1)
this model

Dataset used to train INGMUYLEANG/VoxPocket-v5

Space using INGMUYLEANG/VoxPocket-v5 1