1# Zero-shot TTS
2crispasr -m voxcpm2-f16.gguf \
3 --tts "Hello, this is VoxCPM2 speaking." \
4 --tts-output output.wav
5
6# Quantized (smaller, faster)
7crispasr -m voxcpm2-q4_k.gguf \
8 --tts "Hello world" --tts-output output.wav| File | Size | Description |
|---|---|---|
voxcpm2-f16.gguf | 4.63 GB | F16 weights (full precision) |
voxcpm2-q4_k.gguf | ~1.5 GB | Q4_K quantized (faster, slightly lower quality) |
voxcpm2-q8_0.gguf | 2.83 GB | Q8_0 quantized (near-F16 quality) |
voxcpm2-ref.gguf | 371 KB | Reference activation dump for numerical validation |
voxcpm2-ref.gguf file contains intermediate activation tensors captured from the PyTorch reference implementation. Used with crispasr-diff to validate the C++ inference path:crispasr-diff voxcpm2-tts voxcpm2-f16.gguf voxcpm2-ref.gguf samples/jfk.wavtext_input_ids, locenc_in, locenc_out, enc_to_lm, tslm_layer_0_out, tslm_layer_27_out, tslm_prefill_out, ralm_prefill_out, lm_to_dit_hidden, res_to_dit_hidden, cfm_step0_z, cfm_step0_result, stop_logits_step0.Text → BPE tokenize → TSLM (28L causal MiniCPM-4, GQA 16h/2kv, LongRoPE)
↓
FSQ bottleneck (tanh→round→linear)
↓
RALM (8L causal, no RoPE, GQA 16h/2kv)
↓
Projections: lm_to_dit + res_to_dit → mu [2048]
↓
LocDiT (12L bidirectional, CFM Euler solver, 10 steps, cfg=2.0)
↓
Predicted latent patch [4 frames × 64 dims]
↓
LocEnc (12L bidirectional) → next TSLM input
↓ (AR loop until stop)
AudioVAE decoder → 48 kHz PCMmodels/convert-voxcpm2-to-gguf.py from the CrispASR repository:1python models/convert-voxcpm2-to-gguf.py \
2 --input openbmb/VoxCPM2 \
3 --output voxcpm2-f16.ggufopenbmb.apache-2.0. This repository redistributes under the same terms; it grants no rights the upstream licence does not.