SAVRN
Search Contact SAVRN

Open-weight model · Text to speech

kokoro-inno-clone-tuner

by Jeremy Braun remsky/kokoro-inno-clone-tuner

Zero-shot voice tuner for Kokoro-82M. Outputs base Kokoro compatible voice packs @ [510, 1, 256]. Same passage for every voice, enrolled from the references. LibriTTS-R speakers are dev-clean held out from training.

Parameters10M
Context
Weights26.9 MB
Licenseapache-2.0
AccessOpen weights
Monthly Downloads216.4k

Runs On

What it takes to serve kokoro-inno-clone-tuner (10M parameters): the memory its weights need at each precision, and the cheapest way to rent enough data-center GPUs to hold them.

PrecisionWeightsMemory neededCheapest setupPer hourAlso fits
16-bit 0.0 GB 0.0 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00
8-bit 0.0 GB 0.0 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00
4-bit 0.0 GB 0.0 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00

Memory is the weights at that precision plus 20% for the runtime and a short context; a long context needs more. Prices are the lowest on-demand hourly rates in the SAVRN Index, read Sep 18, 2026.

Model Card

By Jeremy Braun, published under apache-2.0, revision 9b5e3c063fb3.

Zero-shot voice tuner for Kokoro-82M. Outputs base Kokoro compatible voice packs @ [510, 1, 256]. Same passage for every voice, enrolled from the references. LibriTTS-R speakers are dev-clean held out from training. Integrated into Kokoro-FastAPI (v0.9.0+) The pack is a plain tensor; torch.save(pack, "voices/amme.pt") makes it a voice file like any other, prefixed by accent and gender like the stock packs. The pitch-tracking ceiling is set automatically from the reference's harmonic spacing, so band-limited or archival sources land in the right octave without tuning. - enroll(..., fmax=180) overrides it if a voice still reads the wrong register. Enrollment embeds an input audio sample via…

Read Jeremy Braun's full model card
pip install inno-kokoro

Zero-shot voice tuner for Kokoro-82M.

Outputs base Kokoro compatible voice packs @ [510, 1, 256].

Samples

Same passage for every voice, enrolled from the references. LibriTTS-R speakers are dev-clean held out from training.

voice tuned reference
am_libritts1272
af_libritts5338
am_libritts6241
af_ameliaearhart
bf_janegoodall
am_vincentprice

Usage

Code available on Github: remsky/inno-kokoro.

Integrated into Kokoro-FastAPI (v0.9.0+)

pip install inno-kokoro

Enrolling a voice:

from inno_kokoro.enroll import Tuner, enroll, read
from kokoro import KPipeline

tuner = Tuner()  # pulls model.safetensors into the huggingface cache
pack, _ = enroll(*read("my_ref.wav"), tuner)

pipe = KPipeline(lang_code="a")
wav = next(pipe("Hello from a tuned voice.", voice=pack)).audio

The pack is a plain tensor; torch.save(pack, "voices/am_me.pt") makes it a voice file like any other, prefixed by accent and gender like the stock packs.

The pitch-tracking ceiling is set automatically from the reference's harmonic spacing, so band-limited or archival sources land in the right octave without tuning. - enroll(..., fmax=180) overrides it if a voice still reads the wrong register.

Architecture

Enrollment embeds an input audio sample via the baked speaker encoder and maps through model.safetensors to build the encoder side; prosody aspects are measured to build the predictor half. Everything loads from model.safetensors, no extra downloads:

  • speaker encoder: a 6.6M-param WeSpeaker ResNet34 distilled from UniSpeech-SAT-sv embeddings
    • matches within 0.002 speaker cosine on hold-out dev-clean (380mb fp32 -> 14mb fp16)
  • style head: the decoder (timbre) half of the pack comes from the speaker embedding (512) mapped to Kokoro style (256). Shifts along a learned spectral-tilt direction by the reference's measured tilt.
  • prosody blend: the predictor (prosody) half uses the stock Kokoro packs as a foundation:
    • Blended by nonnegative least squares to the reference F0 mean, F0 spread and syllable rate.
    • Packs more than 4 st from the reference's pitch are excluded.
    • Higher graded packs are weighted as preferred during selection.
  • prosody head (v0.2): a linear adjust on the blend from the reference's F0 mean and spread,
    • fitted to deltas optimized through the frozen predictor. enroll(..., head=False) skips it.

Enrollment runs in about 0.05 s per second of reference on CPU (a 30 s reference in 1.4 s) and 0.1-0.3 s total on a GPU, after the one-time model load.

Total model size @ fp16: ~24mb

Limits

  • English trained (LibriTTS-R) currently
  • Some texture/identity is traded to maintain audio quality and stability within Kokoro's range.
  • Rythym is a best-effort match to the speaker.
    • Prosody is a convex blend of stock prosody by pitch, spread and pace. Outside of that range, it will only pin to the nearest edge
  • Reference clip requirements:
    • 3 second minimum, up to a max of 30s
    • Reasonably free of audio artifacts
    • Single speaker

Training and Metrics

All stages: Kokoro frozen; LibriTTS-R train-clean-100 unless noted.

Trained via HF Jobs a10g-small; under $20 in GPU time:

v0.1.0 training notes - Stage 1: mapped speaker embedding to timbre: - Style head on a speaker-embedding cycle loss: clone, render, re-embed, cosine to the input audio embedding. - [10k steps: dev cosine ~0.92; nearest stock voice baseline 0.857] - Stage 2: the embedding alone missed texture and pitch; adjustments: - Augmented pitch and speed. Added losses via a WavLM layer-statistics L1, a small log-F0 error, and spectral-tilt. - [11k steps: dev cosine 0.934, DNSMOS 3.30] - Stage 3: tuned the encoder side to match the blended predictors: - Predictor half fixed to the blended rows, only the decoder half trained. - [3k steps: dev cosine 0.932, DNSMOS 3.48] - Stage 4: distilled the speaker encoder so enrollment needs no UniSpeech download: - WeSpeaker ResNet34 plus a projection, trained on `1 - cos(student, teacher)` over LibriTTS-R crops with synthetic channel damage; the style head is untouched. - [20k steps: hold-out dev-clean parity, DNSMOS equal; archival references sat about 0.05 behind the teacher] - Stage 5: the student lagged the teacher on archival references; synthetic damage had plateaued: - Mixed real public-domain archival broadcast audio into the distillation crops. - [8k steps: archival cosine up 0.03-0.05, DNSMOS unchanged]
v0.2.0 training notes - Stage 1: the blend under-predicted pitch range and sentence-final falls: - Fitted a predictor-half delta per speaker (426; adds VoxPopuli-en and Emilia-YODAS EN) - Targeted F0 mean, spread, IQR, pause fraction and speech time. - Ridge head from reference F0 mean + spread to the fitted delta. - [hold-out: F0 mean error 0.9 -> 0.45 st, spread 0.6 -> 0.35 st, IQR 0.9 -> 0.5 st] - Stage 2: the student trailed the teacher on public-speaking and in-the-wild references: - Added VoxPopuli and Emilia speakers to the distillation crops. - [8k steps: hold-out cosine VoxPopuli 0.976 -> 0.986, Emilia 0.964 -> 0.983; WavLM cosine 0.941 -> 0.944, DNSMOS unchanged] - Stage 3: the timbre half had only seen LibriTTS speakers: - Repeated v0.1.0 stage 3 with VoxPopuli and Emilia speakers in the draw. - [3k steps: WavLM cosine samples 0.927 -> 0.935, dev-clean 0.956 -> 0.959, VoxPopuli 0.926 -> 0.939, Emilia 0.931 -> 0.936; DNSMOS unchanged]


Measured on the shipped weights through the stock KPipeline: one fixed passage rendered for the seven sample voices plus ten hold-out dev-clean speakers, F0 by Praat over 6 s chunks with the reference's tracking ceiling applied to both sides.

metric v0.1 blend only v0.2 with head
speaker cosine (WavLM-sv), samples / dev-clean 0.926 / 0.956 0.935 / 0.959
F0 mean, render minus reference 0.65 st mean abs 0.8 st mean abs
F0 spread, render minus reference 0.65 st mean abs 0.5 st mean abs
DNSMOS 3.50 3.50

The head's gain is spread; on F0 mean it scatters more per speaker and flips the signed bias from -0.2 to +0.3 st.

Zero-shot identity benchmark

LibriSpeech test-clean, F5-TTS cross-sentence split (1127 utterances, 39 held-out speakers). Reference in, new sentence out, scored against the speaker's real recording. - normalized: how far the render sits between sounding like a stranger (0) and a second real take of the speaker (1) - RTF: RTX 4060 Ti

system SIM-o normalized ECAPA UTMOS RTF
ground truth (second recording) 0.695 1.00 0.656 4.10
F5-TTS v1 base 0.650 0.94 0.713 3.86 0.48
StyleTTS2 (LibriTTS zero-shot) 0.386 0.46 0.415 4.40 0.06
Inno v0.2 0.288 0.32 0.288 4.45 0.07
OpenVoice v2 0.227 0.23 0.316 3.80 0.12
Kokoro, nearest stock pack 0.167 0.15 0.215 4.25 0.06

Inno gets about a third of the identity, twice as close as the nearest stock pack (with UTMOS intact and keeping Kokoro's stable natural style).

StyleTTS2 is the same architecture with an unfrozen decoder, assumed to be the ceiling of this style space.

  • StyleTTS2: alpha 0.3, beta 0.7, 5 steps.
  • OpenVoice v2: MeloTTS EN-US, tau 0.3.
  • F5-TTS: 32 NFE, CFG 2.

Licenses and credits

Adapter weights and code: Apache-2.0, except the baked speaker encoder (enc.* in model.safetensors), which is CC BY-SA 3.0 (see below) - Built on hexgrad/Kokoro-82M (Apache-2.0, StyleTTS2 architecture) - The speaker encoder is a WeSpeaker ResNet34 (code Apache-2.0) - initialised from the VoxCeleb-trained ResNet34-LM weights (CC BY 4.0) - distilled from microsoft/unispeech-sat-base-plus-sv - (Microsoft UniSpeech, CC BY-SA 3.0 on GitHub); encoder weights under CC BY-SA 3.0 - Training data (no audio redistributed beyond the samples): - LibriTTS-R (CC BY 4.0), also the LibriTTS sample references - VoxPopuli (CC0) - Emilia-YODAS EN (CC BY 4.0) - Sample references: - Amelia Earhart from "Speech by Amelia Earhart", Library of Congress AFC 1986/022 - Jane Goodall from BBC Woman's Hour excerpt, BBC, CC BY 3.0 - Vincent Price public domain from "The House On Haunted Hill"

Only clone voices you have permission to clone, even the shallow cloning offered via this model and technique.

Configuration

Model type
kokoro-inno-reference-tuner

Identity and Version

Repository
remsky/kokoro-inno-clone-tuner
Publisher
Jeremy Braun
Task
Text to speech
Modality
Audio
Library
Not stated by the source
Parameters
10M parameters
Languages
en
Revision
9b5e3c063fb34a63633d7921067af3c4ee966847
First published
2026-08-31
Last updated
2026-09-15

Files and Weights

26 files, 40.0 MB in total. The weights are 7 files totalling 26.9 MB in pt, safetensors.

Weights7 files · 26.9 MB
Configuration2 files · 3.0 KB
Documentation2 files · 22.8 KB
Other13 files · 13.1 MB
Repository2 files · 184 B
Every file
FileTypeSizeSHA-256
model.safetensorsWeights23.8 MB 71cb8e93544f
voices/af_ameliaearhart.ptWeights523.9 KB c6425f7d84d0
voices/af_libritts5338.ptWeights523.9 KB 5e9b4aa7df82
voices/am_libritts1272.ptWeights523.9 KB d788518b9995
voices/am_libritts6241.ptWeights523.9 KB d4c46e75f3ee
voices/am_vincentprice.ptWeights523.9 KB 4b8c5d1bd57f
voices/bf_janegoodall.ptWeights523.9 KB e37ae8c05812
config.jsonConfiguration1.6 KB
make_samples.pyConfiguration1.4 KB
LICENSEDocumentation11.4 KB
README.mdDocumentation11.4 KB
samples/amelia_earhart_clone.wavOther793.2 KB 81d9074d8b16
samples/amelia_earhart_ref.wavOther2.6 MB a9fdcfb9cc11
samples/david_attenborough_ref.wavOther720.1 KB ea9f5e3864d8
samples/jane_goodall_clone.wavOther817.2 KB e2ceee817394
samples/jane_goodall_ref.wavOther3.0 MB c6e82a71e0ce
samples/libritts_1272_clone.wavOther841.2 KB 42494898b8f9
samples/libritts_1272_ref.wavOther384.0 KB 517fe54c42ff
samples/libritts_5338_clone.wavOther838.8 KB 43010dc3ef73
samples/libritts_5338_ref.wavOther384.0 KB 32876bcbb6ba
samples/libritts_6241_clone.wavOther902.4 KB b3b5440ce8a8
samples/libritts_6241_ref.wavOther384.0 KB 291f97ba64e3
samples/vincent_price_clone.wavOther958.8 KB addf75f15405
samples/vincent_price_ref.wavOther384.0 KB c8e1c1e6f303
.gitattributesRepository133 B
.gitignoreRepository51 B

License and Download

License
apache-2.0
Access
Open weights, no gate
Download size
26.9 MB
Download from Jeremy Braun

Released by Jeremy Braun through its official repository on Hugging Face. Read the license.

Built From

  • Adapter of hexgrad/Kokoro-82M
  • Derived from hexgrad/Kokoro-82M
  • Trained on (disclosed) amphion/Emilia-Dataset
  • Trained on (disclosed) facebook/voxpopuli
  • Trained on (disclosed) parler-tts/libritts_r_filtered

Memory Requirements

PrecisionWeights in memory
As published26.9 MB
16-bit0.0 GB
8-bit0.0 GB
4-bit0.0 GB

Weights only, from the published parameter count; the key-value cache and runtime add to this.

Questions About kokoro-inno-clone-tuner

How much GPU memory does kokoro-inno-clone-tuner need?

About 0 GB at 16-bit and 0 GB at 4-bit: the weights (10M parameters) plus a working margin. A long context needs more.

What is the cheapest GPU to run kokoro-inno-clone-tuner on?

At 16-bit, 1x MI300X from $1.85 an hour; at 4-bit, 1x MI300X from $1.85 an hour, at the lowest on-demand prices the SAVRN Index lists.

Can I use kokoro-inno-clone-tuner commercially?

Yes. kokoro-inno-clone-tuner is released under Apache License 2.0. The Apache License 2.0 is a permissive open-source license. It permits commercial use, modification and redistribution. It requires keeping the license and copyright notices and any NOTICE file, stating significant changes, and it includes an express patent grant from contributors.

Similar Models

Model · Text to speech

Kokoro-82M

Hexgrad

Kokoro is an open-weight TTS model with 82 million parameters. Despite its lightweight architecture, it delivers comparable quality to larger models while being significantly faster and more cost-efficient. With Apache-licensed weights, Kokoro can be deployed anywhere from production environments to personal projects. You can run this basic cell on Google Colab. Listen to samples. For more languages and details, see Advanced Usage. Under the hood, kokoro uses misaki, a G2P library at https://github.com/hexgrad/misaki Model SHA256 Hash: 496dba118d1a58f5f3db2efc88dbdc216e0483fc89fe6e47ee1f2c53f18ad1e4 Data: Kokoro was trained exclusively on permissive/non-copyrighted audio data and IPA…

Open weights apache-2.0

Model · Text to speech

XTTS-v2

Coqui.ai

ⓍTTS is a Voice generation model that lets you clone voices into different languages by using just a quick 6-second audio clip. There is no need for an excessive amount of training data that spans countless hours. This is the same or similar model to what powers Coqui Studio and Coqui API. - Supports 17 languages. - Voice cloning with just a 6-second audio clip. - Emotion and style transfer by cloning. - Cross-language voice cloning. - Multi-lingual speech generation. - 24khz sampling rate. - 2 new languages; Hungarian and Korean - Architectural improvements for speaker conditioning. - Enables the use of multiple speaker references and interpolation between speakers. - Stability…

Open weights other coqui

Model · Text to speech

audio.cpp-gguf

Audio.cpp

This directory contains audio.cpp-native GGUF conversions of multiple speech models. These files are intended for use with audio.cpp. If you enjoy the project, please star audio.cpp on GitHub and this Hugging Face repository. For conversion details, supported layouts, direct-file loading, sidecar embedding, and the latest compatibility notes, see the audio.cpp GGUF guide: - https://github.com/0xShug0/audio.cpp/blob/main/docs/gguf.md!!! Converted and quantized packages are checked with automated metrics, but perceived quality can still differ for human listeners. Please validate the exact package, backend, and route to confirm the output is acceptable for your use case. The table lists the…

Open weights other audio.cpp

Model · Text to speech

chatterbox

Resemble AI

Chatterbox Multilingual V3 is the latest general-purpose multilingual TTS model in the Chatterbox family. It keeps the same 0.5B model size while improving speaker similarity, reducing hallucinations, and producing more natural, conversational speech across languages. V3 is designed for broad language coverage like V2, but with stronger stability and more expressive generation. It is the recommended multilingual model for users who want one voice cloning model that works across many languages. Try it in the Chatterbox Multilingual TTS V3 Space. Alongside V3, we are releasing the Single Language Pack: dedicated finetunes for priority languages where tighter quality control, stronger…

Open weights mit chatterbox

Model · Text to speech

F5-TTS

Yushen CHEN

Download F5-TTS or E2 TTS and place under ckpts/ Paper: F5-TTS: A Fairytaler that Fakes Fluent and Faithful Speech with Flow Matching

Open weights cc-by-nc-4.0 f5-tts

Model · Text to speech

Kokoro-82M-v1.0-ONNX

ONNX Community

Kokoro is a frontier TTS model for its size of 82 million parameters (text in/audio out). First, install the kokoro-js library from NPM using: You can then generate speech as follows: Optionally, save the audio to a file: The model is resilient to quantization, enabling efficient high-quality speech synthesis at a fraction of the original model size.

Open weights apache-2.0 transformers.js