Speech synthesis / voice cloning
Self-hosting OpenVoice: a 131MB tone color converter that clones six languages on a budget card
OpenVoice is one of the last voice cloning stacks that is genuinely small — MIT licensed, purely feed-forward, under 350MB of weights end to end. Here is what actually separates V1 from V2, what your reference audio must look like, and the dependency traps you will hit.
OpenVoice · self-hosted
OpenVoice comes from Qin Zengyi (MIT), Zhao Wenliang and Yu Xumin (Tsinghua), and Sun Xin (MyShell), published as arXiv:2312.01479, "OpenVoice: Versatile Instant Voice Cloning". The code lives at github.com/myshell-ai/OpenVoice with 37k stars, and both V1 and V2 are MIT licensed — free for commercial and research use. Architecturally it has nothing in common with the LLM-style TTS models that followed it: a base speaker TTS reads the text, then a separate tone color converter repaints that audio with the reference speaker's timbre. That split explains every strength and every limitation. The converter is a feed-forward flow model with no autoregressive token loop, so latency is stable and predictable — but it only handles timbre. Accent, emotion, and rhythm all come from the base speaker.
The numbers are absurdly small. V2's converter checkpoint.pth is 131,320,490 bytes (~125MiB), and its config declares a 22050Hz sample rate, hop 256, hidden dim 192, 6 layers, gin_channels 256, and HiFi-GAN upsampling of [8,8,2,2] — classic VITS lineage. V2 swaps the base speaker to MeloTTS, one fp32 checkpoint per language: 207,770,124 bytes for Chinese, 207,602,918 bytes for English v3. So the most common path, cloning a voice into Chinese, totals roughly 340MB of weights. Issue #48 in the repo reports about 3GiB of system RAM and about 1GiB of VRAM at init. The practical conclusion: renting an H100 for OpenVoice is pure waste. The real question is never "will it fit" but "how many concurrent workers fit on one card".
Now the honest part. The OpenVoice repo's last code push was 19 April 2025, and V2's weight bundle is still checkpoints_v2_0417.zip from April 2024. There is no V3 — MyShell's HuggingFace org has only published DreamVoice and ShellAgent since. This line has settled. The main consequence is frozen dependencies: requirements.txt pins numpy==1.22.0, librosa==0.9.1, gradio==3.48.0, faster-whisper==0.9.0, with Python 3.9 as the official environment, which simply will not install against today's NumPy 2.x. If you want richer prosody and emotion, Apache-2.0 CosyVoice (23k stars, still actively pushed) is the other road. If you want cheap, controllable, latency-stable synthesis at tens of thousands of clips per batch, OpenVoice is still one of the best value-per-dollar options available.
01 —
Versions and weights: exactly which files you need
V2 is not one model — it is a MeloTTS base speaker, a tone color converter, and a set of speaker embeddings
| Version | Parameters | VRAM | Context | Notes |
|---|---|---|---|---|
| OpenVoice V2 tone color converter (checkpoints_v2_0417) | converter/checkpoint.pth = 131,320,490 B (~125MiB, fp32) | ~0.13GB resident weights; ~1GB in practice with CUDA context and activations | 22.05kHz mono output, zero_g=true, 6 layers / hidden 192 / gin 256 | The heart of the pipeline: it changes timbre only, never content. V1 and V2 converters are nearly identical in size but the weights differ — do not mix them. |
| MeloTTS base speakers (EN / ES / FR / ZH / JP / KR) | ~208MB fp32 each; Chinese 207,770,124 B, English v3 207,602,918 B | ~0.21GB per language; ~1.25GB with all six resident | The Chinese base speaker code-switches natively — the official demo text mixes Chinese and English | Pronunciation, accent, speed and phrasing in V2 come entirely from here. OpenVoice itself contributes none of it. |
| V2 source speaker embeddings, base_speakers/ses (11 files) | ~1.7KB .pth each — a 256-dim gin vector | Negligible | en-newest / en-us / en-br / en-au / en-india / en-default / es / fr / zh / jp / kr | Must match the MeloTTS speaker_id you synthesised with. Mismatch it and the converted voice drifts and sounds mechanical. |
| OpenVoice V1 (checkpoints_1226) | EN and ZH base speakers 160,467,309 B each; converter 131,327,338 B; 452MB total on HF | Issue #48 measured ~1GiB VRAM plus ~3GiB RAM initialising BaseSpeakerTTS | Native base speakers for English and Chinese only | The only release with emotional style tags (whispering / cheerful / sad and others). V2 dropped that style control, so if you need emotion you stay on V1. |
| Target speaker embedding, target_se | Output of se_extractor.get_se(), a 256-dim tensor | Negligible | Reference audio must be clean, single-speaker, long enough, and free of long silences | Extract once, save it as a .pth, reuse it. Re-running VAD segmentation on every synthesis is where your wall-clock time actually goes. |
02 —
Which card to rent: pick by concurrency, not capacity
Under 350MB of weights means VRAM capacity was never the bottleneck — per-process CUDA context and single-card throughput are
First run: install, pull weights, extract one voice, synthesise a test clip
Tesla V100 32GB$0.188/GPU-hr
The cheapest tier we rent, with 32GB that is comically oversized for this stack, and Volta is stably supported by every PyTorch release — exactly what you want while wrestling that Python 3.9 dependency set.
Day-to-day development: Gradio tuning, swapping reference clips to A/B the result
RTX 3090 24GB$0.193/GPU-hr
Ampere is the least painful target for current CUDA and torch builds, for half a cent more than the V100 — the right trade when your loop is edit one line, restart the process.
Production API: dozens of concurrent real-time streams with low, stable time-to-first-audio
RTX 4090 24GB$0.540/GPU-hr
The converter is feed-forward, so per-request compute is tiny; the 4090's high clock throughput saturates concurrency, and 24GB holds a dozen-plus resident worker processes.
All six languages resident plus a bulk offline dubbing pipeline
RTX A6000 48GB$0.817/GPU-hr
Six MeloTTS base speakers plus the converter is only ~1.38GB of weights; what actually consumes VRAM is 0.3–0.5GB of CUDA context per worker, and 48GB lets you stop counting processes.
03 —
Four steps from empty instance to your first cloned clip on NexGPU
Each step flags the place people actually get stuck
- 01
Boot an instance and build a Python 3.9 environment
Launch from a NexGPU PyTorch prebuilt image and SSH in. Build a Python 3.9 environment as the project requires — requirements.txt pins numpy==1.22.0 and librosa==0.9.1, which fail to build on Python 3.11 with NumPy 2.x. This is by far the most common first failure.
conda create -n openvoice python=3.9 -y && conda activate openvoice && git clone https://github.com/myshell-ai/OpenVoice.git && cd OpenVoice && pip install -e . - 02
Install MeloTTS and download the V2 weights
V2's base speaker lives in a separate repo and must be installed on its own; Japanese additionally needs the unidic dictionary. Unzipping checkpoints_v2_0417.zip gives you converter/ and base_speakers/ses/. If Silero VAD fails to download, drop the zip into ~/.cache/torch/hub/snakers4_silero-vad_master by hand and move on.
pip install git+https://github.com/myshell-ai/MeloTTS.git && python -m unidic download && wget https://myshell-public-repo-host.s3.amazonaws.com/openvoice/checkpoints_v2_0417.zip && unzip checkpoints_v2_0417.zip - 03
Extract the target timbre from your reference clip
Load the converter, then call se_extractor.get_se(); vad=True runs Silero to segment out silence. The reference must be clean, single-speaker, long enough, and without long blank stretches. Note that intermediates are cached under processed/ — if you change the audio but keep the filename, delete that folder or you will keep hearing the previous take.
target_se, audio_name = se_extractor.get_se('resources/example_reference.mp3', tone_color_converter, vad=True) - 04
Synthesise with MeloTTS, then convert the timbre
MeloTTS reads the text into tmp.wav, then convert() takes the source embedding (the matching file from base_speakers/ses) and your target embedding. Watch the message argument: the official demo passes "@MyShell", which embeds a wavmark watermark into the output. Decide what that parameter should be before you put a service in front of it.
tone_color_converter.convert(audio_src_path=src_path, src_se=source_se, tgt_se=target_se, output_path=save_path, message="@MyShell")
The real bill for ten thousand dubbed clips
Get it working on a Tesla V100 32GB at $0.188/GPU-hr: about 20 minutes to build the environment and install MeloTTS, under a minute to pull the 131MB converter and the 208MB Chinese base speaker, then half an hour extracting a voice and testing. Call it one hour: 1 × $0.188 = $0.188. For the batch, switch to an RTX 4090 at $0.540/GPU-hr. Take ten thousand clips averaging 12 seconds — 120,000 seconds, about 33.3 hours of audio. At a measured 8x real time (the feed-forward converter is usually faster; benchmark your own dependency set), that is 33.3 ÷ 8 ≈ 4.17 GPU-hours: 4.17 × $0.540 = $2.25. Output is 22.05kHz 16-bit mono, 44,100 bytes per second, so 120,000 seconds is about 5.3GB of wav; with 0.6GB of weights that is 5.9GB at the $0.414/GB-month median, or $2.44 a month, and pulling the 5.3GB back down costs 5.3 × $0.0081 = $0.043 at the median egress rate. Compute plus egress: $0.188 + $2.25 + $0.04 ≈ $2.48. Destroy the volume the same day and the storage line rounds to nothing. Billing is metered per second and priced per hour, compute billing stops the moment the instance stops — only storage keeps accruing until you destroy it. No minimum, no setup fee, no quota request.
04 —
Frequently asked questions
How much VRAM does self-hosted OpenVoice actually need? Is an 8GB card enough?
What is the difference between OpenVoice V2 and V1, and which should I deploy?
Why does the cloned voice have the wrong accent and none of the reference speaker's emotion?
My install keeps failing on numpy and librosa, and Silero VAD will not download. How do I fix it?
Can I use OpenVoice commercially, and is there a watermark in the output?
Is OpenVoice still worth deploying, or should I just use something like CosyVoice?
More in Speech synthesis
Start building on NexGPU
Enterprise R&D team or solo developer — either way, your first job can be running in minutes.
Sign up to browse live network pricing. No payment method required.
