@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 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), works on any platform (ONNX fallback).<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>
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.