How to run VoxCPM text-to-speech on a cloud GPU
Rent a GPU on Deploy, then open a terminal in JupyterLab or over SSH. Install VoxCPM from the official OpenBMB/VoxCPM repository, let from_pretrained download openbmb/VoxCPM2, and run the Python sample, the CLI, or app.py. Copy the wav, or the audio from the web demo, off the instance before you destroy it, because destroying the instance deletes its disk.
Other speech pages: How to run CosyVoice on a cloud GPU, How to run F5-TTS on a cloud GPU, How to run Spark-TTS on a cloud GPU, and How to run Zonos TTS on a cloud GPU. The F5-TTS README prints no GB figure. The Spark-TTS README prints no GB figure. The Zonos README says 6GB+ VRAM. How published FLUX and SDXL weight sizes are read: How much VRAM do I need for FLUX and SDXL. If the process runs out of memory: How to fix CUDA out of memory on a cloud GPU. The tunnel for the web demo is How to use SSH port forwarding on a cloud GPU.
Use a reference clip you have the right to clone. The risks section says it is strictly forbidden to use VoxCPM for impersonation, fraud, or disinformation, and it recommends marking generated content. The repository LICENSE file is the Apache License, Version 2.0. The appendix copyright line is Copyright OpenBMB. The GitHub license field on 2026-11-13 was Apache-2.0. The model cards for openbmb/VoxCPM2, openbmb/VoxCPM1.5, and openbmb/VoxCPM-0.5B that day had cardData.license apache-2.0, top-level license null, and gated false, lastModified 2026-11-09T08:14:29.000Z, 2026-11-09T08:14:25.000Z, and 2026-11-09T08:11:00.000Z. The VoxCPM2 card language list is the same 30 languages the README names. The VoxCPM1.5 and VoxCPM-0.5B cards list en and zh. Read the file before you redistribute the program or the weights.
The commands below are copied from the upstream files named in each step. They were not run on a CloudGPU instance for this page. Anything this page adds around them is marked.
What the README says about memory and languages
The models table prints VRAM ~8 GB for VoxCPM2, ~6 GB for VoxCPM1.5, and ~5 GB for VoxCPM-0.5B (read 2026-11-13). The same table prints RTF on an RTX 4090 of ~0.30, ~0.15, and ~0.17, and Nano-vLLM RTF of ~0.13, ~0.08, and ~0.10. The highlights line says RTF as low as ~0.3 on an NVIDIA RTX 4090, and ~0.13 accelerated by the two projects it names. The VoxCPM2 model card repeats VRAM ~8 GB and RTF on an RTX 4090 of ~0.30 standard and ~0.13 Nano-vLLM. Those figures are the files’. This page did not remeasure them. The README also has benchmark tables. This page does not copy them.
The README lists 30 languages: Arabic, Burmese, Chinese, Danish, Dutch, English, Finnish, French, German, Greek, Hebrew, Hindi, Indonesian, Italian, Japanese, Khmer, Korean, Lao, Malay, Norwegian, Polish, Portuguese, Russian, Spanish, Swahili, Swedish, Tagalog, Thai, Turkish, and Vietnamese. It lists Chinese dialects on a separate line: 四川话, 粤语, 吴语, 东北话, 河南话, 陕西话, 山东话, 天津话, 闽南话. The table says VoxCPM1.5 and VoxCPM-0.5B support 2 languages, zh and en. The highlights say VoxCPM2 outputs 48kHz audio and accepts 16kHz reference audio. audio_vae_v2.py sets class defaults sample_rate 16000 and out_sample_rate 48000. voxcpm2.py sets self.sample_rate from out_sample_rate. This page did not load a checkpoint config, so it does not claim the saved rate of a particular weight file.
GET /v1/public/compute-capabilities does not list GPUs. It returns feature flags. The memory column is vram_gb from gpu-prices.json, updated_at 2026-11-13T10:09:27.510Z. GET /v1/public/gpu-catalog the same day (generated_at 2026-11-13T10:09:28.527Z) listed the same names and the same vram_gb values, plus Ascend 910B at 64, which is not in gpu-prices.json and is not listed here. The catalog response also includes an availability field. This page does not copy it. Every prices row has gpu_count 1. The smallest vram_gb in that file is 8, on RTX 2080, which is the same integer as the ~8 GB cell and above the ~6 GB and ~5 GB cells. Catalog RTX 4090 is 24. Those catalog numbers are not the RTF cells. This page did not run VoxCPM and does not mark a row as enough. Which listing you can start is on Deploy.
The catalog template list had no VoxCPM template.
| Catalog name | vram_gb |
|---|---|
| RTX 2080 | 8 |
| RTX 3080 | 10 |
| RTX 2080 Ti | 11 |
| RTX 3080 Ti | 12 |
| V100 16G | 16 |
| A30 | 24 |
| RTX 3090 | 24 |
| RTX 4090 | 24 |
| RTX 4090D | 24 |
| RTX 4080 SUPER 32G | 32 |
| RTX 5090 | 32 |
| RTX 5090D | 32 |
| V100 32G | 32 |
| A100 40G | 40 |
| A800 40G | 40 |
| A40 | 48 |
| RTX 4090 48G | 48 |
| RTX 4090D 48G | 48 |
| RTX A6000 | 48 |
| NVIDIA RTX PRO 5000 72G | 72 |
| RTX PRO 5000 72G | 72 |
| A100 80G | 80 |
| A800 80G | 80 |
| H800 | 80 |
| RTX 6000D | 83 |
| H20 96G | 96 |
| RTX PRO 6000 96G | 96 |
| RTX PRO 6000 Max-Q | 96 |
| H20-3e 141G | 141 |
Install
On Deploy, choose Raw GPU. The README’s install line does not print a clone. app.py is a file in the repository, and the web-demo section runs python app.py. The clone line below is this page’s. The comment marking that is this page’s.
# The install section prints pip install voxcpm and does not print a clone.
# app.py is a file in the repository. This clone is this page's.
git clone https://github.com/OpenBMB/VoxCPM.git
cd VoxCPM
pip install voxcpm
The requirements note says Python ≥ 3.10 (<3.13), PyTorch ≥ 2.5.0, and CUDA ≥ 12.0. pyproject.toml sets requires-python to >=3.10 and lists torch>=2.5.0, torchaudio>=2.5.0, and gradio>=6,<7. Its classifiers name Python 3.10 and 3.11. The <3.13 bound is the README’s sentence. It is not a line in pyproject.toml. The script entry is voxcpm = voxcpm.cli:main. The commits API for the default branch main listed 300e4260b509066151d623dc9c0aa922cf82232b, committed 2026-11-09T07:36:57Z. README.md was that same commit. pyproject.toml was 87af7d08544faf9951f5faf38fc4d1b10a28186a, committed 2026-06-06T08:29:46Z. app.py was 07c937b2956c5c122d736cfa1a9cd769965bfe5a, committed 2026-07-01T03:04:06Z.
The RTX 5090 guide says that card is compute capability 12.0 (sm_120) and that PyTorch 2.7 and later, on a build for CUDA 12.8 or newer, is the line that announced support. pyproject.toml requires torch>=2.5.0. This page did not re-test VoxCPM on an RTX 5090. Catalog RTX 5090 and RTX 5090D are 32. That is the catalog number only.
The documented Python sample
The text-to-speech sample, copied. It writes demo.wav.
from voxcpm import VoxCPM
import soundfile as sf
model = VoxCPM.from_pretrained(
"openbmb/VoxCPM2",
load_denoiser=False,
)
wav = model.generate(
text="VoxCPM2 is the current recommended release for realistic multilingual speech synthesis.",
cfg_value=2.0,
inference_timesteps=10,
seed=42,
)
sf.write("demo.wav", wav, model.tts_model.sample_rate)
print("saved: demo.wav")
from_pretrained in core.py defaults hf_model_id to openbmb/VoxCPM2, load_denoiser to True, and zipenhancer_model_id to iic/speech_zipenhancer_ans_multiloss_16k_base. The docstring calls that id a ModelScope denoiser id. The sample passes load_denoiser=False, so that call does not load the denoiser. optimize defaults to True. The sample does not pass optimize. The Hugging Face model API for iic/speech_zipenhancer_ans_multiloss_16k_base on 2026-11-13 returned 401. This page did not find a public card for that id.
Voice design, copied. The README says to put the description in parentheses at the start of text. It writes voice_design.wav.
wav = model.generate(
text="(A young woman, gentle and sweet voice)Hello, welcome to VoxCPM2!",
cfg_value=2.0,
inference_timesteps=10,
seed=42,
)
sf.write("voice_design.wav", wav, model.tts_model.sample_rate)
Controllable cloning, copied. It writes clone.wav and controllable_clone.wav and passes reference_wav_path.
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)
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,
seed=42,
)
sf.write("controllable_clone.wav", wav, model.tts_model.sample_rate)
Ultimate cloning, copied. It writes hifi_clone.wav. The comment in the sample is the README’s, including the spelling simliarity.
wav = model.generate(
text="This is an ultimate cloning demonstration using VoxCPM2.",
prompt_wav_path="path/to/voice.wav",
prompt_text="The transcript of the reference audio.",
reference_wav_path="path/to/voice.wav", # optional, for better simliarity
)
sf.write("hifi_clone.wav", wav, model.tts_model.sample_rate)
core.py was d1400d6d21d953226dffd8df06cd7719fd027b67, committed 2026-09-02T03:20:11Z. This page did not run the samples.
CLI
The design, controllable-design, reference clone, and batch commands, copied. cli.py marks --output required on design and clone, and --output-dir required on batch. It writes the path with model.tts_model.sample_rate. Batch files are output_001.wav and the following numbers under the output directory. DEFAULT_HF_MODEL_ID is openbmb/VoxCPM2.
voxcpm design \
--text "VoxCPM2 brings studio-quality multilingual speech synthesis." \
--output out.wav
voxcpm design \
--text "VoxCPM2 brings studio-quality multilingual speech synthesis." \
--control "Young female voice, warm and gentle, slightly smiling" \
--seed 42 \
--output out.wav
voxcpm clone \
--text "This is a voice cloning demo." \
--reference-audio path/to/voice.wav \
--output out.wav
voxcpm batch --input examples/input.txt --output-dir outs
The README’s ultimate-cloning CLI block puts a comment after a trailing backslash. In a shell, that comment ends the continuation, and the --output line is a separate command. This page does not put that block in a bash fence. The README prints it as:
voxcpm clone \
--text "This is a voice cloning demo." \
--prompt-audio path/to/voice.wav \
--prompt-text "reference transcript" \
--reference-audio path/to/voice.wav \ # optional, for better simliarity
--output out.wav
cli.py was 30118a33522ef2d8698fca9bebac7224af242395, committed 2026-06-29T05:19:40Z. This page did not run the CLI.
Web demo
The README’s web-demo commands:
python app.py --port 8808 # then open in browser: http://localhost:8808
python app.py --device auto
app.py defaults --port to 8808 and --host to 0.0.0.0. run_demo passes those to launch as server_port and server_name. The --host help text says the default exposes the unauthenticated UI and API to the network, and that 127.0.0.1 restricts access to the local machine. The default model id is openbmb/VoxCPM2. The generate callback returns (sample_rate, wav, seed) to a Gradio audio output. It does not write demo.wav. The demo also sets asr_model_id to iic/SenseVoiceSmall. The Hugging Face model API for that id on 2026-11-13 returned 401. This page did not start the app. Forward port 8808 with how to use SSH port forwarding on a cloud GPU. Download the audio from the widget before you destroy the instance.
The README’s fine-tuning section says that with as little as 5–10 minutes of audio you can adapt the model. That figure is audio length in the README. This page did not train and did not time a run. The web UI line is python lora_ft_webui.py, and the comment says to open http://localhost:7860. lora_ft_webui.py reads GRADIO_SERVER_PORT or 7860 and calls launch with server_name="0.0.0.0". That file was cce58a5b59303c9bd63d12f23afe6a49a4a80c59, committed 2026-10-08T03:26:12Z. This page did not start it. Forward that port with the same SSH guide.
Other servers the README names
The README’s Nano-vLLM install is pip install nano-vllm-voxcpm. Its note says RTF as low as ~0.13 on an NVIDIA RTX 4090. That sentence is the README’s. The vLLM-Omni block, copied. It was not run.
uv pip install vllm==0.19.0 --torch-backend=auto
git clone https://github.com/vllm-project/vllm-omni.git && cd vllm-omni
uv pip install -e .
vllm serve openbmb/VoxCPM2 --omni --port 8000
The general vLLM page is How to serve an OpenAI-compatible API with vLLM on a cloud GPU. This README pins vllm==0.19.0 and then installs vllm-omni from a clone. This page did not check that pin against the other guide. The README also documents a llama.cpp-omni build and prints an RTF figure for an Apple M4 Pro. That machine is not a name in gpu-prices.json. This page does not copy that build.
ComfyUI
The README’s ecosystem table names wildminder/ComfyUI-VoxCPM, HM-RunningHub/ComfyUI_RH_VoxCPM, and 1038lab/ComfyUI-VoxCPMTTS. The same section says community projects are not officially maintained by OpenBMB. This page does not add install commands for them. The ComfyUI examples top-level directory list on 2026-11-13 had no directory named for this project. Examples HEAD was f9431bb000ce792094ff345446e22cac1ea6cef3, committed 2025-11-26T20:33:58Z. Installing ComfyUI itself is How to install ComfyUI and ComfyUI-Manager on a cloud GPU.
When it fails
CUDA out of memory. The files this page read do not print a second low-memory flag. The README table’s VRAM cells are ~8 GB, ~6 GB, and ~5 GB. If the process raises that error, use how to fix CUDA out of memory on a cloud GPU.
“CUDA error: no kernel image is available for execution on the device” on an RTX 5090. See the install section. This page did not re-test the package on that card.
Web demo and demo.wav. The Python sample writes demo.wav. app.py returns audio to the widget and does not write that file. The CLI writes the --output path you pass.
Ultimate-cloning CLI. The README block puts a comment after a trailing backslash. See the CLI section.
Save the audio, then destroy
The Python samples write demo.wav, voice_design.wav, clone.wav, controllable_clone.wav, hifi_clone.wav, or the path in the sample you run. The CLI writes --output or the files under --output-dir. The web demo returns audio to the widget. Copy the file, or download the widget audio, before you destroy the instance. Save your work before you destroy a cloud GPU is the checklist. The terms say data on local instance storage is permanently deleted when the instance is destroyed.
The pricing page FAQ states the billing rule in these words:
Per-minute options have a 1-minute minimum; unused prepaid minutes are refunded when you destroy the instance. Some configurations use whole-hour billing with a 1-hour minimum; unused time within a charged hour is not refunded on voluntary stop. The billing period, minimum charge and initial prepayment are shown before confirmation. No subscription.
Frequently asked questions
What GPU figures and which languages does the VoxCPM README state?
The models table prints VRAM ~8 GB for VoxCPM2, ~6 GB for VoxCPM1.5, and ~5 GB for VoxCPM-0.5B. It prints RTF on an RTX 4090 of ~0.30, ~0.15, and ~0.17, and Nano-vLLM RTF of ~0.13, ~0.08, and ~0.10. The highlights line says RTF as low as ~0.3 on an NVIDIA RTX 4090 and ~0.13 with the accelerators it names. Those sentences are printed in the README. This page did not remeasure them. The README lists 30 languages: Arabic, Burmese, Chinese, Danish, Dutch, English, Finnish, French, German, Greek, Hebrew, Hindi, Indonesian, Italian, Japanese, Khmer, Korean, Lao, Malay, Norwegian, Polish, Portuguese, Russian, Spanish, Swahili, Swedish, Tagalog, Thai, Turkish, and Vietnamese. It lists Chinese dialects on a separate line. The VoxCPM2 model card language list is the same 30. The table says VoxCPM1.5 and VoxCPM-0.5B support 2 languages, zh and en. The smallest vram_gb in gpu-prices.json (updated_at 2026-11-13T10:09:27.510Z) is 8, on RTX 2080, which is the same integer as the ~8 GB cell and above the ~6 GB and ~5 GB cells. Catalog RTX 4090 is 24. Those catalog numbers are not the RTF cells. This page did not run VoxCPM and does not mark a row as enough. Which listing you can start is on https://cloudgpu.app/deploy.
Which commands write a wav, and how does the README document voice cloning?
The Python sample calls VoxCPM.from_pretrained with openbmb/VoxCPM2 and load_denoiser=False, then soundfile.write with demo.wav and model.tts_model.sample_rate. The voice-design sample writes voice_design.wav. The controllable-cloning sample writes clone.wav and controllable_clone.wav and passes reference_wav_path. The ultimate-cloning sample writes hifi_clone.wav and passes prompt_wav_path, prompt_text, and reference_wav_path. The CLI design and clone subcommands require --output. cli.py writes that path with model.tts_model.sample_rate. Batch mode writes numbered wav files under --output-dir. from_pretrained defaults load_denoiser to True and zipenhancer_model_id to iic/speech_zipenhancer_ans_multiloss_16k_base. The sample passes False. This page did not run those commands.
Which command starts the web demo, and does the repository document ComfyUI?
The README prints python app.py --port 8808 and says to open http://localhost:8808. app.py defaults --port to 8808 and --host to 0.0.0.0, and launch uses those values. The host help text says the default exposes the unauthenticated UI and API to the network. The generate callback returns audio to the Gradio widget. It does not write demo.wav. The README also prints python lora_ft_webui.py and says to open http://localhost:7860. lora_ft_webui.py uses GRADIO_SERVER_PORT or 7860 and launches on 0.0.0.0. This page did not start either app. The README lists three ComfyUI repositories and says community projects are not officially maintained by OpenBMB. This page does not add install commands for them. The ComfyUI examples top-level directory list on 2026-11-13 had no directory named for this project. Examples HEAD was f9431bb000ce792094ff345446e22cac1ea6cef3.
Which license covers VoxCPM?
The repository LICENSE file is the Apache License, Version 2.0, and the appendix copyright line is Copyright OpenBMB. The README license section says the model weights and code are open-sourced under the Apache-2.0 license. The highlights line says the weights and code are released under the Apache-2.0 license, free for commercial use. The GitHub license field on 2026-11-13 was Apache-2.0. The cards for openbmb/VoxCPM2, openbmb/VoxCPM1.5, and openbmb/VoxCPM-0.5B had cardData.license apache-2.0, top-level license null, and gated false. Section 2 of that Apache file grants a no-charge, royalty-free copyright license. That wording is the upstream license, not a CloudGPU price and not a storage allowance. Read the file before you redistribute the program or the weights.
Sources (read 2026-11-13, Asia/Shanghai)
- VoxCPM README (pip install, Python samples, CLI,
python app.py --port 8808, VRAM table, 30 languages, RTF sentences, ComfyUI ecosystem list, Apache-2.0): https://github.com/OpenBMB/VoxCPM/blob/main/README.md commit300e4260b509066151d623dc9c0aa922cf82232b. Repository HEAD is that commit, committed 2026-11-09T07:36:57Z app.py(--port8808,--host0.0.0.0, Gradio audio return,iic/SenseVoiceSmall): commit07c937b2956c5c122d736cfa1a9cd769965bfe5apyproject.toml(torch>=2.5.0,requires-python >=3.10,voxcpmscript): commit87af7d08544faf9951f5faf38fc4d1b10a28186asrc/voxcpm/core.py(from_pretraineddefaults,load_denoiser, zipenhancer id): commitd1400d6d21d953226dffd8df06cd7719fd027b67src/voxcpm/cli.py(--outputrequired,soundfile.write,openbmb/VoxCPM2): commit30118a33522ef2d8698fca9bebac7224af242395src/voxcpm/model/voxcpm2.py(self.sample_ratefromout_sample_rate): commit5e293dee2f4745d93ff6459886121467b41aaf1bsrc/voxcpm/modules/audiovae/audio_vae_v2.py(defaults 16000 and 48000): commit5e293dee2f4745d93ff6459886121467b41aaf1blora_ft_webui.py(port 7860,server_name="0.0.0.0"): commitcce58a5b59303c9bd63d12f23afe6a49a4a80c59LICENSE(Apache-2.0,Copyright OpenBMB): commit272b8ffbf660b0cfd07e20fdef538f335a4f92ca. GitHub license field Apache-2.0- Model cards
openbmb/VoxCPM2,openbmb/VoxCPM1.5, andopenbmb/VoxCPM-0.5B(apache-2.0,gatedfalse), read 2026-11-13. The VoxCPM2 card repeats ~8 GB - ComfyUI examples top-level directories (no VoxCPM directory): https://github.com/comfyanonymous/ComfyUI_examples commit
f9431bb000ce792094ff345446e22cac1ea6cef3 - Public GPU memory: https://cloudgpu.app/gpu-prices.json (
updated_at2026-11-13T10:09:27.510Z) and https://cloudgpu.app/v1/public/gpu-catalog (generated_at2026-11-13T10:09:28.527Z).GET /v1/public/compute-capabilitiesreturned feature flags and no GPU list. The catalog had no VoxCPM template
Cards you can start are on the Deploy page. Prices are on https://cloudgpu.app/pricing and are not repeated here.
Last updated: 2026-11-13 (Asia/Shanghai).