OpenVoice V2 Free Runs offline

Record once. Your voice reads the rest.

Give it one clean clip of you talking. It reads any new script in your voice, in six languages, on your own laptop. Free.

Does it actually sound like me?
•The real voice

One clip, recorded once. This is the voice it learns from.

OpenVoice, from that clip
Never recorded. Made offline on a Mac

Two lines that voice never said, one of them in Spanish. Tap to hear both.

Real output, made 11 Oct 2026 on an M4 Pro Mac in about 2 seconds a line. The voice is the project's own sample. Sound on.
Get the free setup guide

By Raj Singh · October 2026 · 7 min read

FREE SETUP GUIDE

Get it working first time.

  • The download link that still works (the README's is dead)
  • Four install fixes for Apple Silicon Macs
  • One script that turns any text into your voice
  • How to record a sample that clones well
  • What it copies from you, and what it can't

One email opens every guide in the library.

One email. No follow-up unless I ship something that fits.

WHAT YOU NEED
  • A Mac with Python 3.10 and `uv`. The docs say Python 3.9 on Linux. 3.10 on an M4 Pro worked for me, on the CPU, no GPU needed.
  • About 3 GB of disk. 2.8 GB of Python packages and 125 MB of model files.
  • `ffmpeg`. It loads your sample through it, even a .wav. brew install ffmpeg.
  • A clean sample of you talking. 10 to 60 seconds, one speaker, no music, no long silences. A phone voice memo in a quiet room is enough.
  • Know the project is quiet. The last code change was April 2025 and V2 shipped April 2024. That is why the official install has rotted, and why this guide exists.
INSTALL

The install that works on Apple Silicon

The README's steps fail on a Mac in four places: a pinned speech library with no Apple Silicon build, a missing pkg_resources, and two downloads that wait for a keypress or a data file. This sequence fixes all four up front. Run it inside the cloned folder.

terminalinstall
$ git clone https://github.com/myshell-ai/OpenVoice.git && cd OpenVoice $ uv venv -p 3.10 && source .venv/bin/activate $ printf 'faster-whisper>=1.0.3\nav>=12\n' > overrides.txt $ uv pip install -e . --override overrides.txt $ uv pip install git+https://github.com/myshell-ai/MeloTTS.git --override overrides.txt $ uv pip install "setuptools<70" huggingface_hub $ python -m unidic download
terminalmodels and first-run data
# the README's S3 link returns NoSuchBucket; the same V2 files live on Hugging Face $ python -c "from huggingface_hub import snapshot_download as s; s('myshell-ai/OpenVoiceV2', local_dir='checkpoints_v2')" $ python -c "import nltk; nltk.download('averaged_perceptron_tagger_eng')" $ python -c "import torch; torch.hub.load('snakers4/silero-vad', 'silero_vad', trust_repo=True)"
Why the overridesOpenVoice pins faster-whisper==0.9.0, which pulls a version of av that has to compile from source and stops with pkg-config is required for building PyAV. The override lets a newer one with a Mac build in.
CONFIGURE

One script: sample in, your voice out

Save this as say.py in the OpenVoice folder. It captures your voice from the sample, has the built-in English speaker read your text, then swaps that speaker's voice for yours. I ran it exactly as printed.

say.pythe whole thing
import sys, torch from openvoice import se_extractor from openvoice.api import ToneColorConverter from melo.api import TTS sample, text, out = sys.argv[1], sys.argv[2], sys.argv[3] conv = ToneColorConverter("checkpoints_v2/converter/config.json", device="cpu") conv.load_ckpt("checkpoints_v2/converter/checkpoint.pth") me, _ = se_extractor.get_se(sample, conv, vad=True) tts = TTS(language="EN_NEWEST", device="cpu") base = torch.load("checkpoints_v2/base_speakers/ses/en-newest.pth", map_location="cpu") tts.tts_to_file(text, tts.hps.data.spk2id["EN-Newest"], "base.wav", speed=1.0) conv.convert(audio_src_path="base.wav", src_se=base, tgt_se=me, output_path=out, message="@MyShell")
settingdefaultwhy I change it
languageEN_NEWESTPick ES, FR, ZH, JP or KR for those languages, and load the matching file from base_speakers/ses/.
speakerEN-NewestThe EN model also has EN-US, EN-BR, EN_INDIA, EN-AU. The accent comes from this choice, not from your sample.
speed1.0I leave it. 0.9 suits slower course narration.
tau0.3How strongly it pushes toward your voice. I leave the default; raise it a little if the result sounds too much like the base speaker.
message@MyShellHides an inaudible watermark in the audio. I keep it on, so cloned audio can be identified as generated.
devicecpuFine on Apple Silicon. Use cuda:0 on an Nvidia machine.
DAILY DRIVING

Fix a line without the mic

terminala line in your voice
$ python say.py me.wav "This line was never recorded." line.wav → line.wav, about 1.8 seconds of you
  • Record the sample once. Quiet room, your normal delivery, 30 seconds or so. Convert it to .wav if your phone saved .m4a: afconvert -f WAVE -d LEI16 memo.m4a me.wav.
  • Make each line. python say.py me.wav "New intro line here." intro.wav. On my Mac a 3.4-second line took 1.9 seconds once the models were warm.
  • Drop it in your editor. Each line is a separate .wav, so it slots into CapCut, Descript or Premiere over the old take.
Use it on yourselfClone your own voice, or a voice you have written permission to use. Say in the caption or credits when a line is generated.
WHEN IT DRIFTS

What broke on my install, and the fix

`NoSuchBucket` or a 314-byte zip
The README's checkpoint link is dead. Download myshell-ai/OpenVoiceV2 from Hugging Face as in INSTALL.
`pkg-config is required for building PyAV`
The old faster-whisper pin. Reinstall with --override overrides.txt.
`No module named 'pkg_resources'`
Newer setuptools dropped it. uv pip install "setuptools&lt;70".
`No such file or directory: 'ffmpeg'`
brew install ffmpeg, then open a new terminal.
`EOFError` while loading silero
It is waiting for you to trust a download. Run the trust_repo=True line from INSTALL once.
You re-recorded the sample but it sounds the same
It caches your voice in processed/ by file name. Delete that folder or rename the sample.
What it can't copyThe project's own Q&A is clear: it copies the tone of your voice, not your accent or emotion. Those come from the base speaker. A noisy or short sample is the usual cause of a bad result.
THE SHAPE OF IT

Where everything lives

checkpoints_v2/converter/the voice-swap model and its config checkpoints_v2/base_speakers/ses/one file per built-in speaker and language processed/<sample name>/your captured voice, cached openvoice/the library code demo_part3.ipynbthe project's V2 notebook, the source of `say.py`

To move machines, rerun INSTALL and copy your sample .wav. Nothing else is worth keeping; the cache rebuilds in under a second.

That is the whole thing

A Hugging Face download instead of the dead link, three overrides, one twelve-line script, and a new line in your voice costs two seconds instead of another session at the mic.

Open on GitHub →

↑ Unlocks the moment you submit the form above.

RS
WRITTEN BY

Raj Singh

I'm Raj Singh, founder of DebtOps.ai and a Claude certified partner. Over the last five years I've managed $25M in ads, built AI solutions for Fortune 100 companies, and installed AI operating systems and AI brains inside small businesses. Everything here is something I've shipped, debugged, or watched a client ship. My goal with AgileSingh is to make you irreplaceable in this AI age.

$25M
Ads managed · 5 yrs
F100
Enterprise AI builds
Claude
Certified partner
36
Guides shipped
More guides

Make the whole video, not just the voice.

The MoneyPrinterTurbo guide turns a topic into a finished short, and the Brag guide makes a launch video for anything you ship.

Keep going

Back to all systems