← Back to Home

VoxCPM2: Self-Host Your Own AI Voice Generator — Multilingual TTS with Voice Cloning

VoxCPM2: Self-Host Your Own AI Voice Generator

Voice synthesis has come a long way. What once required expensive cloud APIs and hours of studio recordings can now be done with a single open-source model running on your own hardware. Meet VoxCPM2 — a 2-billion-parameter, tokenizer-free Text-to-Speech system from OpenBMB (Tsinghua University) that generates studio-quality 48kHz audio in 30 languages, with support for voice cloning, voice design from natural-language descriptions, and real-time streaming.

Unlike traditional TTS models that discretize speech into tokens (losing subtle acoustic details), VoxCPM2 works directly in continuous latent space using a diffusion autoregressive architecture. The result is highly natural, expressive speech that preserves vocal nuances — timbre, rhythm, emotion, and pacing.

Why It's Trending

VoxCPM2 hit #1 on GitHub Trending in April 2026 and has already amassed over 30,000 stars. It's the first fully open-source TTS model to combine:

  • Voice Design — create a synthetic voice from a text description alone (e.g., "a warm middle-aged man, slightly deep voice, calm tone")
  • Controllable Voice Cloning — clone any voice from a short audio clip, then steer its emotion, pace, and style
  • 30 languages in a single model — no per-language fine-tuning needed
  • 48kHz output — true studio quality, rivaling proprietary systems like ElevenLabs and OpenAI TTS
  • Apache 2.0 license — free for commercial use

Architecture Overview

VoxCPM2 Architecture

VoxCPM2 follows a four-stage generative pipeline operating entirely in continuous latent space, bypassing discrete tokenization entirely:

  1. Local Encoder — Groups consecutive audio frames into patches and encodes them into compact local representations, reducing sequence length for the language model.

  2. Text-Semantic LM (TSLM) — A causal language model built on MiniCPM-4 that jointly processes text tokens and audio embeddings. This stage handles "what to say" — planning prosody, pacing, and emphasis from text content.

  3. Residual Acoustic LM (RALM) — Fuses semantic and acoustic information using concatenation + projection (improved from VoxCPM 1.x's additive fusion). This bridges the gap between high-level planning and fine-grained audio details.

  4. Local DiT (CFM) — A Conditional Flow Matching diffusion transformer that generates continuous audio latents at each autoregressive step. Uses multi-token conditioning (vs. single-token in VoxCPM 1.x) for richer expressiveness.

The generated latents are decoded by AudioVAE V2 — an asymmetric codec that accepts 16kHz reference audio and outputs 48kHz waveforms with built-in super-resolution.

For voice cloning, VoxCPM2 adds a structurally isolated reference-audio channel that separates timbre reference from continuation context. The Voice Design path accepts parenthetical descriptions (e.g., "(A young woman, gentle voice)Hello!") embedded in the input text.

Prerequisites

  • A GPU with at least 8 GB VRAM (NVIDIA RTX 3090/4090 recommended)
  • CUDA 12.0+ and PyTorch 2.5+
  • Python 3.10 – 3.12
  • 12 GB free disk space for the model weights

You can also run on CPU or Apple Silicon (MPS) using --device auto, but generation will be significantly slower.

Installation

Install the package with pip:

pip install voxcpm

The first time you import VoxCPM, it downloads the pretrained weights from Hugging Face (~5 GB):

# The weights are downloaded automatically on first use
# But you can pre-download them:
python -c "from voxcpm import VoxCPM; model = VoxCPM.from_pretrained('openbmb/VoxCPM2', load_denoiser=False)"

Quick Start

Text-to-Speech

Create a Python script and run it:

from voxcpm import VoxCPM
import soundfile as sf

model = VoxCPM.from_pretrained(
  "openbmb/VoxCPM2",
  load_denoiser=False,
)

wav = model.generate(
    text="VoxCPM2 brings studio-quality multilingual speech synthesis to everyone.",
    cfg_value=2.0,
    inference_timesteps=10,
)
sf.write("output.wav", wav, model.tts_model.sample_rate)
print("Saved: output.wav")

The cfg_value controls how closely the model follows the text (higher = more strict), and inference_timesteps trades quality for speed (10 is a good default, 20 gives higher quality).

Voice Design (No Reference Audio)

Create a voice from nothing but a description:

wav = model.generate(
    text="(A young woman, gentle and sweet voice)Hello, welcome to VoxCPM2!",
    cfg_value=2.0,
    inference_timesteps=10,
)
sf.write("voice_design.wav", wav, model.tts_model.sample_rate)

The parenthetical description at the start controls all vocal characteristics: gender, age, tone, emotion, pace.

Voice Cloning

Clone a voice from a reference audio file:

wav = model.generate(
    text="This is a cloned voice generated by VoxCPM2.",
    reference_wav_path="path/to/voice.wav",
)
sf.write("clone.wav", wav, model.tts_model.sample_rate)

# With style control
wav = model.generate(
    text="(slightly faster, cheerful tone)This is a cloned voice with style control.",
    reference_wav_path="path/to/voice.wav",
    cfg_value=2.0,
    inference_timesteps=10,
)
sf.write("controllable_clone.wav", wav, model.tts_model.sample_rate)

Streaming Generation

For real-time applications:

import numpy as np

chunks = []
for chunk in model.generate_streaming(
    text="Streaming text to speech is easy with VoxCPM!",
):
    chunks.append(chunk)
wav = np.concatenate(chunks)
sf.write("streaming.wav", wav, 48000)

CLI Usage

VoxCPM also provides a command-line interface:

# Text-to-speech
voxcpm tts --text "Hello world" --output hello.wav

# Voice design
voxcpm design --text "Hello world" --control "Young female voice, warm and gentle" --output out.wav

# Voice cloning
voxcpm clone --text "This is a clone" --reference-audio path/to/voice.wav --output out.wav

# Batch processing
voxcpm batch --input texts.txt --output-dir outputs/

Web Demo

VoxCPM ships with a built-in Gradio web interface:

python app.py --port 8808

Open http://localhost:8808 in your browser for an interactive playground.

Production Deployment (Optional)

Nano-vLLM (High-Throughput)

For lower latency and concurrent requests:

pip install nano-vllm-voxcpm
from nanovllm_voxcpm import VoxCPM
import numpy as np, soundfile as sf

server = VoxCPM.from_pretrained(model="/path/to/VoxCPM2", devices=[0])
chunks = list(server.generate(target_text="Hello from VoxCPM!"))
sf.write("out.wav", np.concatenate(chunks), 48000)
server.stop()

Achieves RTF as low as ~0.13 on RTX 4090 (vs ~0.30 with standard PyTorch).

vLLM-Omni (Production Multi-Tenant)

For OpenAI-compatible API serving:

vllm serve openbmb/VoxCPM2 --omni --port 8000

# Then call it like OpenAI TTS:
curl http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{"model":"openbmb/VoxCPM2","input":"Hello from VoxCPM2!","voice":"default"}' \
  --output out.wav

Model Comparison

Feature VoxCPM2 VoxCPM 1.5 VoxCPM 0.5B
Parameters 2B 0.6B 0.5B
Languages 30 2 (zh, en) 2 (zh, en)
Sample Rate 48kHz 44.1kHz 16kHz
Voice Design
Controllable Cloning
VRAM (minimum) ~8 GB ~6 GB ~5 GB
RTF (RTX 4090) ~0.30 ~0.15 ~0.17
License Apache 2.0 Apache 2.0 Apache 2.0

VoxCPM2 is the recommended version for most use cases. Use VoxCPM 1.5 for CPU-only or memory-constrained environments.

Verification Checklist

  • pip install voxcpm completes successfully
  • Model loads: VoxCPM.from_pretrained("openbmb/VoxCPM2") returns without errors
  • Basic TTS generates a .wav file that plays correctly
  • Voice design creates recognizable speech from a text description
  • Voice cloning from a reference audio preserves the original speaker's timbre
  • CLI commands produce output files
  • Web demo (python app.py) starts and is accessible on port 8808

Resources

← Retour à l'Accueil

VoxCPM2 : Hébergez Votre Propore Générateur Vocal IA — TTS Multilingue avec Clonage Vocal

VoxCPM2 : Hébergez Votre Propore Générateur Vocal IA

La synthèse vocale a parcouru un long chemin. Ce qui nécessitait autrefois des API cloud coûteuses et des heures d'enregistrement en studio peut désormais être réalisé avec un seul modèle open-source fonctionnant sur votre propre matériel. Découvrez VoxCPM2 — un système de synthèse vocale de 2 milliards de paramètres, sans tokenisation, développé par OpenBMB (Université Tsinghua), qui génère de l'audio 48kHz de qualité studio dans 30 langues, avec prise en charge du clonage vocal, de la création de voix à partir de descriptions en langage naturel et du streaming en temps réel.

Contrairement aux modèles TTS traditionnels qui discrétisent la parole en tokens (perdant des détails acoustiques subtils), VoxCPM2 travaille directement dans un espace latent continu en utilisant une architecture autorégressive à diffusion. Le résultat est une parole hautement naturelle et expressive qui préserve les nuances vocales — timbre, rythme, émotion et cadence.

Pourquoi C'est Tendance

VoxCPM2 a atteint la #1 place sur GitHub Trending en avril 2026 et a déjà accumulé plus de 30 000 étoiles. C'est le premier modèle TTS entièrement open-source à combiner :

  • Création de voix — créez une voix synthétique à partir d'une seule description textuelle (par exemple, « un homme d'âge moyen à la voix chaude et grave, ton calme »)
  • Clonage vocal contrôlable — clonez n'importe quelle voix à partir d'un court extrait audio, puis contrôlez son émotion, son rythme et son style
  • 30 langues dans un seul modèle — pas besoin de réglage fin par langue
  • Sortie 48kHz — véritable qualité studio, rivalisant avec les systèmes propriétaires comme ElevenLabs et OpenAI TTS
  • Licence Apache 2.0 — libre pour un usage commercial

Architecture

Architecture VoxCPM2

VoxCPM2 suit un pipeline génératif en quatre étapes fonctionnant entièrement dans un espace latent continu, contournant complètement la tokenisation discrète :

  1. Encodeur Local — Regroupe les trames audio consécutives en patches et les encode en représentations locales compactes, réduisant la longueur de séquence pour le modèle de langage.

  2. LM Textuel-Sémantique (TSLM) — Un modèle de langage causal basé sur MiniCPM-4 qui traite conjointement les tokens de texte et les embeddings audio. Cette étape gère le « quoi dire » — planification de la prosodie, du rythme et de l'emphase à partir du contenu textuel.

  3. LM Acoustique Résiduel (RALM) — Fusionne les informations sémantiques et acoustiques en utilisant la concaténation + projection (amélioré par rapport à l'ancienne fusion additive de VoxCPM 1.x). Cela comble le fossé entre la planification de haut niveau et les détails audio précis.

  4. Local DiT (CFM) — Un transformateur de diffusion à flux conditionnel qui génère des latents audio continus à chaque étape autorégressive. Utilise un conditionnement multi-tokens (contrairement au token unique de VoxCPM 1.x) pour une expressivité plus riche.

Les latents générés sont décodés par AudioVAE V2 — un codec asymétrique qui accepte l'audio de référence 16kHz et produit des formes d'onde 48kHz avec sur-résolution intégrée.

Pour le clonage vocal, VoxCPM2 ajoute un canal de référence audio structurellement isolé qui sépare la référence de timbre du contexte de continuation. Le chemin de création de voix accepte des descriptions entre parenthèses (par exemple, "(Une jeune femme, voix douce)Bonjour !") intégrées dans le texte d'entrée.

Prérequis

  • Un GPU avec au moins 8 Go de VRAM (NVIDIA RTX 3090/4090 recommandé)
  • CUDA 12.0+ et PyTorch 2.5+
  • Python 3.10 – 3.12
  • 12 Go d'espace disque libre pour les poids du modèle

Vous pouvez également l'exécuter sur CPU ou Apple Silicon (MPS) en utilisant --device auto, mais la génération sera nettement plus lente.

Installation

Installez le package avec pip :

pip install voxcpm

La première fois que vous importez VoxCPM, il télécharge les poids pré-entraînés depuis Hugging Face (~5 Go) :

# Les poids sont téléchargés automatiquement à la première utilisation
# Mais vous pouvez les pré-télécharger :
python -c "from voxcpm import VoxCPM; model = VoxCPM.from_pretrained('openbmb/VoxCPM2', load_denoiser=False)"

Démarrage Rapide

Synthèse Vocale

Créez un script Python et exécutez-le :

from voxcpm import VoxCPM
import soundfile as sf

model = VoxCPM.from_pretrained(
  "openbmb/VoxCPM2",
  load_denoiser=False,
)

wav = model.generate(
    text="VoxCPM2 apporte une synthèse vocale multilingue de qualité studio à tous.",
    cfg_value=2.0,
    inference_timesteps=10,
)
sf.write("output.wav", wav, model.tts_model.sample_rate)
print("Sauvegardé : output.wav")

Le cfg_value contrôle la fidélité au texte (plus élevé = plus strict), et inference_timesteps fait un compromis entre qualité et vitesse (10 est un bon défaut, 20 donne une meilleure qualité).

Création de Voix (Sans Audio de Référence)

Créez une voix à partir d'une simple description :

wav = model.generate(
    text="(Une jeune femme, voix douce et gentille)Bonjour, bienvenue dans VoxCPM2 !",
    cfg_value=2.0,
    inference_timesteps=10,
)
sf.write("voice_design.wav", wav, model.tts_model.sample_rate)

La description entre parenthèses au début contrôle toutes les caractéristiques vocales : genre, âge, ton, émotion, cadence.

Clonage Vocal

Clonez une voix à partir d'un fichier audio de référence :

wav = model.generate(
    text="Ceci est une voix clonée générée par VoxCPM2.",
    reference_wav_path="chemin/vers/voix.wav",
)
sf.write("clone.wav", wav, model.tts_model.sample_rate)

# Avec contrôle de style
wav = model.generate(
    text="(un peu plus rapide, ton joyeux)Ceci est une voix clonée avec contrôle de style.",
    reference_wav_path="chemin/vers/voix.wav",
    cfg_value=2.0,
    inference_timesteps=10,
)
sf.write("controllable_clone.wav", wav, model.tts_model.sample_rate)

Génération en Streaming

Pour les applications en temps réel :

import numpy as np

chunks = []
for chunk in model.generate_streaming(
    text="Le streaming vocal est facile avec VoxCPM !",
):
    chunks.append(chunk)
wav = np.concatenate(chunks)
sf.write("streaming.wav", wav, 48000)

Utilisation en Ligne de Commande

VoxCPM fournit également une interface en ligne de commande :

# Synthèse vocale
voxcpm tts --text "Bonjour le monde" --output bonjour.wav

# Création de voix
voxcpm design --text "Bonjour le monde" --control "Voix féminine jeune, chaude et douce" --output out.wav

# Clonage vocal
voxcpm clone --text "Ceci est un clone" --reference-audio chemin/vers/voix.wav --output out.wav

# Traitement par lot
voxcpm batch --input textes.txt --output-dir sorties/

Démo Web

VoxCPM est livré avec une interface Web Gradio intégrée :

python app.py --port 8808

Ouvrez http://localhost:8808 dans votre navigateur pour un espace de jeu interactif.

Déploiement en Production (Optionnel)

Nano-vLLM (Haut Débit)

Pour une latence plus faible et des requêtes simultanées :

pip install nano-vllm-voxcpm
from nanovllm_voxcpm import VoxCPM
import numpy as np, soundfile as sf

server = VoxCPM.from_pretrained(model="/chemin/vers/VoxCPM2", devices=[0])
chunks = list(server.generate(target_text="Bonjour depuis VoxCPM !"))
sf.write("out.wav", np.concatenate(chunks), 48000)
server.stop()

Atteint un RTF aussi bas qu'~0.13 sur RTX 4090 (contre ~0.30 avec PyTorch standard).

vLLM-Omni (Production Multi-Locataire)

Pour un service compatible OpenAI :

vllm serve openbmb/VoxCPM2 --omni --port 8000

# Appelez-le comme OpenAI TTS :
curl http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{"model":"openbmb/VoxCPM2","input":"Bonjour depuis VoxCPM2 !","voice":"default"}' \
  --output out.wav

Comparaison des Modèles

Fonctionnalité VoxCPM2 VoxCPM 1.5 VoxCPM 0.5B
Paramètres 2B 0,6B 0,5B
Langues 30 2 (zh, en) 2 (zh, en)
Fréquence 48kHz 44,1kHz 16kHz
Création de voix
Clonage contrôlable
VRAM (minimum) ~8 Go ~6 Go ~5 Go
RTF (RTX 4090) ~0,30 ~0,15 ~0,17
Licence Apache 2.0 Apache 2.0 Apache 2.0

VoxCPM2 est la version recommandée pour la plupart des cas d'utilisation. Utilisez VoxCPM 1.5 pour les environnements sans GPU ou à mémoire limitée.

Liste de Vérification

  • pip install voxcpm se termine avec succès
  • Le modèle se charge : VoxCPM.from_pretrained("openbmb/VoxCPM2") retourne sans erreur
  • La synthèse de base génère un fichier .wav qui se joue correctement
  • La création de voix produit une parole reconnaissable à partir d'une description textuelle
  • Le clonage vocal à partir d'un audio de référence préserve le timbre du locuteur d'origine
  • Les commandes CLI produisent des fichiers de sortie
  • La démo Web (python app.py) démarre et est accessible sur le port 8808

Ressources