2026-09-26projects/whisper-local-windows.mdwhisper-local-windows.md

Lazy to Text: голос вместо клавиатуры, без облака

≈ 2 минуты

Я много печатаю. Иногда слишком много. В какой-то момент поймал себя на том, что проще сказать, чем набирать, особенно когда мысль длинная, а формулировать её в голове уже скучно.

Готовые решения для диктовки есть. Встроенное распознавание в Windows существует сто лет и работает заметно хуже, чем хочется. Облачные сервисы работают хорошо, но всё, что ты диктуешь, уходит на чужой сервер. Мне это не нравилось.

Так в прошлом сентябре появился Lazy to Text. Первая версия была обёрткой над faster-whisper в докере, и я писал о ней в апреле. С тех пор 322 коммита, и проект стал другим, поэтому статья переписана.

Схема работы осталась. Приложение висит в трее и слушает горячие клавиши. Ctrl+F2: запись пошла, Ctrl+F3: запись остановилась, текст распознался и вставился в то окно, где ты был. Именно вставился, как будто напечатал. Ctrl+F6: выбросить запись. На macOS по умолчанию Ctrl+F8 и Ctrl+F9, клавиши переназначаются.

Ctrl+F2 → начать запись
Ctrl+F3 → остановить и вставить текст

Что поменялось. Докера больше нет, и PyTorch тоже нет. Все модели идут через ONNX Runtime с загрузчиком onnx-asr, установка похудела примерно с 4 гигабайт до 700 мегабайт. Моделей девять, пять из них под русский: GigaAM v3 со встроенной пунктуацией, T-One, обученный на 80 тысячах часов речи и заметно лучше Whisper на телефонном и шумном звуке, Vosk RU на 30 и 50 мегабайт для слабых ноутбуков. Плюс Whisper, Parakeet и Canary, когда нужны другие языки.

Появился macOS: на Apple Silicon инференс идёт через CoreML на Neural Engine, на Windows через CUDA, и в обоих случаях есть тихий откат на CPU, если ускорителя нет. Вторая вкладка транскрибирует файлы: кидаешь WAV, MP3, MP4, MKV, что угодно, нативные форматы читает soundfile, остальное встроенный статический ffmpeg. Есть монитор CPU, RAM и видеопамяти, VU-метр, чтобы выключенный микрофон был виден до того, как ты договорил, история с поиском и экспортом, кнопка отмены загрузки модели, если промахнулся мимо 1,6 гигабайт.

git clone https://github.com/aa-blinov/lazy-to-text.git
cd lazy-to-text
uv sync
uv run lazy-to-text-ui

Python 3.12, PySide6, uv. Инсталлятора нет: либо из исходников через uv, либо скриптами сборки, портативная папка через PyInstaller на Windows и .app через py2app на macOS, чтобы у приложения было своё имя в списке разрешений на микрофон и клавиатуру.

Главное осталось прежним: всё локально. Звук не покидает машину, ключей и подписок нет, модели скачиваются с Hugging Face один раз.

И приписка, которую я нашёл ещё в первой версии и которой пользуюсь до сих пор. Когда надиктованный текст уходит в промпт модели, стоит добавить в конце одну строчку:

P.S. Текст надиктован, возможны ошибки распознавания, спроси, если что-то непонятно.

Модель перестаёт натягивать смысл на явно кривое слово и спрашивает, что ты имел в виду. Маленькая приписка снимает целый класс проблем, когда распознавание расслышало не то, и модель добросовестно выстроила вокруг этого логику.