Instructions to use INGMUYLEANG/VoxPocket-v4 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- VoxCPM
How to use INGMUYLEANG/VoxPocket-v4 with VoxCPM:
import soundfile as sf from voxcpm import VoxCPM model = VoxCPM.from_pretrained("INGMUYLEANG/VoxPocket-v4") 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.8B Khmer TTS model (44.1 kHz). It was fine-tuned from VoxCPM 1.5 on real Khmer speech and on synthetic speech distilled from VoxCPM2. It reads Khmer, Khmer mixed with English words, and plain English. It can clone a voice from a short clip and take a style or a voice description.
๐ฃ๏ธ Try it in your browser, no download needed: VoxPocket demo. It has ready voices, styles and voice design.
Use
from voxcpm.core import VoxCPM
import soundfile as sf
m = VoxCPM.from_pretrained(hf_model_id="INGMUYLEANG/VoxPocket-v4", 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="(sad, low and slow 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: keep them short, about 4โ9 s, and clean, with the exact words that are spoken.
- Long text: split it into sentences.
- Doubled words (
แ): write them out (แแแแถแแแแแถแ) or let your text step expand them; English words next to Khmer are fine. - Styles: the phrases used in training work best, for example
sad, low and slow tone,excited and energetic,whispering quietly,happy, smiling tone,calm, slow and steady,serious and clear news-reader tone.
Results
The test reads 40 held-out Khmer sentences with the same voice clip (cfg 2.0, 10 steps). A Khmer speech recognizer
(seanghay/Qwen3-ASR-0.6B-Khmer) listens back, and we count letter errors (lower is better):
| median | mean | perfect sentences | sentences with > 10% errors | |
|---|---|---|---|---|
| VoxPocket | 5.4% | 6.9% | 8 / 40 | 11 / 40 |
Training
- Starting point: VoxCPM 1.5, fine-tuned on Khmer over several rounds.
- Data: about 670 h in the training list.
- 237 h of real Khmer speech
- 270 h of synthetic VoxCPM2 speech, all checked by a speech recognizer: Khmer, mixed, English, clone, style and designed voices
- 79 h of voice clip + style pairs, so a cloned voice can change its tone
- 5 h of English โ Khmer switch sentences (doubled words and Khmer endings right after English)
- Part of the synthetic speech is published as INGMUYLEANG/voxpocket-khmer-tts-v4 (gated).
- Hardware and time: see Training hardware below.
Training hardware
| GPU | GPU memory | Training run |
|---|---|---|
| 1ร NVIDIA GeForce RTX 5090 | 32 GB (CUDA 13) | newest run: about 1,010 h of audio, about 15 h |
Limits
- Styles on cloned voices are still weak: the tone changes only a little. Designed voices (no clip) follow descriptions better.
- Rare words and names are sometimes 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
If you use this work, please cite:
@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-v4}
}
The dataset:
@misc{ing2026voxpocketdata,
author = {Ing, Muyleang},
title = {VoxPocket Khmer TTS: A VoxCPM2 Distillation Dataset for Khmer Speech},
year = {2026},
publisher = {Hugging Face},
url = {https://huggingface.co/datasets/INGMUYLEANG/voxpocket-khmer-tts-v4}
}
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
- 66
