@drakulavich/kesha-voice-kit 1.22.0 → 1.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICES.md +10 -0
- package/man/kesha.1 +1 -1
- package/package.json +9 -3
- package/src/install-plan.ts +27 -2
- package/src/shell-artifacts.ts +5 -3
- package/src/voice-routing.ts +18 -4
package/NOTICES.md
CHANGED
|
@@ -33,6 +33,16 @@ Text-to-speech (Russian, 5 baked-in speakers). Apache 2.0. Model: [alphacep/vosk
|
|
|
33
33
|
|
|
34
34
|
**Runtime code:** Originally pulled from `crates.io` as `vosk-tts-rs 0.1.0`. As of #216 the runtime subset is **vendored** under `rust/vendor/vosk-tts/` (Apache 2.0; copied from [`andreytkachenko/vosk-tts-rs`](https://github.com/andreytkachenko/vosk-tts-rs) — see `rust/vendor/vosk-tts/LICENSE` and `rust/vendor/vosk-tts/NOTICE`). The vendored copy drops the upstream gRPC server/CLI/HTTP-model-fetch modules and replaces the `tokenizers` crate with a small inline BERT WordPiece tokenizer, eliminating the `prost`, `tonic`, `tokio`, `axum`, `hyper`, `reqwest`, `tokenizers`, `onig_sys`, `esaxx-rs`, `bzip2-sys`, `lzma-sys`, and `zstd-sys` transitive dependencies that broke Windows MSVC linkage.
|
|
35
35
|
|
|
36
|
+
### klebster — CharsiuG2P byt5-tiny ONNX (multilingual G2P)
|
|
37
|
+
|
|
38
|
+
Grapheme-to-phoneme for es/fr/it/pt Kokoro voices (`kesha install --tts`, #212).
|
|
39
|
+
CC-BY 4.0. ONNX export by [klebster](https://huggingface.co/klebster/g2p_multilingual_byT5_tiny_onnx)
|
|
40
|
+
from the original CharsiuG2P model.
|
|
41
|
+
|
|
42
|
+
**Original model:** Zhu et al. 2022, "Multilingual Grapheme-to-Phoneme Conversion
|
|
43
|
+
with Language Neutral and Language Specific Representations",
|
|
44
|
+
[arXiv:2204.03067](https://arxiv.org/abs/2204.03067).
|
|
45
|
+
|
|
36
46
|
### misaki-rs (English G2P)
|
|
37
47
|
|
|
38
48
|
Embedded grapheme-to-phoneme for English (Kokoro pipeline, #207). MIT. Source: [`misaki-rs`](https://github.com/MicheleYin/misaki-rs).
|
package/man/kesha.1
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@drakulavich/kesha-voice-kit",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.23.0",
|
|
4
4
|
"description": "Give your tools a voice — speech to text and back, 25 languages, up to ~19× faster than Whisper. On your machine.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -29,10 +29,16 @@
|
|
|
29
29
|
"openclaw": {
|
|
30
30
|
"extensions": [
|
|
31
31
|
"./openclaw-plugin.cjs"
|
|
32
|
-
]
|
|
32
|
+
],
|
|
33
|
+
"compat": {
|
|
34
|
+
"pluginApi": ">=2026.5.27"
|
|
35
|
+
},
|
|
36
|
+
"build": {
|
|
37
|
+
"openclawVersion": "2026.5.27"
|
|
38
|
+
}
|
|
33
39
|
},
|
|
34
40
|
"keshaEngine": {
|
|
35
|
-
"version": "1.
|
|
41
|
+
"version": "1.23.0"
|
|
36
42
|
},
|
|
37
43
|
"scripts": {
|
|
38
44
|
"test": "bun test",
|
package/src/install-plan.ts
CHANGED
|
@@ -62,9 +62,24 @@ const VAD_FILES: PlanFile[] = [
|
|
|
62
62
|
{ relPath: "models/silero-vad/silero_vad.onnx", sizeBytes: 2_327_524 },
|
|
63
63
|
];
|
|
64
64
|
|
|
65
|
+
// klebster CharsiuG2P byt5-tiny ONNX export (CC-BY 4.0 — see NOTICES.md).
|
|
66
|
+
// 3 files enabling multilingual G2P for es/fr/it/pt Kokoro voices (#212).
|
|
67
|
+
const G2P_CHARSIU_FILES: PlanFile[] = [
|
|
68
|
+
{ relPath: "models/g2p/byt5-tiny/encoder_model.onnx", sizeBytes: 12_478_704 },
|
|
69
|
+
{ relPath: "models/g2p/byt5-tiny/decoder_model.onnx", sizeBytes: 11_983_268 },
|
|
70
|
+
{ relPath: "models/g2p/byt5-tiny/decoder_with_past_model.onnx", sizeBytes: 5_427_260 },
|
|
71
|
+
];
|
|
72
|
+
|
|
65
73
|
const KOKORO_FILES: PlanFile[] = [
|
|
66
74
|
{ relPath: "models/kokoro-82m/model.onnx", sizeBytes: 325_532_387 },
|
|
67
75
|
{ relPath: "models/kokoro-82m/voices/am_michael.bin", sizeBytes: 522_240 },
|
|
76
|
+
// Multilingual voice packs for es/fr/it/pt (#212).
|
|
77
|
+
// em_alex (es, male), ff_siwis (fr, female — only French voice in Kokoro v1.0),
|
|
78
|
+
// im_nicola (it, male), pm_alex (pt, male).
|
|
79
|
+
{ relPath: "models/kokoro-82m/voices/em_alex.bin", sizeBytes: 522_240 },
|
|
80
|
+
{ relPath: "models/kokoro-82m/voices/ff_siwis.bin", sizeBytes: 522_240 },
|
|
81
|
+
{ relPath: "models/kokoro-82m/voices/im_nicola.bin", sizeBytes: 522_240 },
|
|
82
|
+
{ relPath: "models/kokoro-82m/voices/pm_alex.bin", sizeBytes: 522_240 },
|
|
68
83
|
];
|
|
69
84
|
|
|
70
85
|
const VOSK_RU_FILES: PlanFile[] = [
|
|
@@ -245,11 +260,21 @@ export async function renderInstallPlan(options: InstallPlanOptions = {}): Promi
|
|
|
245
260
|
components.push(
|
|
246
261
|
bundleComponent(
|
|
247
262
|
cacheRoot,
|
|
248
|
-
"TTS Kokoro EN",
|
|
263
|
+
"TTS Kokoro EN/ES/FR/IT/PT",
|
|
249
264
|
"model cache",
|
|
250
265
|
KOKORO_FILES,
|
|
251
266
|
noCache,
|
|
252
|
-
"English en-* voices",
|
|
267
|
+
"English en-* voices + multilingual es-*/fr-*/it-*/pt-* voices",
|
|
268
|
+
),
|
|
269
|
+
);
|
|
270
|
+
components.push(
|
|
271
|
+
bundleComponent(
|
|
272
|
+
cacheRoot,
|
|
273
|
+
"G2P CharsiuG2P byt5-tiny",
|
|
274
|
+
"model cache",
|
|
275
|
+
G2P_CHARSIU_FILES,
|
|
276
|
+
noCache,
|
|
277
|
+
"multilingual grapheme-to-phoneme for es/fr/it/pt Kokoro voices (CC-BY 4.0)",
|
|
253
278
|
),
|
|
254
279
|
);
|
|
255
280
|
components.push(
|
package/src/shell-artifacts.ts
CHANGED
|
@@ -257,9 +257,11 @@ function roff(value: string): string {
|
|
|
257
257
|
}
|
|
258
258
|
|
|
259
259
|
function manpageDate(): string {
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
260
|
+
// Year only — the man `.TH` date drove a monthly drift failure in the
|
|
261
|
+
// shell-artifacts test (committed "May 2026" vs regenerated "June 2026").
|
|
262
|
+
// Year granularity is plenty for a manpage revision date and stays stable
|
|
263
|
+
// across the year.
|
|
264
|
+
return `${new Date().getFullYear()}`;
|
|
263
265
|
}
|
|
264
266
|
|
|
265
267
|
function renderManpage(model: ArtifactModel): string {
|
package/src/voice-routing.ts
CHANGED
|
@@ -14,6 +14,19 @@ const DARWIN_KOKORO_DEFAULTS: Record<string, string> = {
|
|
|
14
14
|
zh: "zh-zm_yunjian",
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* ONNX-platform (Linux / Windows / Intel macOS) multilingual defaults.
|
|
19
|
+
* These mirror the Rust `default_voice_for_lang` in the engine.
|
|
20
|
+
* es/it/pt are male; fr is the documented brand-rule exception
|
|
21
|
+
* (Kokoro v1.0 ships no male French voice).
|
|
22
|
+
*/
|
|
23
|
+
const ONNX_KOKORO_DEFAULTS: Record<string, string> = {
|
|
24
|
+
es: "es-em_alex",
|
|
25
|
+
fr: "fr-ff_siwis",
|
|
26
|
+
it: "it-im_nicola",
|
|
27
|
+
pt: "pt-pm_alex",
|
|
28
|
+
};
|
|
29
|
+
|
|
17
30
|
/** Map a detected language code to a default voice id. Unknown / low-confidence → undefined. */
|
|
18
31
|
export function pickVoiceForLang(
|
|
19
32
|
code: string | undefined,
|
|
@@ -30,10 +43,11 @@ export function pickVoiceForLang(
|
|
|
30
43
|
// AVSpeech Milena is a macOS system voice (any arch); Vosk elsewhere.
|
|
31
44
|
return platform === "darwin" ? RU_DARWIN_FALLBACK_VOICE : "ru-vosk-m02";
|
|
32
45
|
default:
|
|
33
|
-
//
|
|
34
|
-
// Intel Macs have no such voice pack, so don't auto-route to ids the
|
|
35
|
-
// engine can't honour — fall through to the engine default instead.
|
|
46
|
+
// darwin-arm64: FluidAudio ANE voice pack (full multilingual set).
|
|
36
47
|
if (platform === "darwin" && arch === "arm64") return DARWIN_KOKORO_DEFAULTS[baseCode];
|
|
37
|
-
|
|
48
|
+
// ONNX platforms (Linux, Windows, Intel macOS): es/fr/it/pt are supported
|
|
49
|
+
// via CharsiuG2P + ONNX Kokoro. Other languages (hi, ja, zh, …) have no
|
|
50
|
+
// ONNX voice pack, so fall through to the engine default (undefined).
|
|
51
|
+
return ONNX_KOKORO_DEFAULTS[baseCode];
|
|
38
52
|
}
|
|
39
53
|
}
|