5 min read

VoxCPM: Open Multilingual Text-to-Speech and Voice Design (GitHub, Scanned)

An open 2B text-to-speech model: 30 languages, voices from a description, and voice cloning.

VoxCPM logo
✅
Scan: safe. Nothing malicious in the code. Know before you use it that voice cloning from a short sample is a core feature, and that the pinned development lockfile carries many known advisories. Scanned Oct 26, 2026; the full report is below.

VoxCPM is a text-to-speech model from OpenBMB, the group behind the MiniCPM models. The current release, VoxCPM2, is a 2-billion-parameter model trained on more than 2 million hours of speech. It reads text in 30 languages, including English, Chinese, Japanese, Korean, Hindi, Arabic and most of Western Europe, plus several Chinese dialects, and outputs 48 kHz audio. You install it with pip and call it from Python, a command line tool or a small web demo.

Its headline features are voice design and voice cloning. Voice design creates a new voice from a written description, such as a young woman with a gentle voice, with no audio needed. Voice cloning copies a real person's voice from a short recording, and its strongest mode takes the recording plus a transcript and continues in that voice with the same timbre, rhythm and emotion. That makes it useful for narration, dubbing and accessibility, and it also means it can imitate someone who never agreed to it. The project's own Risks section forbids impersonation, fraud and disinformation and asks users to label AI-generated audio; only clone voices you have permission to use.

Code and weights are Apache-2.0, so commercial use is allowed. It needs an NVIDIA GPU with about 8 GB of memory for comfortable speed, though the web demo can also run on Apple Silicon or CPU, and community ports run it through llama.cpp and ONNX. The authors note that voice design and controlled cloning can vary between runs, so expect to generate a line two or three times.

  • Repository: github.com/OpenBMB/VoxCPM
  • Licence: Apache-2.0 (Apache License 2.0)
  • Language: Python. Stars: 40.6K. Forks: 4,621. Last push: Oct 8, 2026.
  • Scan: safe, Oct 26, 2026, commit cce58a5

Who it is for

Developers and creators who want a local, commercially usable text-to-speech model in many languages, for narration, game and video voices, or reading apps, and who have a GPU to run it on.

Getting started

1. Install the package (Python 3.10 to 3.12, PyTorch 2.5 or later)

pip install voxcpm

2. Generate speech with a voice described in words

voxcpm design --text "VoxCPM2 brings studio-quality multilingual speech synthesis." --output out.wav

3. Clone a voice from a recording you have permission to use

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

The first run downloads the model weights from Hugging Face. For a browser interface, clone the repository and run python app.py --port 8808, then open http://localhost:8808.

Safety scan

We cloned OpenBMB/VoxCPM at commit cce58a5 on Oct 26, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.

  • No secrets, no suspicious code patterns, no installers or install hooks, no committed binaries and no bare-IP URLs across 82 files, about 13,000 lines of them Python. The only hosts in the code are github.com and apache.org.
  • Voice cloning is a headline feature: a few seconds of someone's speech is enough to make the model talk in their voice. The README's Risks section forbids impersonation and fraud and recommends marking AI audio, but nothing in the code checks consent, so that responsibility is yours.
  • uv.lock pins 192 packages with 159 known advisories (8 critical, 72 high). Most are in Pillow (image decoding), aiohttp, Gradio and similar libraries pinned for development; pip install voxcpm resolves newer versions within its own ranges, so keep your environment updated rather than installing from the lockfile.
  • Model weights are downloaded from Hugging Face or ModelScope at first use, and the model loads them with PyTorch. Getting them from the official openbmb pages is the safe path.
  • One workflow, with one third-party action pinned to a tag rather than a commit, none using pull_request_target. Licence present; no security policy, contributing guide or Dependabot.

What the scanner counted

CheckResult
SecretsNone found.
Suspicious codeNone found.
Install-time codeNone: nothing runs at install beyond the package manager itself.
Committed binariesNone.
CI workflows1 workflow. None use pull_request_target. 1 of 1 third-party action pinned to a tag rather than a commit.
Network hosts2 distinct hosts referenced from source; most often github.com, www.apache.org. No URLs to bare IP addresses.
Known vulnerabilities159 advisories across 192 pinned packages: 8 critical, 72 high, 53 moderate, 26 low. uv.lock: 192 packages, 159 advisories.
Project hygieneHas licence file. Missing security policy, automated dependency updates, CodeQL, contributing guide.
OpenSSF ScorecardNot scored: the project is not in Scorecard's weekly index.

The raw findings

Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.

Worst known vulnerabilities (24 of 159)
AdvisorySeverityPackageSummary
GHSA-82r6-8w77-94w6criticalanyio@4.12.1AnyIO: TLSStream IDNA 2003 host name encoding enables potential TLS certificate spoofing
GHSA-9v8h-qqgm-4m35criticalbrotli@1.2.0Brotli: Out-of-bounds write in the Brotli decoder ("Node2Shell") also affects the PyPI Brotli package
GHSA-6q48-6c7w-9gw2criticalcertifi@2026.2.25certifi bundles emSign root CAs with compromised intermediate CA keys
GHSA-332p-7hrc-92wfcriticalpillow@11.3.0Pillow: Heap buffer overflow in _tiffWriteProc when saving TIFF to BytesIO
GHSA-5x8w-8jj5-q52hcriticalpillow@11.3.0Pillow: Heap buffer overflow in FlashPix (FPX) JPEG decoding leads to code execution
GHSA-8g5g-8vmr-9782criticalpillow@11.3.0Pillow: Heap buffer overflow in ImagingJpegDecode
GHSA-v9pv-5gc8-w2m6criticalpillow@11.3.0Pillow multi-frame loaders can reuse stale native image storage after mode transitions
GHSA-w889-685w-c8fhcriticalpillow@11.3.0Pillow: Argument Injection in Ghostscript call, potentially leading into RCE
GHSA-2g87-pp6c-29x5highaiohttp@3.13.3aiohttp: Multiple instances of excessive or unbounded memory/CPU use
GHSA-5wr8-gcqf-gqf3highaiohttp@3.13.3aiohttp server lacks an initial request/header timeout
GHSA-9xw5-w5jj-pvcghighaiohttp@3.13.3AIOHTTP: File descriptor exhaustion in multipart requests
GHSA-cq5v-8q36-5273highaiohttp@3.13.3AIOHTTP: Out-of-bounds heap read in C HTTP response parser error path (malformed chunked response)
GHSA-cg8m-r9f2-5wm2highblack@26.3.1Black: GitHub Action installs unvalidated required-version from pyproject.toml
GHSA-537c-gmf6-5ccfhighcryptography@46.0.5Vulnerable OpenSSL included in cryptography wheels
GHSA-g6cj-pr64-35w5highcryptography@46.0.5cryptography: PKCS#7 EnvelopedData decryption exposes a Bleichenbacher oracle through distinguishable errors and timing
GHSA-jwv3-5hgf-82wwhighcryptography@46.0.5python-cryptography: Duplicate self-signed intermediates can cause exponential path-building
GHSA-v4x8-3wr5-3wq8highfilelock@3.25.2filelock ReadWriteLock: SQLite reopens the lock database by name, so a planted symlink or journal file makes the lock us…
GHSA-27vj-qcqg-25rchighfsspec@2025.3.0fsspec: Server-Side Template Injection in ReferenceFileSystem leads to Remote Code Execution
GHSA-7hp7-4p35-3cx2highgradio@6.9.0Gradio contains a cookie injection vulnerability
GHSA-j36p-7w88-g82jhighgradio@6.9.0Gradio FileExplorer preprocess path traversal allows files outside root_dir to reach callbacks
GHSA-2cp2-2r3c-7p7rhighhydra-core@1.3.2Hydra: hydra.utils.instantiate with untrusted config can lead to code execution
GHSA-c3wx-c55w-pxjqhighhydra-core@1.3.2Hydra logging configuration permits unsafe callable resolution
GHSA-6v7p-g79w-8964highmsgpack@1.1.2MessagePack for Python: Out-of-bounds read / crash on Unpacker reuse after a caught error
GHSA-22hg-r758-rrw9highpillow@11.3.0Pillow: Infinite loop in MIC n_frames when the embedded TIFF

By the numbers

Stars40.6K
Forks4,621
Contributors31
Commits182
Open issues106
Open pull requests63
Releases14
Latest release2.0.3
LicenceApache-2.0
Main languagePython
Project age1 year
Last pushOct 8, 2026
Tracked files82
Lines of code14.9K
Checkout size6 MB

Lines by language: Python 12.9K, Markdown 1,544, YAML 286, TOML 101.

Questions

Is VoxCPM free?

Yes. The code and the model weights are released under Apache-2.0, which allows commercial use. You need your own hardware, ideally an NVIDIA GPU, to run it.

Can VoxCPM clone a real person's voice?

Yes, and it is one of its main features. Give it a short recording, optionally with a transcript, and it speaks new text in that voice. The project forbids using this for impersonation, fraud or disinformation and asks you to label AI-generated audio. Only clone your own voice or one you have clear permission to use; impersonating someone can be illegal.

What hardware does VoxCPM need?

The project lists about 8 GB of GPU memory for VoxCPM2 and CUDA 12 or later for the standard install, with real-time-factor figures measured on an RTX 4090. The web demo can also run on Apple Silicon or CPU, more slowly, and community ports run it through llama.cpp and ONNX.

Which languages does it speak?

Thirty, including English, Chinese, Japanese, Korean, Hindi, Arabic, Russian, Spanish, French, German, Portuguese, Thai and Vietnamese, plus several Chinese dialects such as Cantonese and Sichuanese. You do not need to tag the language; it is detected from the text.


This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.