File size: 7,077 Bytes
c64650d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
---
language:
- en
- es
- fr
- hi
- it
- ja
- pt
- zh
license: apache-2.0
library_name: kokoro.cpp
pipeline_tag: text-to-speech
base_model: hexgrad/Kokoro-82M
base_model_relation: quantized
inference: false
tags:
- audio
- text-to-speech
- tts
- kokoro
- gguf
- ggml
- cpp
- cpu
- gpu
- multilingual
---

# Kokoro-82M for `kokoro.cpp` — F16, Q8_0, and all 54 voices

Reproducible GGUF conversions of the official
[Hexgrad Kokoro-82M v1.0](https://huggingface.co/hexgrad/Kokoro-82M) checkpoint for
[**`kokoro.cpp`**](https://github.com/simonfxr/kokoro.cpp), a standalone C/C++ runtime powered by GGML.

> **What is included:** the reference F16 model, a validated Q8_0 model, and
> every one of the 54 official v1.0 voice packs across all supported languages.
> No unofficial or third-party voices are mixed into this repository.

## Files

| File | Precision | Size | Notes |
|---|---:|---:|---|
| `kokoro-82m-f16.gguf` | F16/F32 | 156.14 MiB | Reference-quality conversion |
| `kokoro-82m-q8_0.gguf` | Q8_0/F16/F32 | 134.78 MiB | 111 matrix tensors quantized; sensitive/unsupported tensors retained |
| `voices/kokoro-voice-*.gguf` | F32 | 26.91 MiB total | All 54 official voices; about 510 KiB each |
| `manifest.json` | — | — | SHA256, size, source revision, and checkpoint provenance |
| `VALIDATION.md` | — | — | Tensor and fixed-seed audio comparison results |

Voice packs remain F32 because they are small and are indexed style embeddings,
not matrix-multiplication weights. A model file and one voice file are both
required for synthesis.

## Quick start with `kokoro.cpp`

```bash
# Download one model and one voice.
hf download simonfxr/kokoro.cpp-GGUF \
  kokoro-82m-q8_0.gguf \
  voices/kokoro-voice-af_heart.gguf \
  --local-dir models

# Build the runtime. See the GitHub README for platform/backend options.
git clone --recursive https://github.com/simonfxr/kokoro.cpp.git
cd kokoro.cpp
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j

# Synthesize 24 kHz mono audio.
./build/kokoro-cli \
  -m ../models/kokoro-82m-q8_0.gguf \
  -v ../models/voices/kokoro-voice-af_heart.gguf \
  -l en-us \
  -o output.wav \
  "Hello from Kokoro dot C P P."
```

GPU execution is available when `kokoro.cpp` is built with a supported Vulkan,
Metal, or CUDA backend. GGUF is the container format; llama.cpp and whisper.cpp
do not implement this Kokoro architecture.

## Languages and voices

Kokoro reports eight languages. Its pipeline distinguishes American and British
English, resulting in nine language variants. `kokoro.cpp` takes the espeak-ng
voice shown in the third column, not Kokoro's one-letter pipeline code.

| Language | Kokoro code | `kokoro.cpp -l` | Voices |
|---|:---:|:---:|---|
| American English | `a` | `en-us` | 20 |
| British English | `b` | `en-gb` | 8 |
| Spanish | `e` | `es` | 3 |
| French | `f` | `fr-fr` | 1 |
| Hindi | `h` | `hi` | 4 |
| Italian | `i` | `it` | 2 |
| Japanese | `j` | `ja` | 5 |
| Brazilian Portuguese | `p` | `pt-br` | 3 |
| Mandarin Chinese | `z` | `cmn` | 8 |

See [`voices/README.md`](voices/README.md) for every voice name and ready-to-copy
commands. The machine-readable mapping is in
[`voices/languages.json`](voices/languages.json).

## Conversion and provenance

- Base model: [`hexgrad/Kokoro-82M`](https://huggingface.co/hexgrad/Kokoro-82M)
- Pinned source revision: `f3ff3571791e39611d31c381e3a41a3af07b4987`
- Official checkpoint SHA256: `496dba118d1a58f5f3db2efc88dbdc216e0483fc89fe6e47ee1f2c53f18ad1e4`
- Runtime and converters: [`simonfxr/kokoro.cpp`](https://github.com/simonfxr/kokoro.cpp)
- Output checksums: [`manifest.json`](manifest.json)

The conversion pipeline fuses PyTorch weight normalization, preserves Kokoro's
sparse 178-entry IPA vocabulary, maps all 459 runtime tensors, and emits GGUF
metadata expected by `kokoro.cpp`. Q8_0 quantizes only eligible two-dimensional
matrix weights whose GGML row width supports 32-element blocks. Convolutional
kernels remain F16 and rank-one tensors remain F32.

Reproduce these files from the official weights:

```bash
git clone --recursive https://github.com/simonfxr/kokoro.cpp.git
cd kokoro.cpp
python3 -m venv .venv-convert
. .venv-convert/bin/activate
pip install -r models/requirements-convert.txt
./models/convert-original.sh
```

## Validation

The generated files were checked for tensor names, shapes, dtypes, metadata,
and source hashes. Both models were loaded by `kokoro.cpp`; F16 and Q8_0 English
and Q8_0 Spanish synthesis produced valid 24 kHz WAV files.

Against the previously published cstr files:

- The F16 file has the same size and cosine similarity `0.999999999986` over all
  81,731,256 dequantized elements.
- Our Q8_0-versus-F16 relative L2 error is `0.00512913`, essentially matching
  cstr's `0.00512568`.
- Shared official voices `af_heart`, `ef_dora`, and `ff_siwis` are exactly equal
  element-for-element.
- Fixed-seed cstr-F16 versus this F16 output has waveform correlation `0.999920`
  and log-spectral distance `0.529 dB`.

Full methodology, caveats, and pairwise results are in
[`VALIDATION.md`](VALIDATION.md). PCM comparisons are phase-sensitive and do not
replace multilingual listening tests or perceptual metrics.

## Limitations

- Maximum input is 510 raw phoneme tokens because the model adds two boundary
  tokens to PL-BERT's 512-position context.
- Phonemization is provided by espeak-ng in `kokoro.cpp`, while the official
  Python package uses Misaki. Pronunciation can therefore differ.
- Mandarin tone numbers are not represented in Kokoro's 178-token vocabulary.
- espeak-ng Japanese kanji coverage is incomplete; pre-phonemized IPA can be
  supplied when needed.
- Q8_0 is smaller and validated, but F16 remains the reference choice for
  maximum fidelity. Lower-bit quantizations are intentionally not published.
- Voice availability does not imply identical quality across languages. Consult
  the [official model card](https://huggingface.co/hexgrad/Kokoro-82M) and
  [official voice notes](https://huggingface.co/hexgrad/Kokoro-82M/blob/main/VOICES.md).

## Intended use

This repository is for local and embedded text-to-speech inference with
`kokoro.cpp`, including research, accessibility, applications, and deployment
permitted by the upstream Apache-2.0 license. Users remain responsible for
appropriate disclosure, consent, and compliance when publishing synthetic
speech. Do not use generated audio to impersonate people or facilitate fraud.

## License and attribution

The Kokoro-82M weights and official voice packs are Apache-2.0 licensed. The
GGUF files are numerical conversions of those weights and retain that license.
`kokoro.cpp` has its own software/dependency licensing details; consult its
[LICENSE](https://github.com/simonfxr/kokoro.cpp/blob/main/LICENSE) and
[NOTICE](https://github.com/simonfxr/kokoro.cpp/blob/main/NOTICE) before distributing binaries.

Architecture: StyleTTS 2 / ISTFTNet. Original model, training information,
datasets, acknowledgements, and citations are documented by
[Hexgrad](https://huggingface.co/hexgrad/Kokoro-82M).