Skip to content

Models, voices, provenance, and rights

Kenkui does not distribute model weights or voice prompts. Installing the Apache-2.0 Kenkui package does not establish permission to use any separate model, dataset, recording, or voice. Keep provenance and rights review scoped to the exact immutable bytes and intended use.

Which model each voice needs

Upstream publishes two model repositories, and the distinction is the opposite of the intuitive reading:

Repository Gated What it is for
kyutai/pocket-tts yes voice cloning from an audio prompt
kyutai/pocket-tts-without-voice-cloning no precompiled speaker embeddings

A WAV prompt is voice cloning and requires the gated weights. A built-in or pre-compiled embedding does not. Built-in voices therefore work without accepting any gated terms.

Kenkui compiles WAV prompts into embeddings during provisioning, so the render path only ever loads an embedding and never performs voice cloning. Compiling needs the gated weights; rendering the result does not.

Voice varieties

Variety Asset Engine requirement Who asserts rights
built-in embedding from the ungated catalog any Kenkui's static catalog
pre-compiled embedding you supply any you
wav audio prompt you supply cloning-capable weights, at compile time you

Required voice record

A production voice must be explicitly selected and must record all of:

  • stable voice ID and display name;
  • enabled/disabled state;
  • exact asset SHA-256 (content_fingerprint);
  • language and compatible immutable model revision(s);
  • provenance describing origin and custody of the exact recording;
  • license identifier and a separate rights statement retained by deployment;
  • an explicit boolean commercial-use decision.

Missing metadata is not inferred. add_voice requires every rights field explicitly. Planning fails as voice_provenance_required; disabled, unresolved, and revision-incompatible voices have distinct stable errors.

A hash proves byte identity, not authorship, consent, license scope, or lawful use. Operators remain responsible for reviewing their actual material and jurisdiction. Kenkui's fields and checks are operational controls, not legal advice or a legal conclusion.

Built-in catalog

The catalog combines 26 upstream predefined voices (listed below) with 95 precompiled Kenkui voice-pack entries. The package bundles their metadata; audio and embeddings are downloaded on first load_voice(). Use list_voices() to inspect the catalog available in your installed version. Pack entries use their lowercase display names as IDs, except where that would collide with an upstream voice; those entries retain their full pack slug.

The pack declares its compatible Pocket-TTS versions. Incompatible pack voices are withheld and attempts to use them raise voice_incompatible; the 26 upstream voices remain available. A missing pack manifest also leaves the upstream catalog available. Both sources are exposed as Voice.variety == "built-in"; the "pre-compiled" variety identifies embeddings registered by the caller.

A catalog voice's terms come from the dataset its source recording belongs to, not from a per-voice record: every VCTK voice carries VCTK's license and rights statement, and every EARS voice carries EARS's. Voice.license_id and Voice.voice_rights report them. A recording Kenkui does not recognize is reported as unreviewed. Because terms follow the source bytes, changing a rights statement never invalidates cached audio.

Dataset Voices License ID
VCTK 12 upstream, 47 pack CC-BY-4.0
EARS 1 upstream (jean), 48 pack CC-BY-NC-4.0
Expresso 1 upstream (cosette) CC-BY-NC-4.0
Common Voice giovanni, lola CC0-1.0
kyutai voice donations the other 10 upstream voices unreviewed

Every built-in voice ships as commercial_use_allowed = false. None of the source terms were reviewed by this project, and a conservative default is the only honest one. Setting a voice commercial is a deployment decision that follows your own review of the upstream terms, speaker consent, and intended use. Override it in your own manifest entry.

Voice Language Upstream origin License ID Commercial use
alba english kyutai/tts-voices/alba-mackenna/casual.wav unreviewed no
anna english kyutai/tts-voices/vctk/p228_023_enhanced.wav CC-BY-4.0 no
azelma english kyutai/tts-voices/vctk/p303_023_enhanced.wav CC-BY-4.0 no
bill_boerst english kyutai/tts-voices/voice-zero/bill_boerst.wav unreviewed no
caro_davy english kyutai/tts-voices/voice-zero/caro_davy.wav unreviewed no
charles english kyutai/tts-voices/vctk/p254_023_enhanced.wav CC-BY-4.0 no
cosette english kyutai/tts-voices/expresso/ex04-ex02_confused_001_channel1_499s.wav CC-BY-NC-4.0 no
eponine english kyutai/tts-voices/vctk/p262_023_enhanced.wav CC-BY-4.0 no
eve english kyutai/tts-voices/vctk/p361_023_enhanced.wav CC-BY-4.0 no
fantine english kyutai/tts-voices/vctk/p244_023_enhanced.wav CC-BY-4.0 no
george english kyutai/tts-voices/vctk/p315_023_enhanced.wav CC-BY-4.0 no
jane english kyutai/tts-voices/vctk/p339_023_enhanced.wav CC-BY-4.0 no
javert english kyutai/tts-voices/voice-donations/Butter.wav unreviewed no
jean english kyutai/tts-voices/ears/p010/freeform_speech_01_enhanced.wav CC-BY-NC-4.0 no
marius english kyutai/tts-voices/voice-donations/Selfie.wav unreviewed no
mary english kyutai/tts-voices/vctk/p333_023_enhanced.wav CC-BY-4.0 no
michael english kyutai/tts-voices/vctk/p360_023_enhanced.wav CC-BY-4.0 no
paul english kyutai/tts-voices/vctk/p259_023_enhanced.wav CC-BY-4.0 no
peter_yearsley english kyutai/tts-voices/voice-zero/peter_yearsley.wav unreviewed no
stuart_bell english kyutai/tts-voices/voice-zero/stuart_bell.wav unreviewed no
vera english kyutai/tts-voices/vctk/p229_023_enhanced.wav CC-BY-4.0 no
estelle french_24l kyutai/tts-voices/unmute-prod-website/developpeuse-3.wav unreviewed no
juergen german kyutai/pocket-tts/de-DE-juergen.mp3 unreviewed no
giovanni italian kyutai/pocket-tts/common_voice_it_36520747-enhanced-v2.mp3 CC0-1.0 no
rafael portuguese kyutai/pocket-tts/g-Vi8PgmSY0-enhanced-v2.wav unreviewed no
lola spanish kyutai/pocket-tts/common_voice_es_19762977-enhanced-v2.mp3 CC0-1.0 no

Two entries carry corpus-specific caveats that survive any review:

  • jean derives from the EARS corpus. Treat it as research-only/noncommercial unless your own review of the applicable source terms concludes otherwise.
  • cosette derives from the Expresso dataset, with the same caveat.

These are conservative engineering caveats, not statements about anyone's legal rights, and not a substitute for reviewing the exact terms yourself.

The upstream portion is drift-tested against pocket-tts's predefined-voice map. An upstream addition or removal fails the test suite rather than degrading to voice_unknown at runtime.

Asset integrity

Trust roots at first use. Kenkui cannot ship expected SHA-256 values for embeddings without downloading every voice for every language first, so provisioning hashes what it fetches at a pinned upstream revision and pins the result in the manifest, which governs every subsequent render.

unload_voice discards the pinned hash along with the asset, so a later load_voice re-establishes trust from upstream rather than re-verifying against previously seen bytes. A reload is a first use.

Provisioning and the render boundary

Provisioning downloads model and voice assets explicitly. Character inference and attribution may separately call LiteLLM during resolution; synthesis workers never perform either kind of network work. The renderer sets HF_HUB_OFFLINE=1, replaces pocket-tts's downloader with a manifest allowlist, installs a socket audit hook, and verifies every declared file by size and SHA-256 before loading anything.

A test asserts that no module under _tts, _execution, _audio, _domain, or _epub imports the provisioning module.

Local model and voice storage

Provisioned assets live under ~/Library/Caches/kenkui/v1 (macOS) or ${XDG_CACHE_HOME:-~/.cache}/kenkui/v1 (Linux), alongside the managed manifest. A per-language engine is roughly 225 MB; each embedding is roughly 6.5 MB. unload_voice and remove_voice prune an engine once no loaded voice references it. Cache schema and location are not public API.

Perceived gender

Voices carry perceived_gender, which the gendered casting method filters on. It is "feminine", "masculine", or None.

It is sourced or absent, never inferred. The 95 voices in the pre-compiled pack carry gender recorded when the pack was built. The 26 kyutai catalog entries carry None: kyutai's VCTK_Voice_Names.csv covers a different speaker selection than those entries, and VCTK's speaker-info.txt ships only inside the full corpus download. Their display names are Kenkui's own inventions and say nothing about the speaker.

A voice with no trait is not considered a gender match. The gendered method prefers matching voices when available; if there are none, it falls back to the whole available character pool, including voices whose trait is absent. A character whose gender is unknown also uses that whole pool. Voice sharing is expected when characters outnumber voices, including a single voice narrating every part. See casting methods.