Enroll from a recording
Cleaned on bigfoot (DeepFilterNet), then split by speaker and transcribed (Parakeet). About a minute for a 15-minute file.
Names from step B become voices. Zero-shot is instant. They appear in the Voice list for synthesis.
Your new voice is selected in Synthesize — type text and Generate.
Synthesize
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.
Documents
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.
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.
Storage
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.
Sweep what nothing references
One-off Synthesize outputs and finished reader jobs, older than the given age. Render archives are never touched by this.
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.
Create a voice — record
_, -. No spaces. Must start with a letter.Create a voice — upload
_, -. No spaces.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 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.
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.
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%.
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.
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.
Manage voices
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.
- Upload 5–30 min of clean, single-speaker audio.
- 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.
- Review the segments; edit any misheard text in place.
- Name the new voice (e.g.
Bradley_LoRA1) and submit. Training runs in the background on pinkie's 3060 (~15–60 min). - When done, the new voice appears in the list with a
lora marker. Select it and synthesize as usual — the adapter hot-swaps automatically.
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.