kesha-voice-kit
Local multilingual voice toolkit — speech-to-text (STT), text-to-speech (TTS), and language detection. Runs entirely offline on Apple Silicon, Linux, and Windows. No API keys, no cloud. NVIDIA Parakeet TDT for STT across 25 European languages, Kokoro-82M + Piper VITS for TTS, plus macOS AVSpeechSynthesizer for ~180 system voices with zero install.
git clone https://github.com/drakulavich/kesha-voice-kit
git clone --depth=1 https://github.com/drakulavich/kesha-voice-kit ~/.claude/skills/drakulavich-kesha-voice-kit-kesha-voice-kit
SKILL.mdkesha-voice-kit
Local voice toolkit: transcribe voice messages to text, synthesize speech, detect language of audio or text. Fully offline after
kesha install. No API keys, no per-minute billing.
Trigger keywords for when to use this skill: voice message, voice memo, .ogg, .wav, .mp3, audio file, transcribe, transcription, speech-to-text, STT, text-to-speech, TTS, synthesize speech, say, multilingual voice, multilingual ASR, language detection, offline voice, privacy, Apple Silicon, CoreML.
When to use
- Voice memo arrived (Telegram, WhatsApp, Slack, Signal .ogg/.opus/.m4a): transcribe with
and branch on the detected language.kesha --json <path> - Need to reply with audio: synthesize with
. Auto-routes by detected language (Kokoro-82M for English, Piper for Russian). For other languages and ~180 more voices usekesha say "<text>" > reply.wav
on macOS (zero model download).--voice macos-* - Need to detect what language a file is in before choosing a pipeline:
returns both audio-based and text-based language detection with confidence scores.kesha --json audio.ogg
STT: transcribe audio
# JSON output with language detection (recommended for automation) kesha --json voice.ogg
[{ "file": "voice.ogg", "text": "Привет, как дела?", "lang": "ru", "audioLanguage": { "code": "ru", "confidence": 0.98 }, "textLanguage": { "code": "ru", "confidence": 0.99 } }]
Use
lang (or the more detailed audioLanguage/textLanguage) to decide how to respond.
Formats: .ogg, .opus, .mp3, .m4a, .wav, .flac, .webm — decoded via symphonia, no ffmpeg required.
Other output modes:
— plain transcript on stdoutkesha audio.ogg
— transcript +kesha --format transcript audio.ogg
footer[lang: ru, confidence: 0.99]
— human-readable with language infokesha --verbose audio.ogg
— warn if detected language differs (useful sanity check)kesha --lang en audio.ogg
TTS: synthesize speech
kesha say "Hello, world" > hello.wav # auto-routes en → Kokoro-82M kesha say "Привет, мир" > privet.wav # auto-routes ru → Piper kesha say --voice macos-de-DE "Guten Tag" > de.wav # any macOS system voice — German, French, Italian, ... kesha say --list-voices # Kokoro + Piper + ~180 macos-* voices
Output: WAV mono float32.
--out <path> writes to a file instead of stdout.
Language detection standalone
kesha --json audio.ogg includes both audio-based (audioLanguage) and text-based (textLanguage) detection. Use audio detection to identify the language before running language-specific logic.
Install
bun add --global @drakulavich/kesha-voice-kit # or: npm i -g @drakulavich/kesha-voice-kit kesha install # downloads engine (~350 MB) kesha install --tts # adds Kokoro + Piper RU (~390 MB more, for TTS)
One-time runtime prereq for TTS on each platform:
- macOS:
brew install espeak-ng - Linux:
sudo apt install espeak-ng - Windows:
choco install espeak-ng
macos-* voices need no install — they use voices already on the Mac.
Supported languages
Speech-to-text (25): Bulgarian, Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hungarian, Italian, Latvian, Lithuanian, Maltese, Polish, Portuguese, Romanian, Russian, Slovak, Slovenian, Spanish, Swedish, Ukrainian.
Text-to-speech: English (Kokoro-82M, ~70 voices), Russian (Piper
ru-denis), plus any macOS system voice via --voice macos-*.
Performance
- ASR: ~19× faster than OpenAI Whisper on Apple Silicon (CoreML via FluidAudio), ~2.5× on CPU (ONNX via
).ort - TTS: sub-second latency for short utterances on Apple Silicon.
Why local
No API keys to manage. No per-minute billing. Voice data never leaves the machine — important for regulated industries, personal messaging, and anything that shouldn't be in a third-party log.