Enroll from a recording

A · Upload & clean
Analyze recording
DeepFilterNet (neural denoise)

Cleaned on bigfoot (DeepFilterNet), then split by speaker and transcribed (Parakeet). About a minute for a 15-minute file.

Start enrollment
B · Review & name speakers
Run step A first.
C · Create voices

Names from step B become voices. Zero-shot is instant. They appear in the Voice list for synthesis.

Create named voices
D · Generate

Your new voice is selected in Synthesize — type text and Generate.

Synthesize

Ultimate cloning (use transcript) Apply voice style (non-ultimate only)
Temperature Keep for this voice

Fixed seed New seed
Pause between sentences

Fix a seed to compare settings fairly: without one every take is a different read, and that difference can swamp the one you are listening for.

Generate
The same take from the command line (voxsay)
Play aloud Save as Text from file Quiet

  
Copy CLI

Documents

Add documents (PDF, EPUB, MOBI/AZW3, .txt, .md)
  Drop files here — or click to choose
no files selected
Queue a render after upload
Override temperature

bigfoot is the default and costs nothing but time. Renting is for when you want a book now; leave the part box empty to render the whole thing. Temperature is the voice's own unless you override it, and it applies to the render this queues — not to the document, which can be rendered again at any other setting.

Add documents

Documents live on bigfoot and show up in the iPhone app's library under “On bigfoot”. PDFs keep their first 500 pages.

People

Render requests waiting for you

A render is hours of the one GPU, so anyone who is not an admin has their submissions held here until you say yes to that particular job.

Accounts

Each person gets a token. The app and this page send it with every request; anyone without one is public and sees only what has been shared with everyone. While there are no accounts at all, every request is treated as an admin — creating the first one is what turns the lock on, so make it your own and sign in with it before handing anyone else a token.

admin Create account

Storage

loading… Refresh

Compact render archives

Re-encodes every archived sentence from wav to FLAC — lossless, and verified sample-for-sample before the wav is deleted. Gives back about 58%. The archive keeps working exactly as before: playback still hits it, audiobooks still assemble from it, and a cast change still re-renders only the lines that changed. A book being rendered right now is skipped.

Compact all

Sweep what nothing references

One-off Synthesize outputs and finished reader jobs, older than the given age. Render archives are never touched by this.

days What would go? Delete them

Reader

Default voice: Pemberton. Paste long text and the reader will queue chunks for continuous playback.

Loads a document from the library straight into the text box.

On iPhone, tap this to take a picture of a printed page and have it read aloud.

Read photo page
Read PDF
Start reading Cancel

Create a voice — record

Read this aloud (aim for natural pace, ~25 seconds)
loading…
● Record Stop
Letters, digits, _, -. No spaces. Must start with a letter.
Save voice

Create a voice — upload

Letters, digits, _, -. No spaces.
What to do with it

Cloning on its own is the normal path. Mixing saves the clip as a voice first — it is never lost — and then opens the mixer with it already selected.

Save voice

Create a voice — design

Describe a voice and the model invents one — no reference recording, no licence to check. Each take is a different person, so roll until you hear one you want, then keep it. Keeping freezes that take as the reference clip, after which it behaves like any other enrolled voice.

Seed
🔓 free
Description strength 2.0
Expressiveness 1.0

Seed is the identity. The description says what kind of person; the seed picks which one. Lock it and edit the words to change one person — leave it free and every roll is a stranger. Each take shows the seed that made it, so a good accident is never lost.
Description strength is how hard the model is pushed toward your words. High obeys but sounds mannered; low drifts to a generic reader.
Expressiveness scales the sampler’s noise. Below 0.8 it pads with silence, so it stops there.

Generate a take

Create a voice — mix two into a third

Two voices in, one new person out. Keep the take you like and it becomes an ordinary voice — from that moment it owes nothing to either parent. There are two ways to do it and they fail differently, so the method is a choice, not a detail.

Mix 50% / 50%

Hold the seed to compare weights fairly — otherwise every step of the dial is also a different roll. Match content renders one voice saying the other’s enrollment words so the two clips differ only in speaker; it costs one generation the first time and is cached. Measured as a small effect that slightly weakens the extremes, so it is off by default — try it if the middle sounds smeared.

Spoken by is who reads the words before they are converted. Only content and timing survive, so it is not a third parent — but it is not neutral either. Same pair, same weight of 0.50, same seed, measured 2026-08-23: reading it in A’s voice landed at 38% across, in B’s at 58%, and in an unrelated voice at 57%. A drags the result toward A, and any third voice gives you the honest midpoint. It defaults to A because that always exists; pick someone else if 50% should mean 50%.

Generate a take Sweep 5 weights

Create a voice — blend two

Cross two enrolled voices into a third. Generation takes two separate audio conditions and normally gets the same voice twice; give it two different ones and the result is neither parent. Reference goes in as an isolation prefix. Continuation is appended with its transcript, and the model carries on speaking after it.

This does not make a third voice. Judged by ear and confirmed by measurement, 2026-08-22. What comes out is one of the two parents, not a person between them — and sometimes it is first one and then the other, switching partway through the passage. Matching each quarter of the output against each parent rendered alone: Pemberton+Nan is Nan in all four quarters; Grady2 beats Spencer in both slot orders, so it is not the slot that decides but which voice is stronger; and Grady2+Pemberton is Pemberton for three quarters and then flips to Grady2 for the last. A solo voice matches itself at 0.998 in every window, flat — a blend drifts.

What does carry across is pacing: duration tracked the continuation side in all six. So this is useful for lending one voice another’s speed and phrasing, and it is worth an audition for that. It is not a voice mixer, and no slider added here would make it one — there are two competing anchors and the model picks between them rather than averaging. A true blend needs a single conditioning anchor built from both voices, which is the graded version still to come.

The continuation voice must have a usable transcript — the model has to be told what it is hearing before it can continue from it. A voice with a LoRA can still be used, but the adapter is not applied to either side: a trained identity would simply overwrite the half it was trained on.

Generate a take

Manage voices

loading…

Train LoRA — improve a voice

LoRA fine-tuning teaches the model a specific voice more deeply than zero-shot cloning. Use when zero-shot output doesn't capture cadence, accent, or character well enough.

  1. Upload 5–30 min of clean, single-speaker audio.
  2. Provide a transcript. Either attach one you already have (.txt, .srt, .vtt, .json) or click Transcribe with Whisper. Whisper is only started if no transcript is supplied.
  3. Review the segments; edit any misheard text in place.
  4. Name the new voice (e.g. Bradley_LoRA1) and submit. Training runs in the background on pinkie's 3060 (~15–60 min).
  5. When done, the new voice appears in the list with a lora marker. Select it and synthesize as usual — the adapter hot-swaps automatically.
Faster path: to train on the RTX 3090 and keep synthesis online, use Enroll from a long file (step B → per-speaker LoRA mode) — it trains on bigfoot with audio-aligned Parakeet transcripts. This upload flow is the manual, single-file alternative. This upload flow trains on pinkie's 3060 and pauses synthesis until done (VoxCPM auto-reloads on your next Generate). Transcription (step 2) runs on bigfoot's 3090, so only the training step is local.

Accepted: plain .txt (aligned via silence detection), .srt/.vtt with timestamps, or .json in the form {"segments":[{"start":0,"end":5,"text":"..."}]}. Leave empty to transcribe with Whisper in the next step.

Upload
Back to Studio Violet Done