skillok meeting
6afce3150517f135c76d9dddea061e4ec504708a
Перейти к файлу
Код
meeting README.md
anc Релиз 0.1.0: сборки для Windows и macOS в downloads/, раздел «Скачать» Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> 6afce31 30 сентября 2026 г.
273 строки 18.8 КБ
README.md

Skillok Meet#

Рабочее название. Продукт Skillok.

Программа для Windows и macOS. Один путь: записать → расшифровать → получить результат.
Звук встречи записывается по кнопке или добавляется готовым файлом, по кнопке
расшифровывается, а дальше ИИ делает конспект, задачи, ревью или то, что попросите.
Всё можно скопировать и поправить.

Программа ничего не делает сама. Не следит за Zoom, не висит в трее, не запускается
вместе с Windows. Открыли — сделали — закрыли.

Нашего сервера нет. Пользователь вводит свой ключ OpenRouter — и всё. Звук и
заметки лежат у него на диске; наружу уходят только запросы к моделям по его ключу.


Скачать — версия 0.1.0#

Система Файл Размер
Windows 10 (сборка 20438+) и 11, 64 бита SkillokMeet-0.1.0-windows-x64-setup.exe 3,3 МБ
macOS 13+, Mac на Apple Silicon (M1 и новее) SkillokMeet-0.1.0-macos-apple-silicon.zip 5 МБ

Для расшифровки и результатов нужен свой ключ OpenRouter:
расшифровка и ИИ платные, оплата идёт напрямую OpenRouter.

Установка на Windows. Запустите установщик. Он пока не подписан, поэтому Windows
покажет «Windows защитила компьютер» → «Подробнее» → «Выполнить в любом случае».

Установка на Mac. Распакуйте архив и перенесите «Skillok Meet» в «Программы».
Приложение пока не подписано Apple, поэтому при первом запуске macOS его не откроет.
Откройте «Системные настройки» → «Конфиденциальность и безопасность» → внизу
«Skillok Meet заблокировано…» → «Всё равно открыть». При первой записи разрешите
«Микрофон» и «Запись экрана и системного звука» и перезапустите программу.

Контрольные суммы SHA-256 — в CHANGELOG.md.


Как пользоваться#

На главной — «Записать» и список записей. У каждой записи три шага, на экране только
текущий:

  1. Аудио.

    • «Записать» — пишется весь звук компьютера (собеседники в Zoom, Google Meet, Телемосте —
      где угодно) и микрофон, пока не нажмёте «Остановить»; есть пауза и кнопка
      «Скопировать предупреждение для чата». Лучше в наушниках: иначе голоса собеседников
      попадут и в микрофон.
    • Готовый файл — перетащить в окно или «выберите файл»: mp3, m4a, wav, aiff, flac, ogg.
  2. Расшифровка — кнопка «Расшифровать». Виден ход работы, можно «Отменить».

  3. Результат — вкладки:

    • «Расшифровка» — текст с временем и говорящими («Вы», «Собеседники» у записи);
    • «Конспект», «Задачи», «Ревью» — у пустой вкладки одна кнопка «Сделать»;
    • «+ Свой запрос» — «напиши письмо клиенту по итогам», «выпиши все цифры»; ответ
      становится своей вкладкой.

    У готовой вкладки: «Копировать» (Markdown), «Как текст», «Править», «Сделать заново»,
    «Удалить». Галочки задач отмечаются прямо в тексте.

Пока запись идёт, в шапке на любом экране видна метка «Запись 12:34».


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

 «Записать»:   звук компьютера ─┐
                    микрофон ─────┴─► audio/others.wav, audio/me.wav
 «Добавить аудио»:  файл ──────────► audio/<файл>

 «Расшифровать»:    дорожки ─► 16 кГц моно ─► куски 6–28 с по паузам ─► OpenRouter: Whisper
                                                  (до 4 кусков сразу)        │
                                                                             ▼
                                                           note.md: ## Расшифровка

 Команда ИИ:        note.md ─► OpenRouter: Claude ─► note.md: ## Задачи / ## Конспект / …

Запись звука#

Пишутся две дорожки: весь звук компьютера, кроме самого Skillok Meet (голоса
собеседников в любом сервисе встреч — Zoom, Google Meet, Телемост, Teams), и микрофон.
Звук — WAV без сжатия, 16 кГц моно: ровно то, что использует распознавание. Большая
частота точность не поднимает; поднимают полная модель Whisper (по умолчанию), наушники и
заданный язык. Вместе со звуком компьютера в запись попадёт и всё прочее, что звучит во
время встречи (уведомления, музыка); куски без речи при расшифровке отсеиваются.

  • Windows 10 (сборка 20438+) и 11 — process loopback в режиме «все процессы, кроме
    нашего» (Application loopback sample),
    микрофон — WASAPI.
  • macOS 13+ — ScreenCaptureKit, весь звук экрана без звука своего приложения
    (SCStreamConfiguration.capturesAudio),
    микрофон — CoreAudio через cpal. При первой записи macOS спросит «Микрофон» и «Запись
    экрана и системного звука»; после второго программу нужно перезапустить. Без него
    запишется только микрофон — программа так и скажет.
  • API Zoom и других сервисов не нужны.

Папка записей выбирается в «Настройках»; при смене все записи переносятся в новую.

Расшифровка — Whisper через OpenRouter#

  • POST https://openrouter.ai/api/v1/audio/transcriptions, тот же ключ, что для текстовых
    моделей. По умолчанию openai/whisper-large-v3 — точнее turbo; в настройках можно
    выбрать быстрее и дешевле.
    См. документацию OpenRouter STT.
  • Файл любой длины режется на куски по паузам: у эндпоинта предел 25 МБ и около минуты
    обработки на запрос. Куски без речи не отправляются — это дешевле, и Whisper не
    выдумывает фраз на тишине. Такие фразы («Продолжение следует…») дополнительно отсеиваются.
  • Неудачный кусок повторяется один раз; не распознавшийся остаётся в расшифровке пометкой.

Результаты — Claude через OpenRouter#

  • По умолчанию anthropic/claude-opus-5.5; модель меняется в настройках.
  • Промпты — файлами в prompts/: общий base.md и по одному на команду.
  • Все результаты хранятся одной заметкой note.md, раздел на вкладку. Повтор команды
    заменяет её раздел; прежний ответ модель при этом не видит.

Интерфейс — как у skillok.org#

  • Бумажный фон, чернильный текст, терракотовый акцент.
  • Шрифт iA Writer Quattro S; JetBrains Mono — для правки Markdown и времени.
  • Квадратные углы; на экране одна главная кнопка, контурная, остальное — ссылками.
  • Токены стиля — src/styles/tokens.css, копия дизайн-системы Skillok. Новых цветов не
    заводим.

Одна колонка. Главная — «Записать» и записи со статусом («Нужно расшифровать»,
«Конспект · Задачи»). Экран записи — шаги «Аудио → Расшифровка → Результат» и вкладки
результатов.


Согласие на запись#

Zoom не показывает участникам, что идёт такая запись. Предупреждать их обязан
пользователь: во время записи текст предупреждения копируется одной кнопкой в чат Zoom.

  • РФ, 152-ФЗ. Голос — персональные данные, тайная запись запрещена. Если голос
    используется для узнавания человека, это биометрия, и нужно письменное согласие
    (Консультант).
    Поэтому отпечатки голоса мы не строим: говорящий — только дорожка звука.
  • ЕС (GDPR) требует уведомления. В ряде штатов США нужно согласие всех сторон.

Почему не через API Zoom#

Проверено и отложено:

  • RTMS (живой поток от Zoom): нужен сервер, который принимает поток, и кредиты
    Zoom Developer Pack (RTMS).
  • Облачная запись: план Pro или выше, только встречи, где пользователь хост
    (KB0065911).
    Её файл можно скачать из Zoom и добавить через «Добавить аудио».
  • Бот на Meeting SDK: с 2 марта 2026 на встречах чужих аккаунтов нужен токен OBF,
    плюс ревью в Marketplace (OBF FAQ).

Android — позже#

Звук Zoom на Android локально не захватить. Системный захват не берёт голосовую связь
(AudioPlaybackCaptureConfiguration),
а микрофон во время звонка отдаёт другим приложениям тишину
(Sharing audio input).
Для Android подходят очные встречи через микрофон и добавление файла.


Разработка#

Нужны Rust (stable) и Node.js. На Windows ещё WebView2 — он уже есть в Windows 10/11.

npm install
npm run tauri dev      # приложение целиком: ядро + интерфейс
npm run dev            # только интерфейс в браузере, http://localhost:1420, с заглушкой ядра
npm run typecheck      # проверка типов интерфейса
cargo test --workspace # тесты ядра и звука

Запись работает в Windows и macOS; добавление аудио, расшифровка и команды ИИ — везде
(нужен ключ OpenRouter: распознавание и ИИ платные).

Собрать приложение для Mac — разрешения macOS выдаются самому приложению, а не терминалу:

npx tauri build --bundles app
open "src-tauri/target/release/bundle/macos/Skillok Meet.app"

Проба декодера и нарезки на любом файле:

cargo run -p meet-audio --example decode -- путь/к/файлу.m4a

Код под Windows проверяется с Mac так (нужен rustup target add x86_64-pc-windows-msvc):

cargo clippy -p meet-audio --target x86_64-pc-windows-msvc --all-targets

Установщик Windows собирается прямо на Mac (кросс-сборка). Один раз:
brew install llvm nsis, cargo install --locked cargo-xwin; при первой сборке xwin
скачивает MSVC CRT и Windows SDK — это принятие лицензии Microsoft. Дальше:

export LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8          # без локали makensis падает с bad_alloc
export PATH="/opt/homebrew/opt/llvm/bin:$PATH" XWIN_ACCEPT_LICENSE=1
npx tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc

Готовый установщик — …/x86_64-pc-windows-msvc/release/bundle/nsis/Skillok Meet_<версия>_x64-setup.exe.
Он не подписан: Windows SmartScreen при запуске скажет «Неизвестный издатель» —
«Подробнее» → «Выполнить в любом случае». Подпись — сертификатом Authenticode.

Раскладка:

crates/audio/        звук, без Tauri
  pcm.rs             формат 16 кГц моно 16 бит, WAV, уровень, приведение частоты
  decode.rs          чтение mp3, m4a, wav, aiff, flac, ogg (symphonia)
  chunker.rs         нарезка на куски по паузам, отсев тишины
  source.rs          источник звука; Replay — звук из памяти для тестов
  win.rs             Windows: звук компьютера (process loopback) и микрофон
  mac.rs             macOS: звук компьютера (ScreenCaptureKit) и микрофон (cpal)
src-tauri/src/       ядро на Rust
  meetings.rs        встречи на диске: meeting.json, note.md, audio/
  notes.rs           разделы заметки: поставить на место, убрать
  transcript.rs      реплики и блок «Расшифровка» для заметки
  transcribe.rs      расшифровка: дорожки → куски → Whisper → реплики
  ai.rs              команды ИИ над заметкой
  openrouter.rs      клиент OpenRouter: ключ, распознавание, ответ модели
  recorder.rs        запись по кнопке: дорожки в WAV
  settings.rs        настройки; ключ — в хранилище паролей ОС (keyring)
  commands.rs        команды для интерфейса
src/                 интерфейс: HTML/CSS/TS
  views/             home — главная, meeting — шаги и вкладки, settings
  recording.ts       панель записи и метка «идёт запись» в шапке
  markdown.ts        отображение Markdown, разделы, галочки задач
  dev-mock.ts        заглушка ядра — только для просмотра в браузере
prompts/             промпты команд ИИ
fixtures/transcripts проверочные расшифровки

Данные: настройки — в папке конфигурации (%APPDATA%\org.skillok.meet), встречи — в
папке данных, подпапка meetings. Путь виден на экране «Настройки».


План работ#

Сделано#

  • Каркас Tauri 2, стиль skillok.org, ключ OpenRouter в хранилище паролей ОС.
  • «Записать» по кнопке: звук Zoom и микрофон двумя дорожками, пауза, стоп.
  • Аудиофайл кнопкой и перетаскиванием.
  • «Расшифровать» с ходом работы и отменой.
  • Результаты вкладками: «Конспект», «Задачи», «Ревью», свой запрос; копировать,
    править, сделать заново, удалить; живые галочки задач.
  • Состояния без ключа, во время работы и во время записи (задача #9).

Дальше#

  • Проверить на Windows с настоящей встречей в Zoom — запись ни разу не запускалась.
  • Проверить запись на Mac с настоящей встречей в Zoom.
  • Прогнать команды ИИ на проверочных расшифровках настоящей моделью, поправить промпты.
  • Прослушивание звука в заметке и переход по времени реплики к месту в записи.
  • Добавить аудио к уже существующей встрече.
  • Сохранить заметку в репозиторий Skillok (токен доступа, API файлов).
  • Поиск по встречам.