← На главную История продукта

Как Dictator стал голосовым рабочим инструментом

Здесь только ключевые этапы: новые платформы, большие возможности и архитектурные повороты. Без косметики, мелких фиксов и технического шума.

28.05.2025 первый коммит
2.6 единая платформа
4 Windows, macOS, Android, iOS
Версии 2.6.90 – 2.6.91

Перевод ложится прямо на текст фотографии

  • Перевод поверх фотографии повторяет наклон строки и форму изогнутой этикетки, закрывает оригинал целиком и берёт цвет у фона вокруг текста, включая плавный переход цвета. Раньше на белой этикетке встречались чёрные плашки, наклонённые подписи съезжали со своей строки, а соседние плашки ложились друг на друга.
  • Перевод фото стал точнее. Подписи от руки и другой неразборчивый текст больше не превращаются в бессмыслицу, названия брендов и логотипы остаются как на снимке, а слово, которое оказалось отдельно от своей фразы, переводится вместе с ней. Все надписи снимка переводятся одним запросом, поэтому соседние подписи получают общий смысл.
  • Телефон: перевод поверх фотографии выглядит так же, как на компьютере, и так же сохраняется в картинку. Плашки лежат под наклоном строки, берут цвет фона и не налезают друг на друга. Абзац больше не рвётся на куски, когда русские буквы шрифта догружаются позже латинских.
  • Телефон: перевод фото стал точнее. Подписи от руки не превращаются в бессмыслицу, названия брендов и логотипы остаются как на снимке, слово, оторванное от своей фразы, переводится вместе с ней, а все надписи снимка переводятся одним запросом и получают общий смысл.
  • Компьютер: понятно, почему телефон не видит его в новой сети Wi-Fi. Windows помечает каждую новую сеть общественной, а в такой сети компьютер для чужих устройств закрыт: в другом городе телефон в том же Wi-Fi компьютер не находил, и причину было не узнать. Теперь настройки своего компьютера показывают такую сеть и делают её частной одной кнопкой. В кафе и гостиницах дверь для гостей по-прежнему закрыта, а ваши собственные устройства находят компьютер напрямую в любой сети.
  • Телефон: если компьютер в сети не нашёлся, приложение больше не пишет, что телефону запрещено обращаться к домашней сети, когда запрета нет. Раньше так объяснялась любая сеть, где компьютер не виден, и приходилось искать несуществующую причину в настройках iPhone. Теперь запрет определяется по ответу самой системы, а в остальных случаях показывается список того, что проверить.
  • iPhone: пока Dictator держит микрофон для клавиатуры, вибрация телефона больше не пропадает. iOS по умолчанию глушит вибрацию во всей системе, пока приложение пишет звук, поэтому, например, фонарик на заблокированном экране включался без отклика, а после выгрузки Dictator отклик возвращался. Теперь приложение разрешает вибрацию на время записи.
  • Телефон: плитка компьютера в сети стала понятнее. Имя стоит сверху, под ним зелёный кружок и Онлайн или серый и Офлайн, а проверить компьютер ещё раз можно маленькой кнопкой со стрелками рядом с состоянием. Отключиться теперь можно только вторым нажатием: после первого кнопка краснеет, а слева появляется крестик отмены. Компьютер, который сменил адрес в сети, телефон находит и запоминает сам.
  • Клавиатура: Deepgram больше не принимает короткую русскую фразу за хинди. Клавиатура отправляла запись без языка речи, и сервис выбирал язык сам среди тридцати пяти: на фразе в две с половиной секунды он решил, что это хинди, и вернул буквы деванагари. Теперь язык выбирается только среди ваших языков, а клавиатура передаёт их вместе с записью.
  • Мгновенная диктовка больше не теряет тихое последнее слово перед паузой. Слово, сказанное тише остальных, раньше не попадало ни в один кусок записи: из фразы "Продумай заново логику данных" с паузой после слова логику вставлялось "Продумай заново. Данных".
  • Фраза, прерванная паузой, склеивается без лишней точки. Когда вы замолкаете посреди мысли, приложение переслушивает место паузы и оставляет точку только там, где предложение действительно кончилось, а если сказано продолжение, ставит на её место запятую или тире.
  • Компьютер в сети: запись, отданная чужому компьютеру, распознаётся по вашему личному словарю, а не по словарю его хозяина. Раньше ваши слова на чужом компьютере не работали вовсе, а в вашу речь подмешивались термины хозяина. Считает запись видеокарта того компьютера, его месячный лимит на сервере не тратится.
  • Телефон: плитка компьютера в сети называет настоящую причину. Если на компьютере выключено разрешение для телефонов, если он спрашивает пароль или временно закрылся после нескольких неверных паролей, об этом так и написано, а не общее Не отвечает. Компьютер, сменивший адрес, получает ваш сохранённый пароль только после нажатия кнопки.
  • Windows: Ctrl+Win и Ctrl+Win+V срабатывают и тогда, когда впереди окно Dictator. Windows молча отключала перехват клавиш, если другая программа на компьютере долго разбирала нажатие, и пока окно Dictator было впереди, запись не начиналась, а текст не вставлялся. Теперь приложение слышит клавиатуру вторым способом и доводит такое нажатие до дела.
  • Windows: распознанный текст вставляется в поле поиска и другие поля самого Dictator. Раньше туда уходило старое содержимое буфера обмена: окно приложения принимало вставку позже, чем буфер возвращался прежним. Теперь текст кладётся в поле напрямую, а буфер обмена не трогается.
  • Windows: меню значка в трее открывается прямо над мышкой. У значка в правом углу панели задач меню уезжало влево, а на экране с увеличенным масштабом список языков обрезался краем. Теперь меню стоит над курсором, а списки языков и микрофонов раскрываются туда, где есть место.
  • Отчёт в поддержку из приложения сам прикладывает журнал горячих клавиш. Если сочетание не срабатывает, достаточно отправить отчёт: по нему видно, дошло ли нажатие до приложения и что оно с ним сделало. Текста ваших диктовок в журнале нет.
Версии 2.6.84 – 2.6.89

Словарь доезжает до телефона сам

  • Windows: сочетание Ctrl+Win снова запускает запись с первого раза. Оно срабатывало через раз, а при открытом окне Dictator могло не сработать вовсе: другие программы (например, PowerToys) гасят всплывающий «Пуск» служебным нажатием, и приложение считало его нажатой клавишей — то есть «человек передумал» — и отменяло уже взведённую запись.
  • Компьютер: «Распознать снова» обновляет саму запись, а не добавляет в историю новую строку. Раньше каждое нажатие заводило ещё одну запись с тем же звуком, а исходная оставалась со старым текстом; если в записи не было речи, строки заполнялись выдумкой распознавания.
  • Компьютер: диктовка с клавиатуры телефона больше не появляется в истории дважды. Так выходило, когда распознавание идёт на вашем компьютере, а сам компьютер считает через сервер: каждая такая диктовка сохранялась двумя одинаковыми записями, с тем же текстом и тем же временем. Накопившиеся двойники убираются при обновлении, остаётся запись телефона.
  • Windows: продиктованный текст вставляется и в окно удалённого доступа. Через RustDesk и подобные программы на дальней машине вместо текста появлялась одна буква «v» (в русской раскладке «м»): такие программы передают нажатия по номеру клавиши на клавиатуре, а Dictator отправлял управляющую клавишу без этого номера, и до дальней машины доезжала только буква. Сам текст при этом лежал в буфере обмена, и вставка рукой работала.
  • Перевод поверх фотографии на телефоне больше не режется и не налезает сам на себя. Буквы обрезались сверху и снизу, а соседние подписи наползали друг на друга: раскладка считала, сколько строк займёт перевод, одним способом, а телефон рисовал их другим — и при мелких буквах расчёт расходился с тем, что выходило на экране. Лишние строки при этом просто срезались краем подписи. Теперь подпись растёт под настоящий текст, как это давно работает на компьютере.
  • iPhone: второе нажатие микрофона больше не отправляет вас в Dictator при работающем микрофоне. Выглядело это так: первая диктовка проходит целиком, вы ждёте несколько секунд, жмёте микрофон ещё раз — и снова оказываетесь в приложении, хотя наверху горит оранжевая точка и значок Dictator. Приложение отмечалось «живым» только пока было у вас на экране, а микрофон продолжал работать в фоне: клавиатура через пятнадцать секунд переставала верить отметке и звала приложение заново. Теперь отметка идёт за микрофоном, а не за экраном.
  • Словарь переехал из раздела «Клавиатура» в главное меню настроек и стоит между «Распознавание речи» и «Клавиатура». Его слова работают не только при наборе: они подмешиваются в подсказку распознавания речи, поэтому искать их внутри клавиатуры было негде.
  • Слова личного словаря и шаблоны приезжают на телефон сами, а не после захода в настройки. Раньше их читал только экран «Настройки → Синхронизация»: слово, добавленное на компьютере, до клавиатуры телефона не доходило вовсе, в словаре стояло ноль слов, и они «подтягивались» ровно в тот миг, когда вы открывали раздел руками. Теперь обмен идёт при запуске, при каждом возвращении в приложение, при появлении сети и раз в пять минут.
  • Там же чинится обмен между устройствами: телефон теперь представляется списку устройств сам. Пока он этого не делал, прямой обмен на свежем телефоне не начинался, пока вы не откроете раздел синхронизации.
  • Если обмен с компьютером всё-таки срывается, причина теперь видна в «Поддержка → История событий». Раньше под именем компьютера стояло только «Не удалось обменяться — попробуем снова», и понять, выключен он или отказал сервер, было нечем.
  • Клавиатура: нераспознанную диктовку можно послушать. Слева у такой строки появилась кнопка, справа осталась стрелка «распознать снова». Раньше о записи говорили только время и длительность, и было непонятно, стоит ли тратить на неё вторую попытку. Закрываете список — воспроизведение останавливается. Кнопка есть и на iPhone, и на Android.
  • iPhone: исправлено падение приложения при попытке поднять микрофон на занятом входе — оно случалось в версии 2.6.83.
  • Личный словарь и пропуск в аккаунт больше не стираются у клавиатуры пустым значением. Если приложение в этот момент ещё не подняло свои данные, файл клавиатуры остаётся прежним, а не переписывается пустотой.
  • iPhone: микрофон клавиатуры держится весь выбранный срок. Раньше он мог слететь через несколько минут: островок показывал включённый микрофон, а клавиатура снова отправляла в приложение. Так случалось после звонка или чужого приложения, забравшего микрофон, и после подключения наушников. Теперь микрофон возвращается сам, даже если звонок длился дольше полуминуты.
  • Телефон: поле с курсором видно над клавиатурой целиком вместе с кнопкой, которая её сворачивает. На вкладке Перевод экран больше не прыгает наверх, пока вы листаете, а при наборе снова показывает нужное поле.
  • Телефон: свайп назад от левого края показывает под уезжающей страницей экран, на который вы вернётесь, а не пустоту. На главных вкладках свайп никуда не уводит, а открытую клавиатуру просто убирает.
  • iPhone: касание нижнего поля на вкладке Перевод больше не уводит экран вверх. Экран ужимался под клавиатуру, но оставался на месте, а система сдвигала видимую часть вниз: была видна одна верхняя кромка, ниже пустота до клавиш, и при прокрутке содержимое уходило под край. Теперь экран опускается вместе с видимой частью, и поле с кнопкой видно целиком. Не сдвигается он и через секунду после появления клавиатуры, а шапка приложения больше не заезжает под часы.
  • Диалог: кнопка переключения вида чата стала квадратной, как соседние, и стоит посередине между кнопкой размера и выбором переводчика.
  • Перевод фото: снимок больше не мутнеет после распознавания. Для просмотра телефон хранил копию в 1280 точек по длинной стороне, а экран шире такой копии, и фото растягивалось. Теперь копия вдвое крупнее, её хватает и на приближение пальцами.
  • Перевод фото: история открывает снимок и после обновления приложения. На iPhone обновление переносит данные приложения в новое место, а запись помнила старый путь: вместо фото показывалась крошечная миниатюра кубиками, и перевод уезжал за её край. Старые записи тоже снова находят свои снимки.
  • Перевод фото: запись без фотографии показывает в истории текст перевода вместо пустой карточки и открывается, а не выбрасывает обратно в галерею. Фото, которые список истории успел потерять, возвращаются из хранилища телефона при запуске.
  • Перевод фото: удалённая запись стирает с телефона и копию снимка, а не оставляет её занимать место.
Версия 2.6.83

Микрофон возвращается к клавиатуре сам

  • iPhone: микрофон, который на время забрало другое приложение, возвращается сам. Раньше стоило голосовому виджету на сайте или диктофону попросить микрофон, как прогрев гас насовсем: следующее нажатие микрофона на клавиатуре снова открывало Dictator, и так до конца дня. Теперь приложение пробует забрать вход обратно само: первые секунды каждую секунду, дальше реже, и берёт его в тот же миг, как сосед отпустил, на остаток выбранного вами времени. Чужую запись это не обрывает: пока вход занят, система нам его не отдаёт, и мы ждём. Поэтому если сосед держит микрофон дольше, чем вы готовы ждать, нажатие на клавиатуре по-прежнему откроет Dictator.
  • iPhone: исправлено «Не удалось включить микрофон», которое не проходило до перезапуска приложения. Если первая попытка приходилась на миг, когда приложение ещё не вышло на экран, звуковой движок запоминал пустой вход и отдавал его всем следующим попыткам. Со стороны это выглядело как занятый кем-то микрофон, хотя шкала громкости в настройках в тот же момент прыгала от голоса.
  • iPhone: три неудачные попытки подряд больше не выключают прогрев до перезапуска. Счёт неудач обнуляется новым нажатием микрофона, и следующая просьба снова пробует, а не отвечает отказом не пробуя.
Версия 2.6.80

Кнопки чатов больше не устаревают

  • Кнопки «Telegram» и «Discord» ведут туда, где мы отвечаем сейчас. Раньше приглашение в Discord жило семь дней, а потом кнопка открывала «Приглашение недействительно» — и починить это можно было только новой версией программы. Теперь адрес чата приходит с нашего сервера, и смена приглашения работает сразу у всех, без обновления.
Версии 2.6.70 – 2.6.79

Обновление в фоне и быстрая раздача

  • Обновление скачивается в фоне. Нажали установку, окно можно закрыть: загрузка идёт дальше, а приложение остаётся рабочим. Прерванная загрузка продолжается с того же места при следующем запуске.
  • У файла обновления появился второй адрес. Основной идёт через быструю сеть доставки, и если её не пустили в вашу страну, приложение молча берёт тот же файл с нашего сервера. Из Европы обновление приходит в сто раз быстрее прежнего.
  • Личный словарь заработал у всех сервисов распознавания, а не только у локального. Термины возвращаются в текст даже там, где сервис их не расслышал.
  • Записи перестали уезжать вниз списка: время приводится к одному виду и на телефоне, и на компьютере.
  • На телефоне выбирается микрофон: сам телефон или наушники. Перестановка наушников посреди записи её больше не теряет, а смена источника звука объясняется словами.
  • Сервис распознавания, который не знает вашего языка, говорит об этом на своей карточке, а не остаётся молча невыбранным.
Версии 2.6.60 – 2.6.69

Телефон перестал терять речь на паузах

  • Встроенный движок телефона больше не оставляет одно последнее предложение. Паузы мы находим сами и отдаём движку по одному высказыванию, а слишком короткий ответ на длинную речь переспрашиваем вторым способом.
  • Отказ обновления объясняется словами, и из него всегда есть выход на страницу загрузки.
  • Новый диалог открывается видом «друг напротив друга», нижняя панель при этом остаётся на месте.
  • При выборе «Автоматически» подключённый компьютер домашней сети наконец берётся в работу.
  • Запись уходит на сервер со своим типом файла, а отказ загрузки называет причину, а не отмалчивается.
Версии 2.6.40 – 2.6.59

Пустой экран на iPhone и потерянная диктовка

  • Приложение на iPhone больше не открывается пустым экраном.
  • Короткая помеха звука больше не заканчивает диктовку. Она встаёт на паузу, а кнопка «продолжить» возвращает микрофон.
  • Просьба записать поверх идущей записи больше не стирает уже сказанное.
  • Android: оборванный микрофон не выбрасывает сказанное, а сборка для людей подписывается боевым ключом.
  • Пропал интернет: спрашиваем один раз, что делать, а не подменяем движок распознавания молча.
  • Озвучка на телефоне перестала ждать рукопожатие с сервисом на каждой фразе.
Версии 2.6.30 – 2.6.39

Запуск приложения и отчёты о поломках

  • Экран запуска на iPhone рисует сама система. Он больше не гаснет и не закрывает собой приложение.
  • Микрофон поднимается в стороне от главного потока, поэтому экран при старте больше не встаёт.
  • Приложение само присылает нам отчёт о поломке, и в нём видно, что было на экране в этот момент.
  • Журнал отправляет и клавиатура: она не зависает вместе с приложением и рассказывает о себе отдельно.
Версии 2.6.20 – 2.6.29

Мак и тёмная тема телефона

  • На Маке выдаются разрешения, текст вставляется в чужие программы, а перевод с экрана больше не подвешивает приложение.
  • Тёмная тема телефона делает тёмной и клавиатуру, во всех случаях.
  • Приложение снова открывается после обновления перевода интерфейса.
  • Экран запуска на iPhone перестал оставаться тёмно-синим прямоугольником.
Версии 2.6.10 – 2.6.19

Документы, клавиатуры и домашний компьютер

  • Клавиатура телефона распознаёт на домашнем компьютере, а не на самом телефоне. Ей называют только тот компьютер, до которого она действительно дотянется.
  • Перевод документов стал целым: книга Excel после перевода открывается, перенос строки не рвёт фразу пополам, у переведённой книги и страницы меняется язык, а номера пунктов договора больше не путаются местами.
  • Кончился месячный лимит перевода: сами переходим на скачанные словари, докачиваем нужный и говорим об этом.
  • Перевод выделенного текста стал втрое быстрее: клавиатуры перестали спрашивать язык отдельным запросом.
  • Перевод с фотографии читается: плашки не режут текст и не наползают друг на друга, а история показывает всё целиком.
  • Вход через ВК, Яндекс и Google снова доносит ключ доступа до телефона.
Версии 2.6.2 – 2.6.9

Компьютер в домашней сети и озвучка

  • iPhone видит домашний компьютер в сети и отдаёт ему диктовку: считает его видеокарта, месячные лимиты при этом не тратятся.
  • Кнопки озвучки различают оригинал и перевод, а подсветка читаемого больше не подменяет человеку его собственный текст.
  • Голос облачного сервиса читает любой язык, а не только тот, для которого его выбрали.
  • Замолчавший компьютер больше не запирает очередь записей на полчаса.
  • Отказ модели переводить текст доходит как отказ, а не как «сервис недоступен», и текст при этом не пропадает.
Версии 2.2

Инструменты прямо в браузере и распознавание без задержки

  • На сайте заработали инструменты без установки и регистрации: расшифровка записи, озвучка текста с загрузкой в MP3, WAV, OGG и M4A, голосовой ввод и перевод с картинки.
  • Распознавание стало живым: слова появляются по ходу речи. Последняя ступень — встроенный движок телефона: он работает без аккаунта, без интернета и без лимита минут.
  • Расшифровка раскладывает разговор по голосам, а перевод и озвучка научились обходиться без сети: словари 45 языков и локальный голос читают текст прямо на устройстве.
  • Клавиатура Dictator вышла и на Android, у сайта появилась английская версия, а записи одного человека объединяются в один аккаунт с общим тарифом.
Субтитры, разговор и своя техника

Живые субтитры, голосовой помощник и свой компьютер как распознаватель

  • Живые субтитры поверх любого окна: оригинал и перевод двумя строками, с разделением говорящих, архивом сеансов и звуком самого компьютера — в созвоне не появляется посторонний участник.
  • Появился голосовой разговор с помощником: он отвечает голосом, замолкает, когда его перебивают, ищет по вашим записям и меняет настройки приложения по просьбе.
  • Телефон и ноутбук научились отдавать записи домашнему компьютеру: считает его видеокарта, месячные лимиты при этом не тратятся.
  • Заработали прямой обмен между устройствами, при котором сервер ничего не хранит, и клавиатура Dictator для iPhone — диктовка и перевод набранного прямо в поле ввода.
Сборки и релизы

Релизы 2.2.200+: сборки для всех платформ

  • Windows, macOS и Android стали выходить одной версией — сборки больше не расходятся между платформами.
  • Выпуск версии превратился в один отработанный сценарий: установщики, автообновление, публикация в TestFlight и на сайт.
  • Сайт стал витриной продукта: настоящие снимки экранов, тарифы, языки и понятные сценарии использования.
Mobile и iOS

Живой мобильный Dictator

  • Появились Android-сборки, iOS/TestFlight, мобильный эмулятор и синхронизация версий между ними.
  • На mobile добавлены фото-перевод, OCR-история, режим живого разговора, локальные и облачные варианты распознавания.
  • Desktop получил локальный STT без обрезания хвоста, предзагрузку модели, SQLite-историю, T-one RU и стабильный floating widget.
Новый интерфейс

Полный редизайн desktop и mobile

  • Заложена дизайн-система Tailwind v4: токены, примитивы, темы, новые сторы и toast-система.
  • Пересобраны ключевые экраны: история, настройки, словарь, сниппеты, командная палитра, hotkeys и floating recorder.
  • Добавлены visual regression baselines, чтобы интерфейс проверялся скриншотами, а не на глаз пользователя.
Go-сервер

Новый сервер: авторизация, синхронизация и тарифы

  • Серверная часть переписана на Go: Echo, sqlc, Opus/WAV pipeline, REST и WebSocket STT.
  • Появились auth middleware, sync engine, history/dialogues routes, assets/settings/feedback, admin UI и Telegram-интеграция.
  • Тарифы, лимиты и обновления стали серверными сущностями, а не разрозненными клиентскими настройками.
Dictator 2.2

Переход на Tauri/React и offline-first архитектуру

  • Стартовал новый monorepo Dictator 2.2: общие пакеты, React UI, Tauri desktop/mobile и единая тема.
  • Сформирована offline-first модель: локальный desktop-движок, синхронизация, история, crash-логи и TrayConsole-управление.
  • Цель версии 2.2 — перенести опыт Python/Flutter-прототипа в устойчивую кроссплатформенную платформу.
AI-ядро

Провайдеры, локальный Whisper и защита от галлюцинаций

  • Появился реестр AI-сервисов: STT, TTS, перевод, OCR и единая настройка провайдеров.
  • Добавлены Deepgram, ElevenLabs, OpenAI/GPT, локальный Whisper, pywhispercpp и документация по локальному распознаванию.
  • Silero VAD стал защитой от галлюцинаций Whisper: если речи нет, модель не запускается.
Mobile, macOS, OCR

Выход за пределы Windows

  • Добавлены TTS, OCR, VAD, чат-детали, расширенная локализация и флаги языков.
  • Началась мобильная ветка на Flutter: Android/iOS, фото-перевод, OCR-история, debug console и version tracking.
  • Появилась macOS-версия с горячими клавишами, буфером обмена и симуляцией ввода.
Desktop-продукт

История, словарь и стабильная диктовка

  • В Windows-приложение добавлены FFMPEG, улучшенная работа с микрофоном и диагностика подключения.
  • Появился словарь для точного распознавания имён, терминов и сложных слов.
  • История стала полноценным рабочим экраном: действия, контекстное меню и управление результатами.
Floating widget

Плавающий виджет, хоткеи и локализация

  • Приложение получило мультиязычную локализацию и первые визуальные ассеты записи.
  • Улучшены глобальные горячие клавиши, плавающий индикатор уровня и контекстное меню перевода.
  • Появились управление локальными транскрипциями и более подробные логи обработки.
Начало

От Voice Transcriber к Dictator

  • Первый локальный коммит проекта: Windows-утилита для записи, распознавания и вставки текста.
  • В июне добавлены перевод выделенного текста, история результатов и переход на OpenAI GPT-4.1 для перевода.
  • В августе появился отдельный transcription engine с поддержкой Whisper-моделей.