Build1 publisher2 min readPublished
VoxCPM2 trades the per-character speech bill for a GPU and a base-URL change
OpenBMB's 2B-parameter model is Apache-2.0, speaks 30 languages, and serves through vLLM's OpenAI-compatible /v1/audio/speech. The real-time factor quoted for it was measured on a different backend than the one the project recommends for production.
The Engineer · Build desk

What happened
- OpenBMB released VoxCPM2 in April 2026 as a 2-billion-parameter text-to-speech model under Apache-2.0, with a technical report on arXiv.
- Output is 48 kHz audio across 30 languages, including Arabic, Hindi, Japanese and Turkish, plus nine Chinese dialects such as Cantonese and Sichuanese.
- The project's PyPI page reports a real-time factor around 0.13 on an RTX 4090 via the Nano-vLLM-VoxCPM backend, against roughly 0.3 for plain PyTorch.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- cost The break-even sits on your monthly character count, since the hosted side bills $100 per million characters while the self-hosted side bills a GPU that must be bought and powered whether or not it is busy.
- constraint Teams whose speech calls go through a vendor SDK do not get the cheap migration, because the endpoint compatibility only covers clients that already speak the OpenAI audio request shape.
- decision Keeping a hosted API for the hardest fraction means maintaining two integrations, two sets of credentials and two failure modes, and deciding per request which one a sentence goes to.
- capability Product teams can cast a voice from a text description and throw it away, so persona work stops depending on finding or licensing a reference recording.
Point an existing OpenAI audio client at `vllm serve openbmb/VoxCPM2 --omni` and the request body stays the same. The server exposes `/v1/audio/speech` and handles batching and KV-cache management itself, per the PyPI documentation the post cites [4]. The base-URL claim rests on a condition the post states outright: your application already calls OpenAI-shaped audio endpoints [5]. A client written against a vendor SDK needs new code in the client, not a new environment variable.
Throughput is where I would slow down. The project's PyPI page reports a real-time factor around 0.13 on an RTX 4090, against roughly 0.3 for the plain PyTorch path [6]. At 0.13, generation runs about 7.7 times faster than playback [2], and the PyTorch path runs about 2.3 times slower than that [3]. The 0.13 was measured on the Nano-vLLM-VoxCPM backend, while the production path the project recommends is vLLM-Omni [6][4]. The post reports the figure without batch size or input length [18]. For it to transfer you need that GPU class, similar text lengths and concurrency, and the same backend.
ElevenLabs' API quality tier costs $0.10 per 1,000 characters, according to the post [7]. That is $100 per million characters [1], or $1,000 a month at ten million [4]. Against that sits a box that loads the model in the 8 GB VRAM class before KV cache [12], plus the post's verdict that roughly 80% of routine generation can move and a hosted API stays for the hardest 20% [8]. The 80/20 is the author's judgement. The post's own advice is to run your sentences through the free Hugging Face playground first [15], which costs ten minutes instead of a deployment project.
One checkpoint covers plain TTS, voice design from a written description, and zero-shot cloning from a short reference clip; supply the reference transcript as well and pacing and emphasis carry over, not just timbre [9]. The design prompts the post gives are phrases like "hyped American on caffeine" [10]. The architecture is tokenizer-free: instead of quantising speech into discrete tokens, it generates continuous representations through a diffusion-autoregressive pipeline, which the post credits for better breathing and mid-sentence emotion [2]. Apache-2.0 means commercial use with no royalties or usage caps [16], and the post's second argument for self-hosting is that customer text stops leaving your network [17].
Install is `pip install voxcpm`, with weights pulled from Hugging Face on first run, driven either by the CLI or the Python API [11]. Lighter hardware can still run the VoxCPM-0.5B or VoxCPM1.5 checkpoints [13]. On Apple Silicon the community MLX-Audio path covers the 1.x checkpoints, and its documentation says VoxCPM2 support is not there yet [14].
What to watch
- A real-time factor measured on the vLLM-Omni path itself, with batch size and input length stated, would make the throughput number usable for capacity planning.
- MLX-Audio adding VoxCPM2 support would put the same checkpoint on Apple Silicon developer machines.
- A published listening comparison on routine product sentences would test the post's 80% claim instead of asserting it.