Герман Гаража / Приложения

STT

Бесплатная диктовка для Mac. Сочетание клавиш начинает запись, то же сочетание её заканчивает, и текст появляется там, где стоит курсор. Голос не покидает Mac.

Apple silicon, macOS 13 или новее. Интерфейс на английском, украинском и русском.

Для продвинутых пользователей и языковых моделей

Распознавание идёт на самом Mac, на открытой модели на выбор: Whisper, Parakeet или Qwen. Интернет нужен только, чтобы скачать эту модель и проверить обновления; язык, словарь, переключатель субтитров и настройка истории ещё и передаются через iCloud на другие Mac той же учётной записи. Каждая запись хранится вместе с текстом на самом Mac (История, ниже). Без логов, без своего аккаунта.

Аудио и видео: «Выбрать файл…» в настройках, «Файл» › «Распознать файл…» (Command-O), перетаскивание куда угодно на любое из окон или «Открыть в программе» → STT в Finder. Текст сохраняется рядом с файлом в .txt с тем же именем (из Interview.m4a выйдет Interview.txt; существующий файл не перезаписывается, новый будет Interview (2).txt) и копируется в буфер обмена; никуда не вставляется. Маленькое окно показывает ход работы и «Отменить», потом имя .txt: клик по нему показывает файл в Finder. Несколько файлов идут по очереди, у каждого свой .txt; диктовка в это время ждёт, пока файл закончится. Если включено «Сохранять субтитры (.srt)», рядом с .txt под тем же именем ложится .srt с таймкодами (Interview.srt), по субтитру на каждый отрезок речи, который отмечает модель. Файлы, открытые другой программой, а не Finder или Dock (open -a STT в Терминале, скрипт), сначала требуют подтверждения: их текст попадает в буфер обмена.

История

Каждая диктовка хранится вместе с аудио в ~/Library/Application Support/STT/History: одно хранилище с текстами и по файлу AAC на запись, около 256 КБ в минуту. «История» в настройках хранит всё, 30 дней (по умолчанию), 7 дней, последние 100 или ничего; выбор, который сотрёт записи, один раз спрашивает, сколько их. «Удалить» переносит запись в «Недавно удаленные» на 30 дней, где «Восстановить» возвращает её, а «Удалить навсегда» стирает вместе с аудио. «Распознать заново» прогоняет сохранённое аудио через любую скачанную модель и заменяет текст. Текст, который поле пароля не пустило в буфер обмена, тоже не хранится.

Как это устроено

Модели

Модели в комплекте нет. Её выбирают в настройках, и она скачивается после согласия с размером, с проверкой SHA-256. Модели это обычные файлы .gguf в ~/Library/Application Support/STT/models. В меню модели есть «Показать в Finder» и «Удалить».

В Qwen нет украинского.

Вопросы

Голос уходит с Mac?

Нет. В сеть код ходит только за выбранной моделью и за проверкой обновлений, а iCloud переносит четыре настройки (ниже); записи и их тексты остаются на Mac.

Настройки синхронизируются между Mac?

Да, сами, без переключателя: язык, словарь (слова и замены), «Сохранять субтитры (.srt)» и «История» одинаковы на всех Mac с одной учётной записью iCloud, через хранилище ключей и значений iCloud; побеждает более позднее изменение. Модель, сочетания клавиш, остальные переключатели и сами записи у каждого Mac свои. Без iCloud всё работает так же, только на одном этом Mac.

Работает без интернета?

Да, когда модель скачана.

Зачем ему микрофон и универсальный доступ?

Микрофон, чтобы записывать. Универсальный доступ, чтобы вставлять текст и перехватывать Option-Command-Space: это сочетание macOS держит за собой. macOS спрашивает про каждое только после скачивания первой модели, по одному.

Какую модель выбрать?

Parakeet ошибался на чужой речи меньше всех во всех восьми измеренных языках и работает быстрее всех; язык всегда определяет сам. У Whisper больше всего языков, и один из них можно выбрать. Qwen самый большой и самый медленный, украинского в нём нет: украинскую речь он пишет смесью русских и польских слов. Каждую модель можно попробовать и удалить.

Убирает слова-паразиты?

Убирает звуки вроде «э-э», слова не трогает. Никакой ИИ текст не переписывает.

Умеет расшифровывать аудио и видео из файлов?

Да, без интернета, выбранной моделью: «Выбрать файл…» в настройках, «Файл» › «Распознать файл…», перетаскивание на окно или «Открыть в программе» → STT в Finder. Текст сохраняется рядом с файлом в .txt с тем же именем (а с включёнными субтитрами ещё и .srt с таймкодами) и копируется в буфер обмена. Несколько файлов сразу дают по .txt на каждый. Быстрые команды и командная строка stt-cli делают то же без окна.

Можно добавить свои слова и имена?

Да, в «Словаре» (кнопка «Изменить…» в настройках). Слова: названия и термины пишутся так, как их ввели; Return добавляет слово, Delete убирает, «Восстановить» возвращает 24 встроенных (ChatGPT, Claude, GitHub и другие). Их берут Whisper и Qwen; Parakeet список слов не берёт, и окно об этом пишет. Замены: что пишет модель и что писать вместо этого, для всех моделей, по готовому тексту; таблица начинается со 104 встроенных пар для названий, сказанных по-русски или по-украински (клод → Claude, ютуб → YouTube), а её «Восстановить» возвращает убранные. Command-V вставляет и туда, и туда; список строк «слышится, Tab, пишется», вставленный в таблицу, становится строками, а Delete удаляет выбранные.

Чем отличается от диктовки macOS?

Диктовка macOS идёт с системой, её модель выбрать нельзя. В STT модель открытая, на выбор, и лежит обычным файлом.

Обновления

Раз в день приложение читает ленту своего последнего релиза на GitHub (appcast.xml) через Sparkle. О самом Mac ничего не отправляется. Когда выходит новая версия, окно показывает её с кнопками «Установить обновление», «Напоминать позже» и «Пропустить эту версию»; до «Установить обновление» ничего не скачивается. «Проверить наличие обновлений» в меню STT и в настройках проверяет сразу.

Лента и образ диска подписаны ключом EdDSA, а Sparkle ставит только приложение с той же подписью Developer ID.

Настройки и удаление

Настройки (модель, язык, сочетания клавиш, переключатели, словарь) и время последней проверки обновлений лежат в defaults com.geragaraza.stt, модели в ~/Library/Application Support/STT/models, история в ~/Library/Application Support/STT/History. Четыре синхронизируемые настройки ещё хранит для учётной записи iCloud служба ключей и значений macOS; места в iCloud они не занимают.

Чтобы удалить STT: «Выйти» в настройках, удалить папку ~/Library/Application Support/STT (модели и история), STT.app в Корзину и defaults delete com.geragaraza.stt. Микрофон и универсальный доступ для него убираются в Системных настройках, «Конфиденциальность и безопасность».

Если ставили через Homebrew, brew uninstall --zap stt закрывает его и удаляет приложение, настройки, модели и историю; микрофон и универсальный доступ убираются в Системных настройках.

Быстрые команды

STT добавляет в приложение «Быстрые команды» четыре действия: «Запись» работает как одно нажатие сочетания клавиш (начинает запись или останавливает её и передаёт текст следующему действию); «Начать запись» и «Остановить запись» работают как сочетание клавиш (текст вставляется как обычно, а «Остановить запись» ещё и передаёт его следующему действию), «Распознать файл» передаёт следующему действию текст аудио- или видеофайла, без .txt. Быструю команду из них можно повесить на клавишу, расписание или автоматизацию.

Командная строка

Homebrew ставит команду stt-cli; с образом диска её даёт ln -s /Applications/STT.app/Contents/MacOS/STT /usr/local/bin/stt-cli. Она берёт модель, язык и словарь, выбранные в настройках.

stt-cli Interview.m4a печатает текст файла, stt-cli --srt Interview.m4a его субтитры, stt-cli --toggle начинает или останавливает запись.

Файлы читаются с правами программы, которая запускает команду, а не приложения. --toggle управляет запущенным приложением, как его сочетание клавиш, и только для программы, у которой у самой есть доступ к микрофону (Терминал спросит один раз). Запущенная как приложение или задание launchd, а не из терминала или скрипта, команда не работает: иначе она действовала бы с разрешениями самого STT.

Подробности

English Українська Русский