Instructions to use dubbing-ai/SiangTTS-VoxCPM2-Thai-LoRA with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- VoxCPM
How to use dubbing-ai/SiangTTS-VoxCPM2-Thai-LoRA with VoxCPM:
import soundfile as sf from voxcpm import VoxCPM model = VoxCPM.from_pretrained("dubbing-ai/SiangTTS-VoxCPM2-Thai-LoRA") 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
SiangTTS — Thai Voice-Cloning TTS (VoxCPM2 LoRA)
SiangTTS (เสียง = voice) is a LoRA adapter for
openbmb/VoxCPM2 that gives it clear, natural Thai speech
with zero-shot voice cloning, trained on a single RTX 3090 (24 GB).
It's a parameter-efficient (LoRA) fine-tune of VoxCPM2 — small enough to train on one consumer GPU while keeping the base model's voice-design and cloning abilities. The Thai-adaptation approach is inspired by JaiTTS (a separate, closed-source Thai VoxCPM model by others); SiangTTS is an independent open reproduction at LoRA scale and is not affiliated with it.
🔊 Listen / compare (ref vs ground-truth vs base vs SiangTTS): https://dubbing-ai.github.io/VoxCPM-thai/ · Code: https://github.com/dubbing-ai/VoxCPM-thai
Results
Measured with Typhoon-Whisper-Large-v3 (Thai ASR; CER) and WavLM x-vectors (speaker SIM) on small eval sets, so numbers are directional. CER is an upper bound on error — the ASR judge itself mis-recognises some rare/archaic Thai words the model pronounces correctly.
VoxCPM2's base is already a capable Thai speaker (it reads numerals and handles
long-form). SiangTTS clones at essentially the real same-speaker similarity
ceiling and is as intelligible as the original recordings, with much lower CER
than the base. The GT column is the real recording, included as the reference.
| Voice cloning (80 prompts) | GT (real rec.) | Base | SiangTTS |
|---|---|---|---|
| Intelligibility — CER ↓ | 0.97% | 3.26% | 0.84% |
| Speaker similarity — SIM ↑ | 0.913 | 0.906 | 0.909 |
(CER ≤ GT reflects clean, ASR-friendly synthesis plus the ASR judge's own floor; SIM ≈ GT means cloning is about as close as two real recordings of one speaker.) Separately, short-form Thai CER 5.7%→3.8% and long-form 2.7%→1.6% (small 5 / 2 -prompt sets — directional).
Trained 2 epochs over ~205 h: Common Voice Thai (diverse speakers) + porjai_central (studio-clean) + a LibriTTS-R English slice (retains English & code-switching). Audio encoded at 16 kHz, generated at 48 kHz (VoxCPM2 design).
Usage
from voxcpm import VoxCPM
from voxcpm.model.voxcpm2 import LoRAConfig
import json
cfg = json.load(open("lora_config.json"))["lora_config"]
model = VoxCPM.from_pretrained(
"openbmb/VoxCPM2",
lora_config=LoRAConfig(**cfg),
lora_weights_path=".", # dir holding lora_weights.safetensors
)
# Plain TTS
wav = model.generate(text="สวัสดีครับ ยินดีที่ได้รู้จัก", cfg_value=2.5, inference_timesteps=10)
# Voice cloning from a 3-10 s reference clip
wav = model.generate(text="ทดสอบการโคลนเสียง", reference_wav_path="ref.wav",
cfg_value=2.5, inference_timesteps=10)
Or via the CLI: voxcpm clone --text "..." --reference-audio ref.wav --lora-path . -o out.wav
Limitations
- Rare archaic / liturgical Pali-Sanskrit vocabulary may occasionally be mispronounced (no phonetic-respelling dict is used — raw-text approach).
- Eval prompt sets are small; numbers are directional.
- Best for everyday/conversational Thai; not tuned for specific domains.
License
cc-by-sa-4.0 - inherited from the most restrictive training-data license
(porjai_central is CC-BY-SA-4.0; Common Voice is CC0; LibriTTS-R is CC-BY-4.0).
Commercial use is permitted under share-alike. The base model
openbmb/VoxCPM2 is Apache-2.0; SiangTTS code is Apache-2.0.
Model tree for dubbing-ai/SiangTTS-VoxCPM2-Thai-LoRA
Base model
openbmb/VoxCPM2