@drakulavich/kesha-voice-kit 1.18.0 → 1.18.2
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/README.md +126 -1
- package/completions/kesha.bash +38 -0
- package/completions/kesha.fish +129 -0
- package/completions/kesha.zsh +117 -0
- package/docs/product-positioning.md +76 -0
- package/man/kesha.1 +161 -0
- package/package.json +13 -2
- package/src/cli/completions.ts +41 -0
- package/src/cli/dispatch.ts +25 -1
- package/src/cli/doctor.ts +35 -0
- package/src/cli/install.ts +30 -6
- package/src/cli/main.ts +59 -20
- package/src/cli/manpage.ts +12 -0
- package/src/cli/say.ts +67 -9
- package/src/cli/stats.ts +73 -2
- package/src/cli/status.ts +13 -2
- package/src/cli/support-bundle.ts +31 -0
- package/src/cli.ts +19 -1
- package/src/doctor.ts +375 -0
- package/src/engine-install.ts +1 -11
- package/src/engine.ts +54 -18
- package/src/format.ts +8 -3
- package/src/install-plan.ts +359 -0
- package/src/lib.ts +7 -3
- package/src/package-info.ts +6 -0
- package/src/paths.ts +10 -0
- package/src/progress.ts +91 -0
- package/src/shell-artifacts.ts +326 -0
- package/src/stats.ts +690 -38
- package/src/status.ts +14 -13
- package/src/support-bundle.ts +148 -0
- package/src/synth.ts +10 -0
- package/src/transcribe.ts +16 -4
- package/src/types.ts +13 -0
- package/tsconfig.json +1 -0
package/README.md
CHANGED
|
@@ -11,13 +11,15 @@
|
|
|
11
11
|
<a href="https://bun.sh"><img src="https://img.shields.io/badge/runtime-Bun-f9f1e1?logo=bun" alt="Bun"></a>
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
|
-
<p align="center"><b>Open-source voice toolkit.</b> Optimized for Apple Silicon (CoreML),
|
|
14
|
+
<p align="center"><b>Open-source voice toolkit.</b> Optimized for Apple Silicon (CoreML), with ONNX fallback on supported Linux/Windows builds.<br>A collection of small, fast, open-source audio models — packaged as CLI tools and an <a href="https://github.com/openclaw/openclaw">OpenClaw</a> skill for LLM agents.</p>
|
|
15
15
|
|
|
16
16
|
- **Speech-to-text** — 25 languages, ~15x faster than Whisper on Apple Silicon, ~2.5x on CPU
|
|
17
17
|
- **Text-to-speech** — Kokoro (EN) + Vosk-TTS (RU) + macOS system voices, SSML preview
|
|
18
18
|
- **Rust engine** — single 20MB binary, no ffmpeg, no Python, no native Node addons
|
|
19
19
|
- **OpenClaw-ready** — plug into your LLM agent as a voice processing skill
|
|
20
20
|
|
|
21
|
+
See [Product positioning](docs/product-positioning.md) for supported workflows, non-goals, maturity labels, and the platform matrix.
|
|
22
|
+
|
|
21
23
|
<p align="center">
|
|
22
24
|
<img src="./demo.gif" alt="kesha demo — English + Russian transcription with automatic language detection" width="800">
|
|
23
25
|
</p>
|
|
@@ -49,6 +51,91 @@ kesha audio.ogg # transcript to stdout
|
|
|
49
51
|
|
|
50
52
|
Air-gapped or behind a corporate mirror? See [docs/model-mirror.md](docs/model-mirror.md).
|
|
51
53
|
|
|
54
|
+
## Shell Completions and Manpage
|
|
55
|
+
|
|
56
|
+
The npm package includes bash, zsh, and fish completions plus `kesha(1)`.
|
|
57
|
+
The CLI can print the packaged files, so install paths do not depend on the
|
|
58
|
+
Bun global package layout:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# bash
|
|
62
|
+
mkdir -p ~/.local/share/bash-completion/completions
|
|
63
|
+
kesha completions bash > ~/.local/share/bash-completion/completions/kesha
|
|
64
|
+
|
|
65
|
+
# zsh
|
|
66
|
+
mkdir -p ~/.zsh/completions
|
|
67
|
+
kesha completions zsh > ~/.zsh/completions/_kesha
|
|
68
|
+
# add to ~/.zshrc once: fpath=(~/.zsh/completions $fpath); autoload -Uz compinit; compinit
|
|
69
|
+
|
|
70
|
+
# fish
|
|
71
|
+
mkdir -p ~/.config/fish/completions
|
|
72
|
+
kesha completions fish > ~/.config/fish/completions/kesha.fish
|
|
73
|
+
|
|
74
|
+
# manpage
|
|
75
|
+
mkdir -p ~/.local/share/man/man1
|
|
76
|
+
kesha manpage > ~/.local/share/man/man1/kesha.1
|
|
77
|
+
mandb ~/.local/share/man 2>/dev/null || true
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Homebrew Install
|
|
81
|
+
|
|
82
|
+
Homebrew installs the Bun-based CLI wrapper. Engine and model downloads remain
|
|
83
|
+
explicit:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
brew tap oven-sh/bun
|
|
87
|
+
brew install drakulavich/tap/kesha-voice-kit
|
|
88
|
+
kesha install
|
|
89
|
+
kesha audio.ogg
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
See [Homebrew install](docs/homebrew.md) for package scope and maintainer
|
|
93
|
+
validation.
|
|
94
|
+
|
|
95
|
+
## Support diagnostics
|
|
96
|
+
|
|
97
|
+
Kesha can collect local diagnostics without downloading models or mutating cache state:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
kesha doctor --json --redact
|
|
101
|
+
kesha support-bundle --output kesha-support.tar.gz
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
`support-bundle` creates a redacted `.tar.gz` archive for GitHub issues. It includes runtime, engine, cache, optional-component, Stats status, and known Kesha environment settings. It does not include audio, transcripts, model files, or the Stats database.
|
|
105
|
+
|
|
106
|
+
## Local Stats privacy and lifecycle
|
|
107
|
+
|
|
108
|
+
Kesha Stats is disabled by default. When you opt in with `kesha stats enable`,
|
|
109
|
+
Kesha writes a local SQLite database only on your machine:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
kesha stats status
|
|
113
|
+
kesha stats week
|
|
114
|
+
kesha stats errors
|
|
115
|
+
kesha stats export --format json # or csv
|
|
116
|
+
kesha stats retention 30 # default: 90 days
|
|
117
|
+
kesha stats retention off # keep until reset
|
|
118
|
+
kesha stats reset # delete recorded stats rows
|
|
119
|
+
kesha stats vacuum # compact the SQLite file
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
The database stores content-free operational records only: command name
|
|
123
|
+
(`transcribe` or `say`), timestamps, success/failure status, app version, item
|
|
124
|
+
count, anonymous stage timings, input/output artifact kind, file extension,
|
|
125
|
+
size, optional duration/sample-rate/channel counts, and sanitized error
|
|
126
|
+
class/code/message.
|
|
127
|
+
|
|
128
|
+
Stats never stores audio bytes, transcripts, input text, generated speech text,
|
|
129
|
+
file names, full file paths, raw stdout/stderr, environment variables, model
|
|
130
|
+
files, API tokens, or cloud identifiers. `support-bundle` reports Stats status
|
|
131
|
+
only; it never includes the Stats SQLite database.
|
|
132
|
+
|
|
133
|
+
By default, Stats prunes rows older than 90 days before writing or exporting
|
|
134
|
+
data. Use `kesha stats retention <days>` to change the TTL or `kesha stats
|
|
135
|
+
retention off` to disable TTL pruning. `kesha stats reset` deletes recorded
|
|
136
|
+
runs, artifacts, timings, and errors while preserving settings such as enabled
|
|
137
|
+
state and retention.
|
|
138
|
+
|
|
52
139
|
## Nix Install
|
|
53
140
|
|
|
54
141
|
Alternative reproducible-build path on `aarch64-darwin` / `x86_64-linux`:
|
|
@@ -60,6 +147,44 @@ nix run github:drakulavich/kesha-voice-kit -- audio.ogg # transcribe
|
|
|
60
147
|
|
|
61
148
|
Full recipes (one-liner, profile install, engine-only, dev shell) live in [docs/nix-install.md](docs/nix-install.md).
|
|
62
149
|
|
|
150
|
+
## Docker
|
|
151
|
+
|
|
152
|
+
Linux x64 CLI image, published to GHCR:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
docker run --rm \
|
|
156
|
+
-v kesha-cache:/cache/kesha \
|
|
157
|
+
-v "$PWD:/work" -w /work \
|
|
158
|
+
ghcr.io/drakulavich/kesha-voice-kit:latest install
|
|
159
|
+
|
|
160
|
+
docker run --rm \
|
|
161
|
+
-v kesha-cache:/cache/kesha \
|
|
162
|
+
-v "$PWD:/work" -w /work \
|
|
163
|
+
ghcr.io/drakulavich/kesha-voice-kit:latest audio.ogg
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
The image keeps model downloads and the engine cache under `/cache/kesha`.
|
|
167
|
+
Mount that path as a named volume so `kesha install`, TTS models, VAD, and future
|
|
168
|
+
runs reuse the same cache. `compose.yml` provides the same layout:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
docker compose run --rm kesha install
|
|
172
|
+
docker compose run --rm kesha audio.ogg
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Linux Packages
|
|
176
|
+
|
|
177
|
+
Stable engine releases also publish `.deb` and `.rpm` packages for Linux x64.
|
|
178
|
+
They install the standalone CLI wrapper; engine and model downloads remain explicit:
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
kesha install
|
|
182
|
+
kesha audio.ogg
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
See [Linux packages](docs/linux-packages.md) for install commands and package
|
|
186
|
+
scope.
|
|
187
|
+
|
|
63
188
|
## Speech-to-text
|
|
64
189
|
|
|
65
190
|
```bash
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# bash completion for kesha.
|
|
2
|
+
# Source this file or copy it into your bash-completion directory.
|
|
3
|
+
|
|
4
|
+
_kesha_completion() {
|
|
5
|
+
local cur command opts commands
|
|
6
|
+
COMPREPLY=()
|
|
7
|
+
cur="${COMP_WORDS[COMP_CWORD]}"
|
|
8
|
+
command="${COMP_WORDS[1]}"
|
|
9
|
+
commands="completions doctor install manpage say stats status support-bundle"
|
|
10
|
+
|
|
11
|
+
if [[ "$COMP_CWORD" -eq 1 ]]; then
|
|
12
|
+
if [[ "$cur" == -* ]]; then
|
|
13
|
+
COMPREPLY=( $(compgen -W "--help -h --version -v --json --toon --timestamps --speakers --include-errors --verbose --format --lang --debug --vad --no-vad" -- "$cur") )
|
|
14
|
+
else
|
|
15
|
+
COMPREPLY=( $(compgen -W "$commands" -- "$cur") )
|
|
16
|
+
fi
|
|
17
|
+
return 0
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
case "$command" in
|
|
21
|
+
completions) opts="--help -h" ;;
|
|
22
|
+
doctor) opts="--help -h --json --redact" ;;
|
|
23
|
+
install) opts="--help -h --coreml --onnx --no-cache --plan --tts --vad --diarize" ;;
|
|
24
|
+
manpage) opts="--help -h" ;;
|
|
25
|
+
say) opts="--help -h --voice --lang --out --rate --list-voices --ssml --format --bitrate --sample-rate --no-expand-abbrev --verbose --debug" ;;
|
|
26
|
+
stats) opts="--help -h --format" ;;
|
|
27
|
+
status) opts="--help -h --disk" ;;
|
|
28
|
+
support-bundle) opts="--help -h --output" ;;
|
|
29
|
+
*) opts="--help -h --version -v --json --toon --timestamps --speakers --include-errors --verbose --format --lang --debug --vad --no-vad" ;;
|
|
30
|
+
esac
|
|
31
|
+
|
|
32
|
+
if [[ "$cur" == -* ]]; then
|
|
33
|
+
COMPREPLY=( $(compgen -W "$opts" -- "$cur") )
|
|
34
|
+
fi
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
complete -F _kesha_completion kesha
|
|
38
|
+
complete -F _kesha_completion parakeet
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# fish completion for kesha.
|
|
2
|
+
complete -c kesha -f
|
|
3
|
+
complete -c kesha -n '__fish_use_subcommand' -a 'completions' -d 'Print shell completion script for bash, zsh, or fish'
|
|
4
|
+
complete -c kesha -n '__fish_use_subcommand' -a 'doctor' -d 'Collect support diagnostics without changing local state'
|
|
5
|
+
complete -c kesha -n '__fish_use_subcommand' -a 'install' -d 'Download inference engine and models'
|
|
6
|
+
complete -c kesha -n '__fish_use_subcommand' -a 'manpage' -d 'Print the kesha(1) manpage'
|
|
7
|
+
complete -c kesha -n '__fish_use_subcommand' -a 'say' -d 'Synthesize speech from text (TTS). Writes audio to stdout (or --out file). Defaults to WAV; use --format ogg-opus for messenger-ready voice notes.'
|
|
8
|
+
complete -c kesha -n '__fish_use_subcommand' -a 'stats' -d 'Manage local anonymous Kesha Stats'
|
|
9
|
+
complete -c kesha -n '__fish_use_subcommand' -a 'status' -d 'Show backend installation status'
|
|
10
|
+
complete -c kesha -n '__fish_use_subcommand' -a 'support-bundle' -d 'Create a redacted diagnostics archive for support'
|
|
11
|
+
complete -c kesha -n '__fish_use_subcommand' -l help -d 'Show help'
|
|
12
|
+
complete -c kesha -n '__fish_use_subcommand' -s h -d 'Show help'
|
|
13
|
+
complete -c kesha -n '__fish_use_subcommand' -l version -d 'Show version'
|
|
14
|
+
complete -c kesha -n '__fish_use_subcommand' -s v -d 'Show version'
|
|
15
|
+
complete -c kesha -n '__fish_use_subcommand' -l json -d 'Output results as JSON'
|
|
16
|
+
complete -c kesha -n '__fish_use_subcommand' -l toon -d 'Output results as TOON (compact, LLM-friendly encoding of the same data as --json)'
|
|
17
|
+
complete -c kesha -n '__fish_use_subcommand' -l timestamps -d 'Include timestamped transcript segments in JSON/TOON output'
|
|
18
|
+
complete -c kesha -n '__fish_use_subcommand' -l speakers -d 'Include speaker labels in transcript segments. Requires --json / --toon / --format json. Implies --timestamps. Currently darwin-arm64 only (#199).'
|
|
19
|
+
complete -c kesha -n '__fish_use_subcommand' -l include-errors -d 'With --json, output { results, errors } so scripts can read per-file failures without parsing stderr'
|
|
20
|
+
complete -c kesha -n '__fish_use_subcommand' -l verbose -d 'Show language detection details'
|
|
21
|
+
complete -c kesha -n '__fish_use_subcommand' -l format -r -d 'Output format: transcript | json | toon (long-form alias for --json / --toon)'
|
|
22
|
+
complete -c kesha -n '__fish_use_subcommand' -l lang -r -d 'Expected language code (ISO 639-1), warn if mismatch'
|
|
23
|
+
complete -c kesha -n '__fish_use_subcommand' -l debug -d 'Trace engine subprocess calls on stderr (or KESHA_DEBUG=1)'
|
|
24
|
+
complete -c kesha -n '__fish_use_subcommand' -l vad -d 'Force Silero VAD preprocessing (kesha install --vad first). Without this, VAD auto-engages on audio ≥ 120s.'
|
|
25
|
+
complete -c kesha -n '__fish_use_subcommand' -l no-vad -d 'Disable VAD preprocessing regardless of duration or install state'
|
|
26
|
+
complete -c kesha -n '__fish_seen_subcommand_from completions' -l help -d 'Show help'
|
|
27
|
+
complete -c kesha -n '__fish_seen_subcommand_from completions' -s h -d 'Show help'
|
|
28
|
+
complete -c kesha -n '__fish_seen_subcommand_from doctor' -l help -d 'Show help'
|
|
29
|
+
complete -c kesha -n '__fish_seen_subcommand_from doctor' -s h -d 'Show help'
|
|
30
|
+
complete -c kesha -n '__fish_seen_subcommand_from doctor' -l json -d 'Output diagnostics as JSON'
|
|
31
|
+
complete -c kesha -n '__fish_seen_subcommand_from doctor' -l redact -d 'Redact secrets and user-home paths from diagnostic output'
|
|
32
|
+
complete -c kesha -n '__fish_seen_subcommand_from install' -l help -d 'Show help'
|
|
33
|
+
complete -c kesha -n '__fish_seen_subcommand_from install' -s h -d 'Show help'
|
|
34
|
+
complete -c kesha -n '__fish_seen_subcommand_from install' -l coreml -d 'Force CoreML backend (macOS arm64)'
|
|
35
|
+
complete -c kesha -n '__fish_seen_subcommand_from install' -l onnx -d 'Force ONNX backend'
|
|
36
|
+
complete -c kesha -n '__fish_seen_subcommand_from install' -l no-cache -d 'Re-download even if cached'
|
|
37
|
+
complete -c kesha -n '__fish_seen_subcommand_from install' -l plan -d 'Show download, disk, and warm-up plan without changing local state'
|
|
38
|
+
complete -c kesha -n '__fish_seen_subcommand_from install' -l tts -d 'Also install TTS models (Kokoro EN + Vosk-TTS RU, ~990MB)'
|
|
39
|
+
complete -c kesha -n '__fish_seen_subcommand_from install' -l vad -d 'Also install Silero VAD (~2.3MB) for long-audio preprocessing'
|
|
40
|
+
complete -c kesha -n '__fish_seen_subcommand_from install' -l diarize -d 'Also install the Sortformer streaming-diarization model (~245MB, darwin-arm64 only — #199)'
|
|
41
|
+
complete -c kesha -n '__fish_seen_subcommand_from manpage' -l help -d 'Show help'
|
|
42
|
+
complete -c kesha -n '__fish_seen_subcommand_from manpage' -s h -d 'Show help'
|
|
43
|
+
complete -c kesha -n '__fish_seen_subcommand_from say' -l help -d 'Show help'
|
|
44
|
+
complete -c kesha -n '__fish_seen_subcommand_from say' -s h -d 'Show help'
|
|
45
|
+
complete -c kesha -n '__fish_seen_subcommand_from say' -l voice -r -d 'Voice id, e.g. en-am_michael'
|
|
46
|
+
complete -c kesha -n '__fish_seen_subcommand_from say' -l lang -r -d 'BCP 47 language code (default en-us)'
|
|
47
|
+
complete -c kesha -n '__fish_seen_subcommand_from say' -l out -r -d 'Write audio to file instead of stdout'
|
|
48
|
+
complete -c kesha -n '__fish_seen_subcommand_from say' -l rate -r -d 'Speaking rate 0.5–2.0'
|
|
49
|
+
complete -c kesha -n '__fish_seen_subcommand_from say' -l list-voices -d 'List installed voices and exit'
|
|
50
|
+
complete -c kesha -n '__fish_seen_subcommand_from say' -l ssml -d 'Parse input as SSML (supports <speak>, <break>; strips unknown tags)'
|
|
51
|
+
complete -c kesha -n '__fish_seen_subcommand_from say' -l format -r -d 'Output format: wav (default) or ogg-opus (Telegram-ready voice note). Inferred from --out extension when omitted.'
|
|
52
|
+
complete -c kesha -n '__fish_seen_subcommand_from say' -l bitrate -r -d 'Opus bitrate in bits/sec (e.g. 32000). Only with --format ogg-opus.'
|
|
53
|
+
complete -c kesha -n '__fish_seen_subcommand_from say' -l sample-rate -r -d 'Opus encoder sample rate (8000/12000/16000/24000/48000). Only with --format ogg-opus.'
|
|
54
|
+
complete -c kesha -n '__fish_seen_subcommand_from say' -l no-expand-abbrev -d 'Disable Russian acronym auto-expansion (ВОЗ → \'вэ о зэ\') for ru-vosk-* voices. <say-as interpret-as=\'characters\'> still works. Applies to Russian (ru-vosk-*) and English (en-*) voices.'
|
|
55
|
+
complete -c kesha -n '__fish_seen_subcommand_from say' -l verbose -d 'Log TTS synthesis time to stderr'
|
|
56
|
+
complete -c kesha -n '__fish_seen_subcommand_from say' -l debug -d 'Trace engine subprocess calls on stderr (or KESHA_DEBUG=1)'
|
|
57
|
+
complete -c kesha -n '__fish_seen_subcommand_from stats' -l help -d 'Show help'
|
|
58
|
+
complete -c kesha -n '__fish_seen_subcommand_from stats' -s h -d 'Show help'
|
|
59
|
+
complete -c kesha -n '__fish_seen_subcommand_from stats' -l format -r -d 'Export format: json | csv'
|
|
60
|
+
complete -c kesha -n '__fish_seen_subcommand_from status' -l help -d 'Show help'
|
|
61
|
+
complete -c kesha -n '__fish_seen_subcommand_from status' -s h -d 'Show help'
|
|
62
|
+
complete -c kesha -n '__fish_seen_subcommand_from status' -l disk -d 'Include recursive cache disk usage'
|
|
63
|
+
complete -c kesha -n '__fish_seen_subcommand_from support-bundle' -l help -d 'Show help'
|
|
64
|
+
complete -c kesha -n '__fish_seen_subcommand_from support-bundle' -s h -d 'Show help'
|
|
65
|
+
complete -c kesha -n '__fish_seen_subcommand_from support-bundle' -l output -r -d 'Write archive to this .tar.gz path'
|
|
66
|
+
complete -c parakeet -f
|
|
67
|
+
complete -c parakeet -n '__fish_use_subcommand' -a 'completions' -d 'Print shell completion script for bash, zsh, or fish'
|
|
68
|
+
complete -c parakeet -n '__fish_use_subcommand' -a 'doctor' -d 'Collect support diagnostics without changing local state'
|
|
69
|
+
complete -c parakeet -n '__fish_use_subcommand' -a 'install' -d 'Download inference engine and models'
|
|
70
|
+
complete -c parakeet -n '__fish_use_subcommand' -a 'manpage' -d 'Print the kesha(1) manpage'
|
|
71
|
+
complete -c parakeet -n '__fish_use_subcommand' -a 'say' -d 'Synthesize speech from text (TTS). Writes audio to stdout (or --out file). Defaults to WAV; use --format ogg-opus for messenger-ready voice notes.'
|
|
72
|
+
complete -c parakeet -n '__fish_use_subcommand' -a 'stats' -d 'Manage local anonymous Kesha Stats'
|
|
73
|
+
complete -c parakeet -n '__fish_use_subcommand' -a 'status' -d 'Show backend installation status'
|
|
74
|
+
complete -c parakeet -n '__fish_use_subcommand' -a 'support-bundle' -d 'Create a redacted diagnostics archive for support'
|
|
75
|
+
complete -c parakeet -n '__fish_use_subcommand' -l help -d 'Show help'
|
|
76
|
+
complete -c parakeet -n '__fish_use_subcommand' -s h -d 'Show help'
|
|
77
|
+
complete -c parakeet -n '__fish_use_subcommand' -l version -d 'Show version'
|
|
78
|
+
complete -c parakeet -n '__fish_use_subcommand' -s v -d 'Show version'
|
|
79
|
+
complete -c parakeet -n '__fish_use_subcommand' -l json -d 'Output results as JSON'
|
|
80
|
+
complete -c parakeet -n '__fish_use_subcommand' -l toon -d 'Output results as TOON (compact, LLM-friendly encoding of the same data as --json)'
|
|
81
|
+
complete -c parakeet -n '__fish_use_subcommand' -l timestamps -d 'Include timestamped transcript segments in JSON/TOON output'
|
|
82
|
+
complete -c parakeet -n '__fish_use_subcommand' -l speakers -d 'Include speaker labels in transcript segments. Requires --json / --toon / --format json. Implies --timestamps. Currently darwin-arm64 only (#199).'
|
|
83
|
+
complete -c parakeet -n '__fish_use_subcommand' -l include-errors -d 'With --json, output { results, errors } so scripts can read per-file failures without parsing stderr'
|
|
84
|
+
complete -c parakeet -n '__fish_use_subcommand' -l verbose -d 'Show language detection details'
|
|
85
|
+
complete -c parakeet -n '__fish_use_subcommand' -l format -r -d 'Output format: transcript | json | toon (long-form alias for --json / --toon)'
|
|
86
|
+
complete -c parakeet -n '__fish_use_subcommand' -l lang -r -d 'Expected language code (ISO 639-1), warn if mismatch'
|
|
87
|
+
complete -c parakeet -n '__fish_use_subcommand' -l debug -d 'Trace engine subprocess calls on stderr (or KESHA_DEBUG=1)'
|
|
88
|
+
complete -c parakeet -n '__fish_use_subcommand' -l vad -d 'Force Silero VAD preprocessing (kesha install --vad first). Without this, VAD auto-engages on audio ≥ 120s.'
|
|
89
|
+
complete -c parakeet -n '__fish_use_subcommand' -l no-vad -d 'Disable VAD preprocessing regardless of duration or install state'
|
|
90
|
+
complete -c parakeet -n '__fish_seen_subcommand_from completions' -l help -d 'Show help'
|
|
91
|
+
complete -c parakeet -n '__fish_seen_subcommand_from completions' -s h -d 'Show help'
|
|
92
|
+
complete -c parakeet -n '__fish_seen_subcommand_from doctor' -l help -d 'Show help'
|
|
93
|
+
complete -c parakeet -n '__fish_seen_subcommand_from doctor' -s h -d 'Show help'
|
|
94
|
+
complete -c parakeet -n '__fish_seen_subcommand_from doctor' -l json -d 'Output diagnostics as JSON'
|
|
95
|
+
complete -c parakeet -n '__fish_seen_subcommand_from doctor' -l redact -d 'Redact secrets and user-home paths from diagnostic output'
|
|
96
|
+
complete -c parakeet -n '__fish_seen_subcommand_from install' -l help -d 'Show help'
|
|
97
|
+
complete -c parakeet -n '__fish_seen_subcommand_from install' -s h -d 'Show help'
|
|
98
|
+
complete -c parakeet -n '__fish_seen_subcommand_from install' -l coreml -d 'Force CoreML backend (macOS arm64)'
|
|
99
|
+
complete -c parakeet -n '__fish_seen_subcommand_from install' -l onnx -d 'Force ONNX backend'
|
|
100
|
+
complete -c parakeet -n '__fish_seen_subcommand_from install' -l no-cache -d 'Re-download even if cached'
|
|
101
|
+
complete -c parakeet -n '__fish_seen_subcommand_from install' -l plan -d 'Show download, disk, and warm-up plan without changing local state'
|
|
102
|
+
complete -c parakeet -n '__fish_seen_subcommand_from install' -l tts -d 'Also install TTS models (Kokoro EN + Vosk-TTS RU, ~990MB)'
|
|
103
|
+
complete -c parakeet -n '__fish_seen_subcommand_from install' -l vad -d 'Also install Silero VAD (~2.3MB) for long-audio preprocessing'
|
|
104
|
+
complete -c parakeet -n '__fish_seen_subcommand_from install' -l diarize -d 'Also install the Sortformer streaming-diarization model (~245MB, darwin-arm64 only — #199)'
|
|
105
|
+
complete -c parakeet -n '__fish_seen_subcommand_from manpage' -l help -d 'Show help'
|
|
106
|
+
complete -c parakeet -n '__fish_seen_subcommand_from manpage' -s h -d 'Show help'
|
|
107
|
+
complete -c parakeet -n '__fish_seen_subcommand_from say' -l help -d 'Show help'
|
|
108
|
+
complete -c parakeet -n '__fish_seen_subcommand_from say' -s h -d 'Show help'
|
|
109
|
+
complete -c parakeet -n '__fish_seen_subcommand_from say' -l voice -r -d 'Voice id, e.g. en-am_michael'
|
|
110
|
+
complete -c parakeet -n '__fish_seen_subcommand_from say' -l lang -r -d 'BCP 47 language code (default en-us)'
|
|
111
|
+
complete -c parakeet -n '__fish_seen_subcommand_from say' -l out -r -d 'Write audio to file instead of stdout'
|
|
112
|
+
complete -c parakeet -n '__fish_seen_subcommand_from say' -l rate -r -d 'Speaking rate 0.5–2.0'
|
|
113
|
+
complete -c parakeet -n '__fish_seen_subcommand_from say' -l list-voices -d 'List installed voices and exit'
|
|
114
|
+
complete -c parakeet -n '__fish_seen_subcommand_from say' -l ssml -d 'Parse input as SSML (supports <speak>, <break>; strips unknown tags)'
|
|
115
|
+
complete -c parakeet -n '__fish_seen_subcommand_from say' -l format -r -d 'Output format: wav (default) or ogg-opus (Telegram-ready voice note). Inferred from --out extension when omitted.'
|
|
116
|
+
complete -c parakeet -n '__fish_seen_subcommand_from say' -l bitrate -r -d 'Opus bitrate in bits/sec (e.g. 32000). Only with --format ogg-opus.'
|
|
117
|
+
complete -c parakeet -n '__fish_seen_subcommand_from say' -l sample-rate -r -d 'Opus encoder sample rate (8000/12000/16000/24000/48000). Only with --format ogg-opus.'
|
|
118
|
+
complete -c parakeet -n '__fish_seen_subcommand_from say' -l no-expand-abbrev -d 'Disable Russian acronym auto-expansion (ВОЗ → \'вэ о зэ\') for ru-vosk-* voices. <say-as interpret-as=\'characters\'> still works. Applies to Russian (ru-vosk-*) and English (en-*) voices.'
|
|
119
|
+
complete -c parakeet -n '__fish_seen_subcommand_from say' -l verbose -d 'Log TTS synthesis time to stderr'
|
|
120
|
+
complete -c parakeet -n '__fish_seen_subcommand_from say' -l debug -d 'Trace engine subprocess calls on stderr (or KESHA_DEBUG=1)'
|
|
121
|
+
complete -c parakeet -n '__fish_seen_subcommand_from stats' -l help -d 'Show help'
|
|
122
|
+
complete -c parakeet -n '__fish_seen_subcommand_from stats' -s h -d 'Show help'
|
|
123
|
+
complete -c parakeet -n '__fish_seen_subcommand_from stats' -l format -r -d 'Export format: json | csv'
|
|
124
|
+
complete -c parakeet -n '__fish_seen_subcommand_from status' -l help -d 'Show help'
|
|
125
|
+
complete -c parakeet -n '__fish_seen_subcommand_from status' -s h -d 'Show help'
|
|
126
|
+
complete -c parakeet -n '__fish_seen_subcommand_from status' -l disk -d 'Include recursive cache disk usage'
|
|
127
|
+
complete -c parakeet -n '__fish_seen_subcommand_from support-bundle' -l help -d 'Show help'
|
|
128
|
+
complete -c parakeet -n '__fish_seen_subcommand_from support-bundle' -s h -d 'Show help'
|
|
129
|
+
complete -c parakeet -n '__fish_seen_subcommand_from support-bundle' -l output -r -d 'Write archive to this .tar.gz path'
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
#compdef kesha parakeet
|
|
2
|
+
# zsh completion for kesha.
|
|
3
|
+
|
|
4
|
+
_kesha() {
|
|
5
|
+
local -a commands
|
|
6
|
+
commands=(
|
|
7
|
+
'completions:Print shell completion script for bash, zsh, or fish'
|
|
8
|
+
'doctor:Collect support diagnostics without changing local state'
|
|
9
|
+
'install:Download inference engine and models'
|
|
10
|
+
'manpage:Print the kesha(1) manpage'
|
|
11
|
+
'say:Synthesize speech from text (TTS). Writes audio to stdout (or --out file). Defaults to WAV; use --format ogg-opus for messenger-ready voice notes.'
|
|
12
|
+
'stats:Manage local anonymous Kesha Stats'
|
|
13
|
+
'status:Show backend installation status'
|
|
14
|
+
'support-bundle:Create a redacted diagnostics archive for support'
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
if (( CURRENT == 2 )); then
|
|
18
|
+
if [[ "$words[CURRENT]" == -* ]]; then
|
|
19
|
+
_arguments '--help[Show help]' \
|
|
20
|
+
'-h[Show help]' \
|
|
21
|
+
'--version[Show version]' \
|
|
22
|
+
'-v[Show version]' \
|
|
23
|
+
'--json[Output results as JSON]' \
|
|
24
|
+
'--toon[Output results as TOON (compact, LLM-friendly encoding of the same data as --json)]' \
|
|
25
|
+
'--timestamps[Include timestamped transcript segments in JSON/TOON output]' \
|
|
26
|
+
'--speakers[Include speaker labels in transcript segments. Requires --json / --toon / --format json. Implies --timestamps. Currently darwin-arm64 only (#199).]' \
|
|
27
|
+
'--include-errors[With --json, output { results, errors } so scripts can read per-file failures without parsing stderr]' \
|
|
28
|
+
'--verbose[Show language detection details]' \
|
|
29
|
+
'--format=[Output format: transcript | json | toon (long-form alias for --json / --toon)]:format:' \
|
|
30
|
+
'--lang=[Expected language code (ISO 639-1), warn if mismatch]:lang:' \
|
|
31
|
+
'--debug[Trace engine subprocess calls on stderr (or KESHA_DEBUG=1)]' \
|
|
32
|
+
'--vad[Force Silero VAD preprocessing (kesha install --vad first). Without this, VAD auto-engages on audio ≥ 120s.]' \
|
|
33
|
+
'--no-vad[Disable VAD preprocessing regardless of duration or install state]'
|
|
34
|
+
else
|
|
35
|
+
_describe -t commands 'kesha command' commands
|
|
36
|
+
fi
|
|
37
|
+
return
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
case "$words[2]" in
|
|
41
|
+
completions)
|
|
42
|
+
_arguments '--help[Show help]' \
|
|
43
|
+
'-h[Show help]'
|
|
44
|
+
;;
|
|
45
|
+
doctor)
|
|
46
|
+
_arguments '--help[Show help]' \
|
|
47
|
+
'-h[Show help]' \
|
|
48
|
+
'--json[Output diagnostics as JSON]' \
|
|
49
|
+
'--redact[Redact secrets and user-home paths from diagnostic output]'
|
|
50
|
+
;;
|
|
51
|
+
install)
|
|
52
|
+
_arguments '--help[Show help]' \
|
|
53
|
+
'-h[Show help]' \
|
|
54
|
+
'--coreml[Force CoreML backend (macOS arm64)]' \
|
|
55
|
+
'--onnx[Force ONNX backend]' \
|
|
56
|
+
'--no-cache[Re-download even if cached]' \
|
|
57
|
+
'--plan[Show download, disk, and warm-up plan without changing local state]' \
|
|
58
|
+
'--tts[Also install TTS models (Kokoro EN + Vosk-TTS RU, ~990MB)]' \
|
|
59
|
+
'--vad[Also install Silero VAD (~2.3MB) for long-audio preprocessing]' \
|
|
60
|
+
'--diarize[Also install the Sortformer streaming-diarization model (~245MB, darwin-arm64 only — #199)]'
|
|
61
|
+
;;
|
|
62
|
+
manpage)
|
|
63
|
+
_arguments '--help[Show help]' \
|
|
64
|
+
'-h[Show help]'
|
|
65
|
+
;;
|
|
66
|
+
say)
|
|
67
|
+
_arguments '--help[Show help]' \
|
|
68
|
+
'-h[Show help]' \
|
|
69
|
+
'--voice=[Voice id, e.g. en-am_michael]:voice:' \
|
|
70
|
+
'--lang=[BCP 47 language code (default en-us)]:lang:' \
|
|
71
|
+
'--out=[Write audio to file instead of stdout]:out:' \
|
|
72
|
+
'--rate=[Speaking rate 0.5–2.0]:rate:' \
|
|
73
|
+
'--list-voices[List installed voices and exit]' \
|
|
74
|
+
'--ssml[Parse input as SSML (supports <speak>, <break>; strips unknown tags)]' \
|
|
75
|
+
'--format=[Output format: wav (default) or ogg-opus (Telegram-ready voice note). Inferred from --out extension when omitted.]:format:' \
|
|
76
|
+
'--bitrate=[Opus bitrate in bits/sec (e.g. 32000). Only with --format ogg-opus.]:bitrate:' \
|
|
77
|
+
'--sample-rate=[Opus encoder sample rate (8000/12000/16000/24000/48000). Only with --format ogg-opus.]:sample rate:' \
|
|
78
|
+
'--no-expand-abbrev[Disable Russian acronym auto-expansion (ВОЗ → '\''вэ о зэ'\'') for ru-vosk-* voices. <say-as interpret-as='\''characters'\''> still works. Applies to Russian (ru-vosk-*) and English (en-*) voices.]' \
|
|
79
|
+
'--verbose[Log TTS synthesis time to stderr]' \
|
|
80
|
+
'--debug[Trace engine subprocess calls on stderr (or KESHA_DEBUG=1)]'
|
|
81
|
+
;;
|
|
82
|
+
stats)
|
|
83
|
+
_arguments '--help[Show help]' \
|
|
84
|
+
'-h[Show help]' \
|
|
85
|
+
'--format=[Export format: json | csv]:format:'
|
|
86
|
+
;;
|
|
87
|
+
status)
|
|
88
|
+
_arguments '--help[Show help]' \
|
|
89
|
+
'-h[Show help]' \
|
|
90
|
+
'--disk[Include recursive cache disk usage]'
|
|
91
|
+
;;
|
|
92
|
+
support-bundle)
|
|
93
|
+
_arguments '--help[Show help]' \
|
|
94
|
+
'-h[Show help]' \
|
|
95
|
+
'--output=[Write archive to this .tar.gz path]:output:'
|
|
96
|
+
;;
|
|
97
|
+
*)
|
|
98
|
+
_arguments '--help[Show help]' \
|
|
99
|
+
'-h[Show help]' \
|
|
100
|
+
'--version[Show version]' \
|
|
101
|
+
'-v[Show version]' \
|
|
102
|
+
'--json[Output results as JSON]' \
|
|
103
|
+
'--toon[Output results as TOON (compact, LLM-friendly encoding of the same data as --json)]' \
|
|
104
|
+
'--timestamps[Include timestamped transcript segments in JSON/TOON output]' \
|
|
105
|
+
'--speakers[Include speaker labels in transcript segments. Requires --json / --toon / --format json. Implies --timestamps. Currently darwin-arm64 only (#199).]' \
|
|
106
|
+
'--include-errors[With --json, output { results, errors } so scripts can read per-file failures without parsing stderr]' \
|
|
107
|
+
'--verbose[Show language detection details]' \
|
|
108
|
+
'--format=[Output format: transcript | json | toon (long-form alias for --json / --toon)]:format:' \
|
|
109
|
+
'--lang=[Expected language code (ISO 639-1), warn if mismatch]:lang:' \
|
|
110
|
+
'--debug[Trace engine subprocess calls on stderr (or KESHA_DEBUG=1)]' \
|
|
111
|
+
'--vad[Force Silero VAD preprocessing (kesha install --vad first). Without this, VAD auto-engages on audio ≥ 120s.]' \
|
|
112
|
+
'--no-vad[Disable VAD preprocessing regardless of duration or install state]'
|
|
113
|
+
;;
|
|
114
|
+
esac
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
_kesha "$@"
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Product positioning
|
|
2
|
+
|
|
3
|
+
Kesha Voice Kit is a local-first voice toolkit for developers and agent workflows. It is built for small, scriptable jobs where a CLI can turn audio into text, text into audio, or voice messages into structured data without sending content to a hosted API.
|
|
4
|
+
|
|
5
|
+
The product promise is not "one model for every audio problem." The promise is a boring, automatable local voice stack with clear platform limits, predictable install paths, and machine-readable output.
|
|
6
|
+
|
|
7
|
+
## Who this is for
|
|
8
|
+
|
|
9
|
+
- Developers and agent builders who need local speech-to-text for voice messages, meetings, support clips, or batch audio files.
|
|
10
|
+
- OpenClaw users who want private, low-latency voice-message transcription through a CLI model route.
|
|
11
|
+
- macOS users who want the fastest path on Apple Silicon through CoreML, with a CPU/ONNX fallback on Linux and Windows.
|
|
12
|
+
- Automation-heavy users who prefer stdout/stderr contracts, JSON/TOON output, and shell-friendly commands over a hosted dashboard.
|
|
13
|
+
- Projects that can accept explicit model downloads and local cache management in exchange for no API keys and no cloud audio upload.
|
|
14
|
+
|
|
15
|
+
## Primary workflows
|
|
16
|
+
|
|
17
|
+
| Workflow | Status | Command surface |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| Transcribe one or more audio files to plain text | Stable | `kesha audio.ogg` |
|
|
20
|
+
| Transcribe to structured output for scripts or agents | Stable | `kesha --json audio.ogg`, `kesha --toon audio.ogg`, `kesha --format transcript audio.ogg` |
|
|
21
|
+
| Detect likely audio/text language during transcription | Stable | `--lang`, `--verbose`, JSON/TOON language fields |
|
|
22
|
+
| Skip silence in long audio | Beta | `kesha --vad meeting.m4a`, auto-on for long audio when VAD is installed |
|
|
23
|
+
| Synthesize English or Russian speech locally | Beta | `kesha say "text"`, `kesha install --tts` |
|
|
24
|
+
| Use macOS system voices without model downloads | Stable on macOS | `kesha say --voice macos-*` |
|
|
25
|
+
| Label speakers in meeting transcripts | Preview, darwin-arm64 only | `kesha --json --vad --speakers meeting.m4a` |
|
|
26
|
+
| Integrate with OpenClaw as a local voice model | Stable integration surface, user-configured route | `docs/openclaw.md` |
|
|
27
|
+
| Use Raycast actions for selected-file transcription or clipboard speech | Beta, macOS only | `raycast/` extension |
|
|
28
|
+
| Install through Nix instead of Bun/npm | Beta, selected systems | `docs/nix-install.md` |
|
|
29
|
+
|
|
30
|
+
## Non-goals
|
|
31
|
+
|
|
32
|
+
- Hosted SaaS transcription, dashboards, accounts, billing, or team management.
|
|
33
|
+
- Streaming phone-call transcription or real-time conversation infrastructure.
|
|
34
|
+
- Speaker identity across files. Diarization emits per-file cluster IDs, not names or persistent voice profiles.
|
|
35
|
+
- Full SSML coverage. Kesha supports a practical subset for current TTS engines; unsupported tags should fail or warn clearly.
|
|
36
|
+
- Universal TTS across all 25 STT languages. TTS is intentionally scoped to English, Russian, and macOS system voices.
|
|
37
|
+
- Model training, fine-tuning, or benchmark leadership on every dataset.
|
|
38
|
+
- Browser/mobile SDKs. The supported product surface is CLI-first, with thin integrations around it.
|
|
39
|
+
|
|
40
|
+
## Feature maturity
|
|
41
|
+
|
|
42
|
+
| Feature | Maturity | Notes |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| Core STT CLI | Stable | Main product path; stdout transcript, stderr progress/errors. |
|
|
45
|
+
| JSON / TOON / transcript output formats | Stable | Intended for scripts, agents, and downstream tooling. |
|
|
46
|
+
| Audio language detection | Stable | Used for warnings and structured metadata. |
|
|
47
|
+
| VAD preprocessing | Beta | Useful for long or silence-heavy audio; short voice messages stay on the fast path. |
|
|
48
|
+
| English/Russian TTS | Beta | Requires `kesha install --tts`; model cache and first-run cost are expected. |
|
|
49
|
+
| macOS AVSpeech voices | Stable on macOS | Zero-install system voices; quality is OS voice quality, not neural TTS. |
|
|
50
|
+
| SSML subset | Preview | `<prosody rate>`, Russian stress markers, and IPA support are engine-specific. |
|
|
51
|
+
| Speaker diarization | Preview | darwin-arm64 only; cluster IDs are stable within one file only. |
|
|
52
|
+
| Raycast extension | Beta | Convenience UI over the CLI; macOS-only. |
|
|
53
|
+
| OpenClaw plugin | Stable integration surface | Discovery is packaged; actual audio route remains explicit user config. |
|
|
54
|
+
| Nix flake | Beta | Reproducible alternate install path for selected systems; Bun/npm remains canonical. |
|
|
55
|
+
|
|
56
|
+
## Platform matrix
|
|
57
|
+
|
|
58
|
+
| Capability | macOS arm64 | macOS x64 | Linux x64 | Windows x64 | Nix path |
|
|
59
|
+
|---|---|---|---|---|---|
|
|
60
|
+
| STT | Supported, CoreML path | Not shipped | Supported, ONNX CPU path | Supported, ONNX CPU path | `aarch64-darwin`, `x86_64-linux` |
|
|
61
|
+
| Audio language detection | Supported | Not shipped | Supported | Supported | Supported where the flake builds |
|
|
62
|
+
| VAD | Supported with `kesha install --vad` | Not shipped | Supported with `kesha install --vad` | Supported with `kesha install --vad` | Supported where the engine path includes VAD assets |
|
|
63
|
+
| TTS: English Kokoro | Supported, FluidAudio/CoreML in release builds | Not shipped | Supported, ONNX path | Supported, ONNX path | Supported except where noted in `docs/nix-install.md` |
|
|
64
|
+
| TTS: Russian Vosk-TTS | Supported | Not shipped | Supported | Supported | Supported except where noted in `docs/nix-install.md` |
|
|
65
|
+
| macOS system voices | Supported | Not shipped | Not applicable | Not applicable | Supported on `aarch64-darwin` |
|
|
66
|
+
| Speaker diarization | Preview, darwin-arm64 only | Not supported | Not supported | Not supported | Not wired into the Nix build yet |
|
|
67
|
+
| Raycast extension | Supported | Not shipped | Not applicable | Not applicable | Not applicable |
|
|
68
|
+
| OpenClaw integration | Supported through CLI route | Not shipped | Supported through CLI route | Supported through CLI route | Use the installed `kesha` command from the chosen path |
|
|
69
|
+
|
|
70
|
+
`macOS x64` means Intel Macs. Kesha does not currently publish a `darwin-x64` engine binary, so Intel Macs are intentionally marked as not shipped rather than implied to use the ONNX fallback.
|
|
71
|
+
|
|
72
|
+
## When to choose something else
|
|
73
|
+
|
|
74
|
+
Use a hosted transcription provider when you need managed uptime, centralized audit logs, team permissions, or no local model cache. Use a streaming ASR stack when partial transcripts during a live call matter more than local-first batch reliability. Use a domain-specific ASR model when medical, legal, or noisy industrial audio quality is the primary requirement.
|
|
75
|
+
|
|
76
|
+
Kesha is strongest when the input is already a file, the caller is an engineer or agent, and the desired output is a transcript, JSON object, TOON payload, or WAV file that can continue through a local pipeline.
|