Introduction

Ing Muyleang just put VoxPocket v5 on Hugging Face. The card was created on 8 November 2026 at 16:45 UTC — INGMUYLEANG/VoxPocket-v5 — and it is a 0.89 billion parameter Khmer text-to-speech model built on OpenBMB's VoxCPM 1.5. You can load it today with VoxCPM.from_pretrained. The weights are Apache-2.0. It reads Khmer, Khmer mixed with English words, and plain English. It can clone a voice from a short clip, follow a style such as happy, sad, angry, or whisper, or design a voice from a written description when you have no reference at all.

What Shipped

  • Vendor / model: Ing Muyleang — VoxPocket v5 (INGMUYLEANG/VoxPocket-v5)
  • Modality: open-weight text-to-speech with voice cloning and style / voice-design prompts
  • Open vs closed: open weights, Apache-2.0; fine-tuned from VoxPocket v4 on the VoxCPM 1.5 stack
  • Runnable today: VoxCPM.from_pretrained(hf_model_id="INGMUYLEANG/VoxPocket-v5", load_denoiser=False), 44.1 kHz output
  • Concrete fact: 0.89B parameters, about 2.7× smaller than its 2.38B VoxCPM2 teacher. The card's preferred checkpoint (training step 30,000) reports a 3.7% median letter error on held-out sentences, down from 5.1% on the previous release

The repo ships model.safetensors in the main folder, plus later comparison checkpoints under checkpoints/ at steps 35,000, 40,000, and the final 43,200-step run. This is a successor to VoxPocket v4, which landed on 6 November. v5 adds new training data for emotions, longer text, and English words inside Khmer.

The model card still points to a browser demo on the v4 Space: VoxPocket v4 demo.

How to Run It

The card's own snippet:

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 from the card:

  • Keep reference clips short (about 4–9 seconds) and clean, and pass the exact words spoken in them
  • Split long text into sentences and join the audio
  • Write doubled Khmer words out (ភ្លាមភ្លាម instead of relying on ៗ), or let a 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

What Improved

The author scores Khmer by listening back with seanghay/Qwen3-ASR-0.6B-Khmer and counting letter errors on Khmer letters (lower is better). The test sentences were never used in training. Every comparison uses the same voice clip, cfg 2.0, 10 steps, and seed 0.

On 40 held-out sentences:

  • This release: 4.3% median error, 6.1% mean, 8 of 40 sentences over 10% errors
  • Previous VoxPocket: 6.6% median, 7.2% mean, 10 of 40
  • VoxCPM2 (2.38B): 4.8% median, 7.0% mean, 12 of 40

A second machine measuring the step-30,000 checkpoint reports 3.7% median letter error versus 5.1% for the previous release, and fewer badly read sentences (12 down to 7 of 40). The later checkpoints score about 4.0% median.

On one NVIDIA GeForce RTX 5090, versus VoxCPM2:

  • Speed: 3.6× real time versus 2.7×
  • Time to first sound (streaming): 64 ms versus 77 ms
  • Peak GPU memory, short / long text: 3.8 / 6.3 GB versus 6.5 / 8.9 GB
  • GPU power while speaking: 173 W versus 205 W
  • Energy per minute of speech: 0.80 Wh versus 1.29 Wh
  • CPU RAM: 1.9 GB versus 3.1 GB

The card summarizes that as 2.7× smaller, 33% faster, and 38% less energy, while reading Khmer a little more clearly than the teacher (4.3% versus 4.8% in that GPU benchmark).

Training, briefly

  • 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 hours of unique audio (1,247 hours with real speech counted twice)
  • 237 hours of real Khmer speech, given double weight so voices stay natural
  • About 600 hours of synthetic VoxCPM2 speech, kept only at 15% letter error or better, including 340 hours of new styled and emotional speech (whisper, angry, happy, surprised, sad), long multi-sentence reading, and Khmer sentences with English words
  • 157 hours of voice-clip plus style pairs, so a cloned voice can change its tone
  • Settings: learning rate 2e-5 with warm-up, effective batch of 18 clips, 43,200 steps
  • Hardware: one RTX 5090 (32 GB, CUDA 13) for about 14 hours

The matching dataset card is INGMUYLEANG/voxpocket-khmer-tts-v4.

Limits

  • Very long text in one go still has errors — split it into sentences. Short paragraphs (up to about three sentences) improved a lot and no longer stop early, but paragraphs of 450+ characters still stumble, and VoxCPM2 is better there
  • Styles change cloned voices less than they change designed voices (no clip)
  • 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

Original Source

VoxPocket v5 on Hugging Face

Conclusion

If you needed an open Khmer voice that can clone, take a mood, and still fit on a single consumer GPU, VoxPocket v5 is today's drop — Apache-2.0, 0.89B, 44.1 kHz, and a clear step up from v4 on letter error, emotion data, and code-mixed text. Open the card, keep the reference clip short and honest, and split long paragraphs before you hit generate.

—Anabel ♡