Tsukiko
Офлайн-диктовка и расшифровка аудио для macOS и Windows. Нажали клавишу, сказали, и текст появился там, где стоит курсор. Модели распознавания работают прямо на компьютере.
Зачем
Tsukiko для тех, кто хочет диктовать и расшифровывать аудио, не отправляя голос в облако. Модели распознавания работают прямо на компьютере, а текст попадает в любое приложение, от IDE до чата.
Как это работает
Зажали клавишу, сказали, и текст напечатался под курсором; диктовку можно запускать и личной кодовой фразой. Аудио или видео перетаскиваются в окно, а расшифровка с таймкодами экспортируется в TXT, Markdown, SRT, VTT или JSON.
Что сделал я
Идея, архитектура, разработка и релизы: десктопное приложение на Flutter, нативные системные хуки на Swift и C++, движки распознавания в отдельных процессах и конвейер подписанных релизов. Двое внешних контрибьюторов прислали исправления, образ маскота придумала Feyza.
Статус
Открытый код под MIT, подписанные релизы для macOS и Windows, проект активно развивается. Доработка очереди диктовки сократила медианное время короткой фразы с 2,28 до 1,35 с на Apple M5.
- Роль
- Автор и ведущий разработчик
- Период
- 2026 – сейчас
- Статус
- Выпущен
- Стек
- Flutter Desktop, Dart, flutter_bloc, bloc_concurrency, whisper.cpp, NeMo-Speech.cpp, sherpa-onnx, Swift, C++, Metal, Vulkan, FFmpeg, GitHub Actions, Inno Setup
Главное
- Диктовка в любое приложение: зажали клавишу, сказали, и текст напечатался под курсором или остался в буфере обмена, при желании с Enter в конце
- Расшифровка аудио и видео пачкой с экспортом в TXT, Markdown, SRT, VTT и JSON
- Запуск и остановка голосом по личной кодовой фразе, откалиброванной под ваш голос
- Свой словарь для имён и жаргона: подсказки модели и автозамены
- CLI, локальный API и навык для AI-агентов
- Подписанные установщики для macOS и Windows, ничего не уходит с компьютера


Собери сборку под Windows сегодня вечером и обнови заметки к релизу.


Главное окно: аудио или видео перетаскивается в центр, справа выбираются модель, язык, пунктуация и разбивка на фрагменты.


Настройки диктовки: четыре сочетания клавиш (удерживать, включить и выключить, отменить, отправить Enter) и отдельная модель для диктовки.


Свой словарь: подсказки помогают модели расслышать термин, замены исправляют написание.


Каталог моделей: whisper.cpp и NeMo с размером, назначением и языками, скачиваются по запросу.
1 / 4 Главное окно: аудио или видео перетаскивается в центр, справа выбираются модель, язык, пунктуация и разбивка на фрагменты.
Что это
Tsukiko превращает речь в текст и ничего не отправляет в облако. Нажимаете горячую клавишу в любом приложении, говорите, и слова печатаются там, где стоит курсор: в IDE, браузере, мессенджере. Плавающий индикатор показывает, что запись идёт, а следующую фразу можно начинать, пока предыдущая ещё распознаётся.
Это же приложение расшифровывает файлы. Перетаскиваете в окно аудио или видео, выбираете движок, модель и язык и получаете текст, разбитый на сегменты с таймкодами. Каждый сегмент можно прослушать, а результат выгрузить в TXT, Markdown, SRT, VTT или JSON. Диктовку можно запускать голосом, по кодовой фразе, а в словарь добавить названия проектов и профессиональный жаргон.
Что я сделал
Десктопное приложение для macOS и Windows вокруг открытых движков распознавания:
- очередь файлов с просмотром расшифровки и настройками для каждой записи;
- диктовку на уровне системы с плавающим индикатором в четырёх видах, от панели с волной до скрытого режима;
- детектор кодовой фразы с пошаговой калибровкой голоса;
- историю диктовок, которая переживает перезапуск, и выбор, как попадает текст: вставить, вставить и оставить в буфере или только в буфер;
- разделение дикторов в записях с несколькими голосами;
- анимированную лунную кошку, которая показывает состояние приложения (покой, слушает, работает) и нарисована кодом;
- CLI
tsukiko-transcribe, локальный API и навык для AI-агентов; - подписанные установщики и автоматический выпуск релизов для обеих систем.


Главное окно: аудио или видео перетаскивается в центр, справа выбираются модель, язык, пунктуация и разбивка на фрагменты.


Настройки диктовки: четыре сочетания клавиш (удерживать, включить и выключить, отменить, отправить Enter) и отдельная модель для диктовки.


Свой словарь: подсказки помогают модели расслышать термин, замены исправляют написание.


Каталог моделей: whisper.cpp и NeMo с размером, назначением и языками, скачиваются по запросу.
1 / 4 Главное окно: аудио или видео перетаскивается в центр, справа выбираются модель, язык, пунктуация и разбивка на фрагменты.
Технические решения
- Движки в отдельных процессах. whisper.cpp и NeMo-Speech.cpp (Conformer-модели в GGUF) поставляются как отдельные нативные бинарники. Flutter-интерфейс общается с ними через IPC и локальный HTTP-сервер, и тяжёлый инференс не попадает в процесс интерфейса.
- Несколько Flutter-движков в одном процессе. Главное окно, поповер в строке меню или трее и плавающий индикатор записи работают как отдельные движки.
- Ввод на уровне системы. На macOS
CGEventTapи Accessibility API (Swift), на WindowsWH_KEYBOARD_LLиSendInput(C++), всё через platform channels. - Кодовая фраза. Свой детектор ключевых слов: 13-полосные MFCC и DTW, калибровка в четыре шага и запись похожего слова-«самозванца», чтобы отсекать ложные срабатывания.
- Пользовательский словарь. Термины попадают в
initial_promptWhisper с учётом лимита токенов, а нечёткая замена потом исправляет частые созвучные ошибки. - Очередь диктовки. Повторное использование результата энкодера после определения языка сократило медианное время короткой фразы с 2,28 до 1,35 с на Apple M5.
- Аппаратное ускорение. Metal на Apple Silicon и Vulkan на Windows, с автоматическим переходом на CPU.
- Для разработчиков. CLI передаёт задачу уже запущенному приложению через IPC, и модель не грузится второй раз. Локальный REST и WebSocket API на
127.0.0.1требует токен.
Результат
Открытый код под лицензией MIT и подписанные релизы для macOS и Windows: универсальный DMG с подписью Apple Developer ID и установщик для Windows, который проверяет Vulkan и при необходимости переключается на CPU. Каждый релиз собирается в GitHub Actions с регрессионным тестом на настоящих движках. Проект активно развивается.
Моя роль
Идея, архитектура, разработка и выпуск релизов. Два сторонних контрибьютора прислали исправления для пограничных случаев на Windows и macOS. Образ маскота, лунной кошки, придумала художница Feyza; анимированная кошка в приложении теперь рисуется кодом по её листам.
Замеры
- 1,35 сМедианное время распознавания короткой фразы в очереди диктовки, large-v3-turbo на Apple M5 (было 2,28 с) (источник)