Train any voice. Hear it at 48 kHz.

Zero-shot cloning is never good enough for studio work. That's why we trained Robin: an open-weights model built for professionals in the open-source community. It launches with LoRA training scripts included and it renders at 48 kHz, the standard for film and video. Design a voice through text, re-voice your own takes with another voice or train a dedicated adapter model to always produce an exact voice using your own voice data.

Parameters3.58 B
Output48 kHz FLAC
LoRA trainingScripts included
GPU memory8 GB
LanguagesEnglish · Japanese
Weightsrobin_v1 · open_
Try RobinChecking the studio
0 / 400
0 / 300

Describe a voice, type up to 400 characters, and Robin reads it twice.

Take A
0:000:00
Take B
0:000:00

All takes generated through audiorobin.io are .mp3 for the sake of web performance. Generations created using the inference scripts provided will be FLAC.

How it worksSignal path

A planner writes the speech as tokens. A decoder turns that plan into sound, reading the planner's memory at every layer as it goes.

TEXT Well, that went better than expected [laughs] VOICE DESCRIPTION a warm, unhurried baritone, close to the mic SOURCE TAKE · RE-VOICE a take to perform again TEXT TOKENIZER byte-pair pieces words to token ids SPEECH TOKENIZER CosyVoice 3 6,561 codes 25 per second prompt speech tokens PLANNER Autoregressive transformer 2.17 B parameters 28 layers · 2,048 wide 16 heads, 8 key/value writes one speech token at a time, 25 per second speech tokens 25 / s layer memory (KV cache) DECODER Flow-matching transformer 1.41 B parameters 28 layers · 2,048 wide 32 denoising steps turns noise into acoustic frames that follow the plan Trained from Scratch using 10 million audio clips for 3 days on a single RTX 6000 Pro. latents decoded 48 kHz audio trained frozen
Text and a voice description reach the planner as a prompt. For the voice changer, your take reaches it as speech tokens from the CosyVoice 3 tokenizer.
Train a voiceLoRA, on your machine, day one

A ten-second sample can't carry a voice's range. Robin instead learns new speakers through low-rank adaptation (LoRA) on transcribed recordings of the target voice. Adapters are trained on both networks while their pretrained weights stay frozen, and each voice is saved as a single file whose strength is set at inference.

PLANNER · ROBIN'S WEIGHTS FROZEN × 28 layers Attention: q, k, v + LoRA · rank 32 Attention: out + LoRA · rank 32 MLP: gate, up + LoRA · rank 32 MLP: down unchanged DECODER · ROBIN'S WEIGHTS FROZEN × 28 layers Attention: q, k, v + LoRA · rank 64 Attention: out + LoRA · rank 64 MLP: gate, up + LoRA · rank 64 MLP: down unchanged trained in your run frozen
Build a voice datasetBefore you train
The folder, then the checkRequired
$tree my_voice/
my_voice/
├── line_001.txt   # what line_001.wav says
├── line_001.wav
├── line_002.txt
├── line_002.wav
├── …
└── voice.txt      # optional: text description of voice
                     attributes and qualities
$python -m robin prep my_voice/
Checked 212 clips in my_voice
  ready: 209 clips, 21.4 minutes of speech
  left out: 3 clips
    no transcript (add a .txt file with the same name): 2
      line_118.wav
      line_204.wav
    almost silent: 1
      line_150.wav
  voice description (voice.txt): 'A warm, unhurried baritone.'

Example report. Run the check before training, or press Check data in the app. It lists clips it will leave out (no transcript, silent, too short or too long) and notes in plain words: clipping, digits, low sample rates, transcripts that may not match, repeated lines.

Recommendations for datasets:

  1. How much

    We recommend using at least 15 minutes of speech or more. Our test trains averaged 20 minutes of audio that was split into approximately 200 individual clips for a single voice.

  2. Each clip

    One or two sentences, 3 to 15 seconds. Anything from 1 to 30 seconds is accepted, so split longer takes.

  3. Recording

    One speaker in a quiet, dead-sounding room, with the same mic and distance throughout. No music, effects or other voices. Keep peaks around −6 dBFS.

  4. Format

    WAV or FLAC at 44.1 or 48 kHz. Lower rates train a duller top end, and clips below 16 kHz are left out.

  5. Transcripts

    Exactly the words spoken. Write numbers the way they're said ("fifty percent"), and mark sounds and delivery with tags like [laughs], [sigh], [crying] or [shouting] where they happen. Re-record a stumble instead of transcribing it.

  6. Range

    Mix statements, questions and exclamations, short lines and long ones. A calm read trains a calm voice, so record the delivery you want back.

TipThe surest way to exact transcripts: write the script first, then record it line by line. The script is the transcript.

Listenrobin_v1
Laugh[laughs]
So I told him the cat was the manager now, [laughs] and he actually believed me.

A kind older man with a soft, slightly husky voice, patient and good-humoured.

Cough[coughs]
Sorry, give me a second. [coughs] The dust in this attic is unbelievable.

A man in his thirties with a clear, medium voice, a little out of breath.

Describewords
Okay, big news: the bakery on the corner finally started making the cinnamon knots again.

A bright, fast-talking woman in her twenties with an American accent, upbeat and playful.

Voice changertake
Okay, so the plan is simple: we wait until the bakery opens, and then we buy every single cinnamon roll.

The same take, re-voiced from a description: a warm, low-pitched man in his fifties with a slight rasp.

Japanese · 日本語robin_v1

Robin speaks Japanese from the same plain-English voice descriptions, and can switch between Japanese and English in a single line.

Weatherja
おはようございます。今日は一日中、雨が降る予報です。傘をお忘れなく。

A calm, clear Japanese woman in her thirties with a standard Tokyo accent, reading the morning weather report.

Folk taleja
昔々、山の奥の小さな村に、一人のおじいさんが住んでいました。

A warm, slightly gravelly Japanese man in his seventies, telling an old folk tale slowly and gently.

Surprisedja
えっ、本当に?あのケーキ、全部一人で食べちゃったの?

A bright, lively Japanese woman in her early twenties from Tokyo, surprised and teasing.

Stationja
まもなく、一番線に電車がまいります。危ないですから、黄色い線の内側までお下がりください。

A polite, crisp Japanese male station announcer in his forties, clear and steady.

Mixedja + en
明日のミーティングは午後三時からです。Please don't be late!

A friendly bilingual Japanese woman in her thirties who switches easily between Japanese and English.

HardwareMeasured, bf16

Peak GPU memory for each job, measured on one workstation GPU. A short line takes one to two seconds.

16 GB card 24 GB card Speak Change a voice Train a voice 8.2 GB 9.1 GB 9.9 GB 0 8 16 24 GB
Get RobinThree ways in

Command line

# train a voice from a folder
python -m robin train my_voice/ \
  --model robin/ \
  --out my_voice_lora/

# speak in a described voice
python -m robin speak \
  "Well, that went better
   than expected [laughs]" \
  --model robin/ \
  --voice "a warm, unhurried
   baritone, close to the mic"

ComfyUI nodes

  • Robin Loader
  • Robin Speak, with long text read in steady pieces
  • Robin Voice Changer
  • Robin LoRA, at any strength
  • Five example workflows

Robin app

  • python -m robin gui, runs locally in your browser
  • Speak with two takes side by side
  • Voice changer from a description
  • Train a voice with live progress and a sample at every save