VoxCPM2

VoxCPM2 est un modèle TTS diffusion-autorégressif sans tokenizer, de 2 milliards de paramètres, publié par OpenBMB. Il synthétise un audio 48 kHz qualité studio dans 30 langues, avec trois modes de production : zéro-shot, clonage de voix par référence unique et design vocal en langage naturel ("a young female voice, warm and gentle"). Sur Apple Silicon, il tourne nativement via MLX en bf16, int8 ou int4 — sur le harnais de 8 phrases, le bundle int8 atteint 0 % de WER en round-trip Qwen3-ASR pour un RTF ≈ 1,0.

Présentation

Architecture

Cinq composants coopèrent pour produire la forme d'onde 48 kHz :

ComposantDescription
MiniCPM-4 base LMMiniCPM-4 à 28 couches, LongRoPE, GQA (16 têtes Q / 2 KV, dim de tête 128), MLP SwiGLU. Conditionné sur les tokens textuels + latents audio.
Residual LMVariante MiniCPM-4 à 8 couches sans embeddings rotatifs. Raffine le hidden state du LM de base pour chaque patch audio généré.
FSQ + Local DiT estimatorLes hidden states quantifiés scalairement alimentent un Diffusion Transformer (V2) à 12 couches qui opère sur des latents audio 64 dim par patches de 4. Solveur Euler CFG-zero-star, 10 timesteps par défaut.
AudioVAE V2Décodeur convolutionnel causal. Lit l'audio de référence en 16 kHz et émet une forme d'onde 48 kHz (sur-échantillonnage 3× intégré).
Tête StopClassifieur binaire par pas sur le hidden state du LM. argmax = 1 termine la génération après minTokens patches.

Bundles

Trois variantes quantifiées, toutes converties depuis les checkpoints PyTorch amont openbmb/VoxCPM2. La quantification s'applique aux couches Linear du LM / LM résiduel / estimateur DiT / têtes de projection ; le vocoder AudioVAE reste en fp16/bf16, parce que sa quantification dégrade la qualité audio.

BundleQuantificationTailleHuggingFace
bf16Aucune (référence)~5.0 GBaufklarer/VoxCPM2-MLX-bf16
int8MLX QuantizedLinear, group size 64~3.0 GBaufklarer/VoxCPM2-MLX-int8
int4MLX QuantizedLinear, group size 64~1.9 GBaufklarer/VoxCPM2-MLX-int4

ASR round-trip (Qwen3-ASR 0.6B, harnais 8 phrases, Apple Silicon série M) :

VarianteWERRTF
bf162.04 %1.38
int80.00 %1.02
int44.08 %0.83

int8 est l'option recommandée par défaut — bit à bit identique au pipeline Python amont sur le chemin LM, tout en étant plus rapide et 40 % plus léger que bf16. int4 est le plus petit bundle au WER acceptable, pour un usage occasionnel.

Quickstart

import VoxCPM2TTS

let tts = try await VoxCPM2TTSModel.fromPretrained()  // defaults to bf16
let audio = try await tts.generate(text: "Hello from VoxCPM2.", language: "english")
// audio: [Float] at 48 kHz mono

Passez un model ID explicite pour choisir le bundle int8 / int4 :

let tts = try await VoxCPM2TTSModel.fromPretrained(
    modelId: "aufklarer/VoxCPM2-MLX-int8"
)

Design vocal (instruction-driven)

Passez une description stylistique en langage naturel ; le modèle s'y conditionne sans audio de référence :

let audio = try await tts.generateVoxCPM2(
    text: "Welcome to the show.",
    instruct: "A young woman, gentle and warm voice."
)

Clonage de voix

Clonage à référence unique depuis un clip mono 16 kHz :

let ref = try AudioFileLoader.load(url: URL(fileURLWithPath: "speaker.wav"),
                                   targetSampleRate: 16000)
let audio = try await tts.generateVoxCPM2(
    text: "This is a cloned voice.",
    refAudio: ref
)

Ultimate cloning — passez à la fois l'audio de référence et la transcription correspondante pour que le LM se conditionne aussi sur le contexte lexical et préserve mieux la prosodie et l'accent :

let audio = try await tts.generateVoxCPM2(
    text: "Hello from the cloned voice.",
    refAudio: ref,
    promptText: "this is what the reference clip actually said",
    promptAudio: ref
)

CLI

speech speak "Hello there." \
    --engine voxcpm2 \
    --voxcpm2-variant int8 \
    --output hello.wav

# Voice design
speech speak "Welcome to the show." \
    --engine voxcpm2 \
    --voxcpm2-instruct "A young woman, gentle and warm voice." \
    --output design.wav

# Voice cloning
speech speak "This is a cloned voice." \
    --engine voxcpm2 \
    --voice-sample speaker.wav \
    --output clone.wav

Flags : --voxcpm2-variant {bf16,int8,int4}, --voxcpm2-instruct, --voxcpm2-ref-audio, --voxcpm2-prompt-audio + --voxcpm2-prompt-text, --voxcpm2-cfg-value, --voxcpm2-timesteps, --voxcpm2-max-tokens, --voxcpm2-min-tokens, --seed pour une synthèse reproductible.

Choisir parmi les modules TTS de speech-swift

Kokoro-82MQwen3-TTSCosyVoice3VoxCPM2VibeVoice 1.5B
Paramètres82M0.6 / 1.7 B0.5B2B1.5B
Sample rate24 kHz24 kHz24 kHz48 kHz24 kHz
BackendCoreML (ANE)MLX, CoreMLMLXMLXMLX
Langues1010930EN + ZH
Design vocalPresets figésPar instruction
Clonage de voixRéférence ICLRéférence zero-shotRéférence + ultimateAudio + transcription
Format longCourt / moyenStreamingStreamingStreaming par patchesJusqu'à 90 min
Choisissez VoxCPM2 quand…

…il vous faut une sortie 48 kHz (musique / broadcast) ou un design vocal en langage naturel sans clip de référence. Pour un TTS court anglais de qualité maximale avec un téléchargement plus petit, CosyVoice3 ou Qwen3-TTS sont plus légers. Pour les podcasts et livres audio longs en EN/ZH, VibeVoice 1.5B est conçu pour ça.

Usage responsable

Le clonage de voix est inclus. Obtenez le consentement pour toute voix que vous clonez ; n'utilisez pas le modèle pour usurper l'identité, générer de la désinformation ou commettre une fraude. Le guide de sécurité complet de openbmb/VoxCPM2 s'applique.