VoxCPM2

VoxCPM2 es un modelo TTS difusión-autoregresivo sin tokenizador, de 2000 millones de parámetros, publicado por OpenBMB. Sintetiza audio a 48 kHz con calidad de estudio en 30 idiomas y ofrece tres modos productivos: zero-shot, clonación de voz por referencia única y diseño de voz por instrucciones en lenguaje natural ("a young female voice, warm and gentle"). En Apple Silicon corre de forma nativa con MLX en bf16, int8 e int4 — sobre la prueba de 8 frases, el paquete int8 alcanza un WER del 0 % en el round-trip con Qwen3-ASR y un RTF ≈ 1,0.

Qué es

Arquitectura

Cinco componentes cooperan para producir la forma de onda a 48 kHz:

ComponenteDescripción
MiniCPM-4 base LMMiniCPM-4 de 28 capas con LongRoPE, GQA (16 cabezas Q / 2 KV, dim de cabeza 128) y MLP SwiGLU. Se condiciona sobre tokens de texto + latentes de audio.
Residual LMVariante MiniCPM-4 de 8 capas sin embeddings rotativos. Refina el estado oculto del LM base por cada patch de audio generado.
FSQ + Local DiT estimatorEstados ocultos cuantizados escalarmente alimentan un Diffusion Transformer (V2) de 12 capas que opera sobre latentes de audio de 64 dim en parches de 4. Solver Euler CFG-zero-star, 10 pasos por defecto.
AudioVAE V2Decoder convolucional causal. Lee audio de referencia a 16 kHz y emite la onda a 48 kHz (sobremuestreo 3× incorporado).
Cabezal StopClasificador binario por paso sobre el estado oculto del LM. argmax = 1 termina la generación tras minTokens patches.

Paquetes

Tres variantes cuantizadas, todas convertidas desde los checkpoints PyTorch upstream openbmb/VoxCPM2. La cuantización afecta a los Linear del LM / LM residual / estimador DiT / cabezales de proyección; el vocoder AudioVAE se mantiene en fp16/bf16 porque cuantizarlo degrada la calidad.

PaqueteCuantizaciónTamañoHuggingFace
bf16Ninguna (referencia)~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, 8 frases, Apple Silicon serie M):

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

int8 es la opción recomendada — coincide bit a bit con el pipeline Python upstream en la ruta del LM, es más rápido y un 40 % menor que bf16. int4 es el paquete más pequeño con un WER aceptable para uso casual.

Inicio rápido

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

Pasa un model ID explícito para elegir el paquete int8 / int4:

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

Diseño de voz (por instrucción)

Pasa una descripción de estilo en lenguaje natural; el modelo se condiciona sobre ella sin necesidad de audio de referencia:

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

Clonación de voz

Clonación con una sola referencia desde un clip mono a 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 — pasa a la vez el audio de referencia y su transcripción para que el LM se condicione también sobre el contexto léxico y preserve mejor la prosodia y el acento:

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

Banderas: --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 para síntesis reproducible.

Cómo elegir entre los módulos TTS de speech-swift

Kokoro-82MQwen3-TTSCosyVoice3VoxCPM2VibeVoice 1.5B
Parámetros82M0.6 / 1.7 B0.5B2B1.5B
Sample rate24 kHz24 kHz24 kHz48 kHz24 kHz
BackendCoreML (ANE)MLX, CoreMLMLXMLXMLX
Idiomas1010930EN + ZH
Diseño de vozPresets fijosPor instrucción
Clonación de vozReferencia ICLReferencia zero-shotReferencia + ultimateAudio + transcripción
Formato largoCorto / medioStreamingStreamingStreaming por patchesHasta 90 min
Elige VoxCPM2 cuando…

…necesites salida a 48 kHz (música / radiodifusión) o diseño de voz por lenguaje natural sin un clip de referencia. Para TTS de máxima calidad en inglés corto con menor descarga, CosyVoice3 o Qwen3-TTS son más ligeros. Para podcasts y audiolibros largos en EN/ZH, VibeVoice 1.5B está hecho para eso.

Uso responsable

Incluye clonación de voz. Obtén consentimiento para cualquier voz que clones y no uses el modelo para suplantar a personas, generar desinformación o cometer fraude. Aplica la guía completa de seguridad de openbmb/VoxCPM2.