Kesha Voice Kit

by drakulavich (community) · Claude Desktop, Claude Code, OpenCode, macOS, Linux, Windows, Bun, OpenClaw, Hermes

MCP MCP Servers Open Source v1.28.0-cli · 15.08.2026 активный

Даёт вашим инструментам голос — speech-to-text и обратно, 25 языков, до ~19× быстрее Whisper. Работает локально.

v1.28.0-cli
15.08.2026 current

Установка
# 1. Install Bun (skip if you have it)
curl -fsSL https://bun.sh/install | bash        # macOS/Linux — or: brew install oven-sh/bun/bun
powershell -c "irm bun.sh/install.ps1 | iex"    # Windows

# 2. Install Kesha
bun add -g @drakulavich/kesha-voice-kit
kesha --version                                 # confirms `kesha` resolved on PATH

# 3. Download the engine and models — pick one path
kesha init                                      # guided: TTS languages and optional VAD / diarization
kesha install --plan && kesha install           # manual: preview the sizes, then download
показать оригинал переведено ИИ

Kesha Voice Kit

Kesha Voice Kit

Тесты Версия npm Лицензия: MIT Bun

Дайте голос вашим локальным инструментам и агентам LLM.
Быстрое преобразование речи в текст, текста в речь, обнаружение голосовой активности и определение языка в одном локальном CLI-инструменте — CoreML на Apple Silicon, ONNX на Linux и Windows.

  • Транскрибируйте локально — 25 языков, до ~19 раз быстрее, чем Whisper на Apple Silicon, ~2,5 раза на CPU
  • Отвечайте голосом — преобразование текста в речь на 9 языках
  • Подключайте к агентам — запускайте голосовые рабочие процессы как команды CLI, сервер MCP, навык OpenClaw или агент Hermes
  • Маленький движок на Rust — один бинарный файл размером ~65 МБ, без ffmpeg, без Python, без нативных Node-аддонов

демонстрация kesha — транскрипция на английском и русском с автоматическим определением языка

Быстрый старт

Среда выполнения: Bun >= 1.3.0.

# 1. Install Bun (skip if you have it)
curl -fsSL https://bun.sh/install | bash        # macOS/Linux — or: brew install oven-sh/bun/bun
powershell -c "irm bun.sh/install.ps1 | iex"    # Windows

# 2. Install Kesha
bun add -g @drakulavich/kesha-voice-kit
kesha --version                                 # confirms `kesha` resolved on PATH

# 3. Download the engine and models — pick one path
kesha init                                      # guided: TTS languages and optional VAD / diarization
kesha install --plan && kesha install           # manual: preview the sizes, then download

# 4. Transcribe
kesha audio.ogg                                 # transcript to stdout

kesha install загружает ~2,5 ГБ на Linux/Windows и ~0,6 ГБ на Apple Silicon, чей движок CoreML использует меньший набор моделей. Загрузка всегда явная — ничего не скачивается в фоновом режиме — и отображает прогресс загрузки в stderr. Если bun --version не работает сразу после первого шага, перезагрузите PATH: exec $SHELL -l.

Предпочитаете Homebrew или Docker? См. Другие способы установки. Работаете в изолированной сети или за корпоративным зеркалом? См. docs/model-mirror.md.

Поддержка платформ

Все три платформы поддерживают транскрипцию, определение языка речи, работу с VAD и синтез речи. Строки, доступные только для macOS, требуют фреймворков Apple — это не отсутствие портирования. Windows — это протестированный путь, а не опубликованный бинарник, который никто не запускал: CI выполняет холодную установку kesha install на windows-latest, транскрибирует тестовый файл и выполняет цикл синтеза речи (#216, #667).

macOS arm64 Linux x64 Windows x64
Транскрипция · определение языка аудио · VAD CoreML / ANE ONNX CPU ONNX CPU
TTS — en ru es fr it pt ✅ ✅ ✅
TTS — hi ja zh и системные голоса macOS ✅ — —
Захват микрофона и живой диктант (kesha record) ✅ — —
Диаризация говорящих (--speakers) ✅ — —
Временные метки на уровне слов (words в --json) ✅ ✅ ✅
Автоматическое перенаправление голоса в зависимости от языка текста ✅ укажите --lang укажите --lang

Intel Mac не получают опубликованный бинарный движок. Полная матрица с метками зрелости: docs/product-positioning.md.

Преобразование речи в текст

kesha audio.ogg                            # transcribe (plain text)
kesha --format transcript audio.ogg        # text + language/confidence
kesha --format json audio.ogg              # full JSON with lang fields
kesha --json --timestamps audio.ogg        # JSON with timestamped segments
kesha --itn audio.ogg                      # spelled-out numbers -> digits
kesha --toon audio.ogg                     # compact LLM-friendly TOON
kesha status                               # show installed backend info
kesha status --disk                        # + recursive cache disk usage
kesha status --json                        # machine-readable, for scripts

Несколько файлов получают заголовки в стиле head; stdout — это транскрипция, stderr — ошибки — удобно для конвейеров:

$ kesha freedom.ogg tahiti.ogg
=== freedom.ogg ===
Свободу попугаям! Свободу!

=== tahiti.ogg ===
Таити, Таити! Не были мы ни в какой Таити! Нас и тут неплохо кормят.
  • Запись с микрофона (macOS): kesha record --out hello.wav записывает аудио с микрофона в WAV-файл (kesha hello.wav транскрибирует его). macOS запрашивает доступ к микрофону при первом использовании — предоставьте его в Системных настройках → Конфиденциальность и безопасность → Микрофон, если доступ был отклонён. На Linux/Windows или в безголовых системах передавайте любой существующий аудиофайл напрямую в kesha.
  • Диктовка напрямую в текст (darwin-arm64): kesha record --live транскрибирует микрофон по мере захвата и выводит транскрипт в stdout — без промежуточного WAV, поэтому можно использовать пайп (kesha record --live | pbcopy). Чтобы завершить запись после паузы, явно установите VAD, а затем включите опцию: kesha install --vad && kesha record --live --auto-stop. По умолчанию используется 1000 мс тишины после 250 мс речи; настройте параметры с помощью --auto-stop-silence-ms, --auto-stop-min-speech-ms и --auto-stop-threshold. Прогресс выводится в stderr. Linux и Windows не захватывают микрофон; передайте существующий аудиофайл в kesha для транскрипции. Прерывание обратимо: Ctrl-C (или SIGTERM) останавливает сессию, всё равно выводит продиктованный текст и завершается с кодом 130/143, а аудио сохраняется в восстановительный WAV-файл в ~/.cache/kesha/recordings/ — имя файла выводится в stderr при старте сессии, удаляется после успешной доставки транскрипта, сохраняется, если что-то — сигнал, сбой, закрытый терминал, оборванный пайп — помешало этому (#962).
  • Длинные / аудио с большими паузами: установите VAD (kesha install --vad); Kesha автоматически использует его для аудио длительностью более 120 с. Без VAD длинное аудио обрабатывается фиксированными фрагментами ASR. См. docs/vad.md.
  • Распознавание говорящих (darwin-arm64): kesha install --diarize (устанавливает также VAD), затем kesha --json --speakers meeting.m4a помечает каждый сегмент идентификатором speaker. Опция --speakers включает оконное разбиение VAD для любой длительности, поэтому её нельзя комбинировать с --no-vad. На Linux/Windows возвращается чёткая ошибка "только для darwin-arm64" (#199).
  • Временные метки на уровне слов (все платформы): kesha --json --timestamps audio.ogg добавляет массив words в каждый сегмент — { "word": "email", "start": 0.72, "end": 1.12 } — на той же относительной шкале времени, что и сегмент, поэтому слово всегда находится внутри несущего его сегмента. Метки считываются с собственной сетки кадров декодера, поэтому: времена квантуются с шагом 0.08 с, последовательные интервалы могут перекрываться (каждое end — это предсказание длительности слова, а не start следующего слова), end >= start вместо строгого неравенства, а пунктуация остаётся прикреплённой к своему слову. Ключ просто отсутствует там, где у сегмента нет слов — например, если сегмент был переписан с помощью --itn, — поэтому проверяйте возможность transcribe.words, а не ожидайте пустой массив (#720).
  • Определение языка текста: результаты в форматах JSON и TOON содержат поле textLanguage с кодом языка, уверенностью и его source. На macOS Kesha использует Apple NLLanguageRecognizer; на других платформах — встроенный запасной вариант tinyld, шкала уверенности которого отличается. Это отдельно от audioLanguage, который определяет язык речи при наличии.
  • Числа в письменной форме: --itn переписывает то, что модель произносит словами — "two hundred thirty two" → "232", "five dollars and fifty cents" → "$5.50". Опция включается вручную, работает на всех платформах, временные метки не затрагиваются. На практике поддерживается только английский; русский и другие языки остаются без изменений. Названия знаков препинания остаются словами ("dot", "comma", "the period of growth"), так как Kesha транскрибирует речь, а не диктовку — поэтому "example dot com" тоже сохраняет слова (#822). Союз "and" в предложении сохраняется перед числом ("cats and three dogs" → "cats and 3 dogs"), а "and", принадлежащий числу, объединяется с ним ("three hundred and five" → "305") (#1000) — и больше не разбивает число вокруг себя ("two hundred and thirty two" → "232", а не "230 2") (#1006). Число через дефис читается так же, как и через пробел ("twenty-five apples" → "25 apples"), а дефис между обычными словами остаётся без изменений ("well-known", "state-of-the-art", "twenty-something") (#1004).

Преобразование текста в речь


Kesha отвечает на 9 языках. Kokoro работает нативно через FluidAudio CoreML/ANE на Apple Silicon и через ONNX на Linux и Windows; для русского используется Vosk-TTS, а системные голоса macos-* не требуют загрузки моделей. На macOS Kesha выбирает голос в зависимости от языка текста; на Linux и Windows укажите язык с помощью --lang <code> (или голос с помощью --voice <id>) — иначе будет использоваться голос по умолчанию движка.

kesha install --tts                              # English voices; sizes differ per platform — preview: kesha install --plan
kesha install --tts en ru                        # + Russian (+~890 MB, Vosk)
kesha say "Hello, world" > hello.wav
kesha say "Привет, мир" > privet.wav             # auto-routes by language (macOS)
kesha say --lang ru "Привет, мир" > privet.wav   # explicit — the Linux/Windows path
kesha say --voice ru-vosk-m02 "Голос в текст." > ru.wav

Форматы вывода (--format или определяется по расширению --out):

kesha say "Hello" --out hi.wav                    # WAV (default, uncompressed)
kesha say "Hello" --format ogg-opus --out hi.ogg  # OGG/Opus — messenger voice notes
kesha say "Hello" --format flac --out hi.flac     # FLAC — lossless, plays in every browser incl. Safari/iOS

kesha say --list-voices выводит список установленных голосов. Голоса, полный каталог, системные голоса macOS, SSML, скорость речи (--rate, <prosody>), ударения в русских словах и обработка сокращений на русском и английском — всё это описано в docs/tts.md.

Языки

Распознавание речи поддерживает 25 языков, а синтез речи — 9. Полные таблицы с кодами, флагами и доступностью на разных платформах — в docs/languages.md. Детектор языка аудио распознаёт 107 языков.

Производительность

До ~19 раз быстрее, чем Whisper на Apple Silicon (M2), ~2,5 раза быстрее на CPU

Сравнение с Whisper large-v3-turbo, все движки с автоматическим определением языка:

Сравнение производительности: openai-whisper vs faster-whisper vs Kesha Voice Kit

Полная разбивка по файлам (русский + английский): BENCHMARK.md. Показатель для CPU — это движок ONNX на ядрах CPU M2; данные для x86 пока не опубликованы.

Другие способы установки

Все перечисленные методы устанавливают CLI-обёртку Bun; движок и модели всё равно загружаются явно через kesha install. (Исключение — Nix, который на данный момент собирает только движок из исходников; см. ниже.)

  • Homebrew — brew install drakulavich/tap/kesha-voice-kit · docs/homebrew.md
  • Пакеты для Linux (.deb/.rpm, x64) — публикуются в релизах CLI, см. docs/linux-packages.md
  • Docker (образ GHCR) — docs/docker.md
  • Nix (aarch64-darwin / x86_64-linux) — собирает движок из исходников (nix build github:drakulavich/kesha-voice-kit#kesha-engine). Полный CLI kesha через nix run / nix profile install пока недоступен — требуется сопровождающий с опытом работы с Nix для заполнения хеша сборки (#946). · docs/nix-install.md
  • Автодополнение для оболочек + man-страница — kesha completions bash|zsh|fish и kesha manpage выводят готовые файлы для установки в нужное место вашей оболочки.

Интеграции

  • MCP-сервер — kesha mcp предоставляет инструменты транскрипции/синтеза/перечисления для любых MCP-клиентов (Claude, Cursor, Codex, Gemini). Настройка: docs/mcp.md.
  • OpenClaw — дайте своему LLM-агенту уши. Установка и настройка: docs/openclaw.md.
  • Hermes Agent — локальное распознавание и синтез речи через провайдеры команд Hermes. Настройка: docs/hermes.md.
  • Raycast (macOS) — офлайн-диктовка с микрофона прямо из лаунчера: Dictate to Clipboard записывает с живым индикатором уровня сигнала, автоматически останавливается при тишине, транскрибирует локально и копирует текст. Установить из Raycast Store · исходники: raycast/.
  • Программный API — @drakulavich/kesha-voice-kit/core для использования внутри Bun-программы. См. docs/api.md.

Дополнительно

- Архитектура — поток данных во время выполнения, поставляемые модели, граница между CLI и Rust-движком, фиксация моделей и расположение тестов.

  • Варианты использования — готовые рецепты (транскрибация встречи, озвучка из OpenClaw, работа офлайн, перенос кэша).
  • Позиционирование продукта — поддерживаемые рабочие процессы, нецели, метки зрелости, матрица платформ.
  • Журнал изменений — каждая версия с подробным описанием изменений в поведении.
  • Диагностика: kesha doctor, kesha support-bundle (очищенный .tar.gz для баг-репортов) и kesha logs создают локальные диагностические отчёты без конфиденциальных данных — см. docs/diagnostic-logs.md. Каждая ошибка выводит стабильную строку error [CODE]: … и задокументированный код завершения процесса.
  • Скриптинг и CI: --json (или --toon) для машинно-читаемого вывода, --include-errors (с любым из них) для вывода ошибок по файлам в stdout вместе с результатами, --quiet/-q для подавления прогресса и --no-color (или NO_COLOR=1) для логов без цвета. Цвета автоматически отключаются при CI=true.
  • Конфиденциальность / Локальная статистика: Статистика отключена по умолчанию и полностью локальна. Включите её с помощью kesha stats enable, чтобы записывать операционные метрики без контента в локальную базу SQLite — без сетевых запросов, без хранения аудио, транскриптов, текста или путей. Полный список команд и жизненный цикл: docs/local-stats.md.

Участие в разработке

См. CONTRIBUTING.md, дорожную карту (Сейчас / Далее / Позже) и журнал решений (почему были выбраны или изменены платформы и модели). Настройка окружения для разработки: just dev-setup (Bun, Rust, nextest, системные библиотеки).

Лицензия

Создано с 💛🩵 и 🥤-энергией под лицензией MIT.

Войдите, чтобы оставить комментарий