Voice Changer Studio changes the voice in any video or audio file to a natural, human-sounding voice of your choice, or keeps the original speaker's voice while you rewrite what they say by editing text.
Works best in Google Chrome or Microsoft Edge.
Quick start
Once setup is done, every project follows the same eight steps.
- Open the app and enter your app password if asked.
- Drag your video or audio file onto Your video or audio (or click it to browse).
- In Pick a voice, filter by gender, accent and age, press the play button to hear samples, then click Use.
- Press Write out the speech. Every spoken line appears in the script as timed, editable text.
- Edit the script: type over lines, Remove lines, add new ones with + Line, and use Hear line to check wording.
- Choose a voice mode, then press Preview 20 seconds to hear the new voice on your own clip.
- Press Make new voice track. Watch it and switch between Original and New voice to compare.
- In Download, pick a format and press Download. The file lands in your Downloads folder.
One-time setup
Setup takes about 10 minutes and is done once. The app lives in the GitHub repo MyKyah70/Voices and runs on Cloudflare Pages; the voices come from your ElevenLabs account.
1. Get an ElevenLabs API key
- Sign in at elevenlabs.io. A paid plan (Starter or higher) is required for Voice Library voices and voice swapping.
- Go to elevenlabs.io/app/developers/api-keys (or the left sidebar: Developers > API Keys).
- Click Create API Key, name it
Voices, and turn on: Text to Speech, Speech to Speech, Speech to Text, Voices (Write), User (Read). - Copy the key right away. It is shown only once; if lost, create a new one.
2. Connect Cloudflare to GitHub
- In Cloudflare: Workers & Pages > Create > Pages > Connect to Git, then pick MyKyah70/Voices.
- Framework preset: None. Build command: leave blank. Build output directory:
public. - Click Save and Deploy.
3. Add the secrets
In the Pages project, open Settings > Variables and Secrets and add both as type Secret:
| Name | Value | Purpose |
|---|---|---|
ELEVENLABS_API_KEY | Your ElevenLabs key | Lets the app reach the voices. Stays on Cloudflare, never in the browser. |
APP_PASSWORD | A password you choose | Stops anyone who finds the link from spending your credits. |
4. Redeploy
Go to Deployments, open the menu on the latest one and choose Retry deployment. New secrets only take effect after a deploy. Every push to GitHub also redeploys automatically.
The screen
The screen has four numbered panels. On a computer, panels 1 and 4 stay pinned on the left while you scroll the script on the right, so the video is always in view.
| Panel | Where | What it does |
|---|---|---|
| 1. Your video or audio | Left, top | Drop zone, then the player: play/pause, timeline, captions of the current line, and the Original / New voice switch. |
| 2. Pick a voice | Right, top | Browse, filter and sample voices; click Use to select one. |
| 3. Edit the script | Right, below | Voice mode, fine tuning, the main action buttons, progress bar, status message, and the editable script. |
| 4. Download | Left, bottom | Choose an output format and download the finished file. |
The top bar shows your remaining ElevenLabs credits, a Password button if a password is set, and the User Guide button that opened this page.
Keyboard: Space plays and pauses the video whenever you are not typing in a box.
Opening a file
Drag any video or audio file onto panel 1, or click it to browse. To switch files later, press Open another file.
| Type | Formats |
|---|---|
| Video | MP4, MOV, AVI, WMV, MKV, MTS, M2TS, TS, FLV, MPEG, VOB, 3GP, WEBM, MXF, DV, RM and more |
| Audio | MP3, WAV, M4A, AAC, WMA, FLAC, AIFF, OGG, OPUS, AMR and more |
What happens behind the scenes: formats your browser plays natively open in a few seconds. Anything else goes through the built-in converter, which downloads once (about 30 MB), then makes a viewing copy and pulls out the sound track. The file info line under the player says converted for viewing when this happened. Your original file is never changed.
Large files: files over about 700 MB use the converter to read the sound, which can take a minute or two. Very long or 4K files work, but plan for the download step to take longer (see Downloading).
Coming back to a file: if you reopen the same file in the same browser, your saved script edits are restored automatically.
Choosing a voice
Pick the voice before you preview or build; you can change it at any time and rebuild.
- Voice Library tab: thousands of real-person voice models shared on ElevenLabs, sorted by what is trending.
- My Voices tab: voices already in your ElevenLabs account, including any you used before or cloned yourself.
- Filters: Gender (male, female), Accent (American, British, Australian, Irish, Scottish, Southern, Indian and more) and Age (young, middle aged, older).
- Search: type a description such as narrator, deep, warm, gravelly or cowboy.
- Listen: press the round play button on any voice to hear its sample. Press it again to stop.
- Select: click Use. The chosen voice is outlined and named under the list.
- Load more appears at the bottom when more matches are available.
Keep the same person's voice (edit their words)
To change what someone says without changing who is speaking, press Use the original speaker's voice (below the voice list).
- Open the video and press Write out the speech first; the app then copies the voice from the actual speech (up to 2 minutes, at least 10 seconds needed).
- Press Use the original speaker's voice and confirm you are the speaker, own the recording, or have their permission.
- Edit, add or remove lines, then press Make new voice track. Only your edited lines are spoken in the copied voice; everything else stays exactly as recorded.
The copy is saved in your ElevenLabs account (under My Voices) and reused next time you open the same file. It uses one of your plan's custom voice slots.
The first time you use a Library voice, the app adds it to your ElevenLabs account automatically; after that it also appears under My Voices. Your plan limits how many custom voices you can hold, so remove unused ones in ElevenLabs if you hit that limit.
Editing the script
Press Write out the speech and the app writes out everything said in the file as a list of timed lines. Long files are processed in parts; a 20 minute video takes about a minute. Press Write out again to start over (it asks first if you have edits).
Each line has its start time on the left, the words in the middle and its actions on the right.
| Control | What it does |
|---|---|
| Time button (blue) | Plays the video from just before this line. |
| Time box (below it) | Changes when the line starts. Type minutes:seconds, such as 1:23.4, and press Enter. Lines re-sort by time. |
| The words | Click and type to change what is said. Changes save as you type. |
| Hear line | Plays only this line in the selected voice, without touching the video. Good for checking wording and pronunciation. |
| Remove / Restore | Silences the line in the new track, or brings it back. |
| + Line | Adds a blank new line just after this one, ready to type. |
| Undo | Puts back the original words and start time. Shown only on changed lines. |
| + Add a line at the end | Adds a new line after the last one. |
Status tags: each line shows Original, Edited (orange edge), New line (green edge) or Removed (crossed out). Edited lines show what they used to say underneath. After a build, a red tag such as 1.2s too long means the new wording does not fit before the next line; shorten it or move the next line later.
Follow along: with Follow along while playing ticked, the script scrolls to keep the current line in view and highlights it in blue.
Saving your work
- Edits save automatically in this browser, per file. Reopening the same file restores them.
- Save script downloads your script as a
.jsonfile; Open script loads one back, for example on another computer. - Subtitles (SRT) downloads captions of the current script for YouTube or any video editor.
Voice modes and fine tuning
Choose Keep original delivery for lip sync and natural emotion; choose Fresh read, full accent when the new accent matters most.
| Keep original delivery | Fresh read, full accent | |
|---|---|---|
| Lines you did not change | Original speaker's timing, pauses and emotion, in the new voice | Read fresh by the new voice |
| Lines you edited or added | Read fresh by the new voice | Read fresh by the new voice |
| Accent | Mostly follows the original speaker's way of talking | Fully the new voice's accent |
| Lip sync | Very close | Close; lines start at the same moments |
| Needs the script written out | No (but needed for edits) | Yes (done automatically if missing) |
| Best for | Natural delivery, matching mouth movement | A clear change of accent or a full rewrite |
Fine tune the voice (click to expand in the app)
- Stability: lower gives more emotion and variety; higher gives a steadier, calmer read. Start at 0.50.
- Voice match: how closely the result sticks to the chosen voice. Start at 0.80.
- Expressiveness: adds style and drama. Leave at 0 for natural speech; raise slowly for narration.
- Clean up background noise: removes hiss and room noise from the original before swapping. Turn it off to keep room sound.
Changing the voice, mode or any of these settings means the next build regenerates the affected audio.
Previewing and making the new voice track
Preview a few spots first, then build the whole track once you like the voice.
Preview 20 seconds
- Move the player to a spot with speech and pause.
- Press Preview 20 seconds. The app builds the new voice for the next 20 seconds only and starts playing it.
- Try a different voice, mode or setting and preview again. Each preview costs about 300 credits.
Make new voice track
- Press Make new voice track. Progress shows in the bar and status line, line by line.
- When it finishes, the player switches to New voice and plays from the start. Captions show each line.
- Use Original and New voice under the player to compare at any moment.
- Make more script edits, then press Update new voice track. Only changed lines are regenerated; untouched parts are reused, so updates are fast and cheap.
How edits are blended: in Keep original delivery mode, the original wording of each edited or removed line is faded out, and the new line is placed at its start time. If a new line is longer than the gap, it is spoken slightly faster (up to 20%) to fit; anything still too long is flagged in red.
Downloading
Download unlocks after a full Make new voice track (a preview is not enough). Pick a format in panel 4 and press Download.
| Format | Type | Notes |
|---|---|---|
| MP4 | Video | Best all-round choice; plays everywhere. Default for video files. |
| MOV | Video | For Apple and editing software such as Final Cut. |
| MKV | Video | Accepts any picture format without conversion. |
| AVI | Video | For older players and software. |
| WEBM | Video | For the web; may need the picture converted, which is slower. |
| MP3 | Audio | Smallest audio file. Default for audio files. |
| WAV | Audio | Uncompressed, best for further editing. Instant. |
| M4A | Audio | Apple-friendly compressed audio. |
| FLAC | Audio | Lossless, smaller than WAV. |
| OGG | Audio | Open compressed format. |
Video quality: for files under 1.5 GB, the picture is copied as-is with the new sound track, so quality is untouched and the download takes seconds.
Audio-only files can only be downloaded in audio formats.
Credits and costs
The biggest cost is a full build in Keep original delivery mode: roughly 1,000 credits per minute of video, charged once per voice and settings. Figures are approximate; ElevenLabs Usage analytics shows exact use.
| Action | Approximate cost |
|---|---|
| Write out the speech | Billed by ElevenLabs per minute of audio (speech to text) |
| Preview 20 seconds | About 300 credits |
| Make new voice track, Keep original delivery | About 1,000 credits per minute |
| Each edited, added or fresh-read line | About 1 credit per character spoken |
| Hear line | About 1 credit per character (replaying the same line is free) |
| Update after edits | Only the changed lines |
| Downloading | Free |
Example: a 20 minute video uses about 20,000 credits for the full build, plus a few hundred per batch of edits. The Starter plan's 40,000 monthly credits cover about two such videos.
Tips for the most natural result
- Match the speaker. A voice close in gender and age to the original sounds most believable in Keep original delivery mode.
- Keep edits about the same length. A new line with roughly the same number of words as the old one fits the gap and the lip movement best.
- Write the way people talk. Use contractions and natural punctuation; commas and periods shape the pauses.
- Spell out tricky words the way they sound and check them with Hear line.
- Use punctuation for emotion. An exclamation mark or question mark changes the read; an ellipsis adds a hesitation.
- Turn stability down (0.30 to 0.45) for lively, emotional scenes; up (0.60 to 0.75) for calm narration.
- Clean source audio helps. Wind, music or overlapping voices in the original reduce quality; leave Clean up background noise on unless you need the room sound.
- Background music is replaced. The new track contains voice only. Add music back afterward in a video editor if needed.
- Only voice content you own or have permission to change, and do not use a voice to imitate a real person without their consent.
Troubleshooting
Most problems are fixed by a redeploy in Cloudflare or a hard refresh (Ctrl + F5) in the browser.
| Problem | Fix |
|---|---|
| Yellow banner: "Almost there" or "Server is missing ELEVENLABS_API_KEY" | Add the key in Cloudflare Settings > Variables and Secrets as a Secret, then Retry deployment and press Ctrl+F5. |
| Yellow banner: "Server not found" | You opened the page as a file on your computer. Use the Cloudflare link (pages.dev) instead. |
| Asked for a password again, or "Wrong or missing app password" | Click Password (top right) and enter the APP_PASSWORD set in Cloudflare. |
| "Could not load voices" with code 401 | The ElevenLabs key is wrong or was deleted. Create a new one, replace the secret, then redeploy. |
| Error about permissions, or code 403 from ElevenLabs | The key is missing a permission. Recreate it with Text to Speech, Speech to Speech, Speech to Text, Voices (Write) and User (Read). |
| Error about quota or credits | You are out of credits. Wait for the monthly reset or upgrade in ElevenLabs. |
| "Could not add this library voice" | Your plan's custom voice slots are full. Delete unused voices in ElevenLabs, or pick from My Voices. |
| File will not open | Check your internet connection (the converter downloads once). Files over about 2 GB may need trimming first. |
| "This file has no sound track" | The file has no audio to change. Check it plays with sound in another player. |
| No speech found when writing out | The audio is too quiet or is music only. Try a clip with clear speech. |
| A line runs long (red tag) | Shorten the new wording, or change the next line's start time to give it more room. |
| New voice drifts out of sync while playing | Press pause and play, or click the line's time button; the player re-syncs. |
| Download button is grey | Run a full Make new voice track first; previews cannot be downloaded. |
| Large video download seems stuck | It is recording in real time. Keep the tab open and in front; the status line shows the time recorded. |
| "Need at least 10 seconds of clear speech to copy a voice" | Press Write out the speech first so the copy uses real speech, or use a file with more talking. |
| "Could not copy the voice" | Your plan's custom voice slots may be full, or the key lacks Voices (Write). Delete unused voices in ElevenLabs or recreate the key with that permission. |
| Copied voice does not sound like the speaker | Copies are best from clean, single-speaker audio. Raise Voice match to 0.90, keep Stability near 0.50, and keep edited lines short. |
| User Guide button does nothing | Your browser blocked the new tab. Allow pop-ups for the site, or open the site address followed by /guide.html. |
| Script edits are gone | Edits are saved per browser and per file. Use the same browser, or Open script with a saved .json file. |
If something else goes wrong, take a screenshot of the status message and the browser window and send it to whoever maintains the app.