CoolFace
Modelpublic

cstr/kokoro-voices-GGUF

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
3likes2.9kdownloads
Model Card

Kokoro voices — GGUF bundle

Per-speaker style packs for the Kokoro-82M family, converted to ggml's GGUF voice-pack format (arch=kokoro-voice, single F32 tensor voice.pack[max_phon, 1, 256]). For use with [CrispStrobe/CrispASR](https://github.com/CrispStrobe/CrispASR) alongside `cstr/kokoro-82m-GGUF` or the German backbone `cstr/kokoro-de-hui-base-GGUF`.

Each voicepack is ~510 KB. Loading is direct passthrough — no quantisation needed at this size.

Voices

FileSpeakerLanguageSourceLicense
kokoro-voice-af_heart.ggufaf_heartEnglish (US, F)`hexgrad/Kokoro-82M` voices/af_heart.ptApache-2.0
kokoro-voice-ef_dora.ggufef_doraSpanish (F)`hexgrad/Kokoro-82M` voices/ef_dora.ptApache-2.0
kokoro-voice-ff_siwis.ggufff_siwisFrench (F)`hexgrad/Kokoro-82M` voices/ff_siwis.ptApache-2.0
kokoro-voice-df_eva.ggufdf_evaGerman (F)recovered from `r1di/kokoro-fastapi-german` Git LFS (originally Tundragoon)Apache-2.0
kokoro-voice-dm_bernd.ggufdm_berndGerman (M)recovered from `r1di/kokoro-fastapi-german` Git LFS (originally Tundragoon)Apache-2.0
kokoro-voice-df_victoria.ggufdf_victoriaGerman (F)`kikiri-tts/kikiri-german-victoria` voices/victoria.ptApache-2.0
kokoro-voice-dm_martin.ggufdm_martinGerman (M)`kikiri-tts/kikiri-german-martin` voices/martin.ptApache-2.0

The Tundragoon voicepacks are [512, 1, 256] F32 (maxphon=512); the official Kokoro and kikiri voicepacks are `[510, 1, 256]` F32 (maxphon=510). The voice loader reads max_phon from the file so both layouts work transparently.

German voice cascade

When CrispASR is invoked with -l de (or any de_* / de-* locale) and no explicit --voice, it picks German voicepacks in this order:

  1. 1.df_victoria — kikiri-tts, in-distribution to the dida-80b German backbone (recommended)
  2. 2.df_eva — Tundragoon recovery, second-tier German speaker
  3. 3.ff_siwis — French baseline, last-resort non-silence fallback

Languages without a native pack (ru, ko, ar, …) fall back to ff_siwis. See `cstr/kokoro-de-hui-base-GGUF` for the matching German backbone.

Quality (ASR roundtrip)

Long German phrase ("Guten Tag, dies ist ein Test des deutschen Phonemizers."), parakeet-tdt-0.6b-v3 -l de, dida-80b backbone F16:

VoiceParakeet output
dm_martin"...Phonemizers." (perfect)
df_victoria"...Tester des Deutschen Phonemizers." (1 word-boundary err)
dm_bernd"...Phonemetzers." (1 phoneme err)
df_eva"...Phonemetzes." (1 phoneme err)

All four clear the energy gate (peak ≥ 8000, RMS ≥ 1000); two are word-perfect on a phrase the official English-trained Kokoro-82M with af_heart collapses to silence on.

Quick start

bash
huggingface-cli download cstr/kokoro-voices-GGUF kokoro-voice-af_heart.gguf --local-dir .
huggingface-cli download cstr/kokoro-82m-GGUF    kokoro-82m-q8_0.gguf       --local-dir .

./crispasr --backend kokoro \
    -m kokoro-82m-q8_0.gguf \
    --voice kokoro-voice-af_heart.gguf \
    --tts "Hello world" --tts-output hello.wav

Conversion

bash
python models/convert-kokoro-voice-to-gguf.py \
    --input voices/af_heart.pt \
    --output kokoro-voice-af_heart.gguf

Attribution

Voice provenance (EU AI Act Art. 50(4))

Whose voice a pack reproduces is decided per pack, not by the backbone — a kokoro model is a base model, not a voice.

Pack`speaker_identity`Evidence
df_eva, dm_berndreal_personPer-speaker style packs from HUI-Audio-Corpus-German, carrying the narrators' own names. HUI is built from librivox.org recordings, so Eva and Bernd are real volunteers.
df_victoria, dm_martinsynthetickikiri fine-tunes over kikiri-german-base-51speakers-synthetic, whose card states: "Trained entirely on synthetic (TTS-generated) audio". The speaker labels are person-shaped, but the base's training data is the evidence, not the name.
af_heart, ef_dora, ff_siwissynthetichexgrad's shipped style vectors — designed/blended, not any one person.

Synthesizing with df_eva or dm_bernd prepends a spoken AI disclosure: audio resembling an identifiable person is a deep fake under Art. 3(60) whether or not any cloning took place. It does not require --i-have-rights — the donor's agreement to the training is a licensing matter settled upstream, which a downstream operator cannot attest to.

Note the German cascade crosses this boundary. The documented fallback order is df_victoria → df_eva → ff_siwis, so a missing default silently moves you from a synthetic voice to a real HUI narrator. That is exactly why the disclosure follows the pack rather than the run.

Override per run with --speaker-identity, or stamp a pack permanently with models/stamp-speaker-identity.py. See `docs/eu-ai-act.md` §6.2a.

License

Apache-2.0 across the bundle, matching every upstream source.