Rychagov S.
🎙️ AI Recorder · Desktop · Local Transcription

Как устроен AI Recorder: локальная транскрибация и анализ встреч на desktop (Mac/Windows)

Практический разбор desktop-архитектуры AI Recorder: от записи встречи до структурного анализа, с локальным контуром хранения и контролируемой эксплуатацией.

TL;DR

AI Recorder решает практическую задачу команд: записывать встречи, получать транскрипт и сразу делать структурный анализ без сложной ручной обработки.

Ключевая идея реализации: запись и хранение — локально на устройстве, а анализ выполняется через выбранный провайдер (OpenAI, Ollama или ваш сервер).

Это снижает операционные риски, ускоряет рабочий цикл и дает контроль над инфраструктурой.

Какую проблему решает система

У большинства команд после встреч повторяются одни и те же проблемы:

1) теряются детали обсуждений;

2) сложно быстро собрать summary и задачи;

3) нет единого процесса от записи до результата;

4) ручная обработка занимает больше времени, чем сама встреча.

AI Recorder закрывает этот разрыв: от кнопки «Запись» до готового текста и аналитического результата в одном desktop-приложении.

Что умеет текущая версия

1) Запись аудио встречи с микрофона и системного звука.

2) Автоматическая финализация записи в MP3 через ffmpeg.

3) Список записей с датой, статусом транскрипта и анализа.

4) Удаление записи вместе с привязанными файлами транскрипта/анализа.

5) Встроенный плеер для прослушивания выбранной записи.

6) Локальная транскрибация через faster-whisper (Python runtime внутри приложения).

7) Анализ транскрипта через OpenAI API, Ollama или кастомный Server endpoint.

8) Приветственный экран здоровья системы: auth, модель, профили анализа и compute readiness.

9) Тесты микрофона и speaker level в настройках.

10) Логирование warn/error/panic и отправка лога на сервер.

11) Автостоп записи через 2 часа, чтобы не получать «вечные» записи.

Архитектура решения

UI (Tauri WebView, src/index.html)
  ↓ invoke-команды
Rust backend (src-tauri/src/*.rs)
  ├─ Audio capture (mic + speaker)
  ├─ Postprocess (ffmpeg -> mp3)
  ├─ File storage (records/output/results/models)
  ├─ Python transcription runner (faster-whisper)
  ├─ Analysis providers (OpenAI / Ollama / Server)
  ├─ Welcome checks (auth/model/profile/compute)
  └─ Logging + log shipping

Где хранятся данные

Данные лежат вне репозитория, в пользовательской директории:

~/Documents/AI Recorder/records — аудио

~/Documents/AI Recorder/output — транскрипты

~/Documents/AI Recorder/results — результаты анализа

~/Documents/AI Recorder/models — whisper-модели

~/Documents/AI Recorder/config.json — настройки анализа

~/Documents/AI Recorder/log.txt — логи

Такой подход упрощает поддержку: приложение обновляется отдельно, пользовательские данные остаются на месте.

Почему desktop-подход важен

Что дает локальный контур

1) запись не зависит от браузера и его ограничений;

2) локальное хранение файлов по умолчанию;

3) predictable latency для операций UI/запись/воспроизведение;

4) работа с несколькими провайдерами анализа без смены инструмента.

Что важно понимать

Транскрибация выполняется локально, а качество/скорость зависят от модели и железа. Анализ может быть локальным (Ollama) или внешним (OpenAI/Server) — это управляется настройками.

Audio pipeline в проекте

Текущий поток обработки аудио:

1) старт записи;

2) захват микрофона;

3) параллельный захват системного звука (macOS sidecar / Windows loopback);

4) остановка записи;

5) микширование/конвертация в MP3 через ffmpeg;

6) запись финального файла в records.

Если speaker-поток недоступен, система сохраняет запись только с микрофона и логирует предупреждение.

Транскрибация: как сделано

Транскрибация вызывается из Rust-команды, но выполняется Python-скриптом с faster-whisper.

1) поиск доступной модели в models;

2) запуск Python-раннера по приоритету: embedded runtime -> project venv -> системный python;

3) на Windows есть ветка CUDA/CPU fallback;

4) при проблемах с GPU делается переключение на CPU;

5) если модуль не найден — попытка автоустановки зависимостей;

6) результат сохраняется как транскрипт для следующего этапа анализа.

Во фронтенде есть предварительная оценка времени транскрибации на основе длины аудио, платформы, модели и статистики прошлых запусков.

Анализ текста: что происходит

После транскрибации формируется full_prompt = PROMPT + transcript и отправляется в выбранный провайдер.

1) OpenAI (/v1/responses, fallback на chat completions);

2) Ollama (/api/generate);

3) Server (SERVER_URL, логин/пароль из профиля).

Ответ сохраняется в results/.txt. То есть продукт закрывает задачу «speech-to-insight»: из аудио в текст, из текста в структурированный результат.

Приветственный экран (startup health checks)

При старте приложение проверяет:

1) серверную авторизацию (SERVER_URL_AUTH) с проверкой mac_address;

2) наличие локальной whisper-модели;

3) профили анализа (OpenAI/Ollama/Server);

4) compute readiness для Mac/Windows/CUDA.

Если серверная авторизация не проходит, пользователь получает сценарий с ограничением продолжения.

Надежность и эксплуатация

1) централизованный лог warn/error/panic;

2) отправка лога на сервер для поддержки;

3) защита от закрытия окна во время записи;

4) автостоп записи через 2 часа;

5) проверка и fallback-маршруты для Python/CUDA.

Desktop vs SaaS в рамках решения

Критерий AI Recorder (текущая реализация) Типичный SaaS-only поток
Хранение сырого аудиоЛокально у пользователяЧаще в облаке
Запись и управлениеЛокально в приложенииЧерез веб-интерфейс
ТранскрибацияЛокально (faster-whisper)Обычно облачный STT
АнализOpenAI / Ollama / Server (на выбор)Обычно один cloud-провайдер
ДиагностикаЛокальный лог + отправкаЗависит от вендора
Контроль окруженияПолный контроль на стороне командыОграниченный контроль

Ограничения текущей версии (честно)

Важно: в текущей кодовой базе нет полноценной diarization (кто говорит) и нет встроенного RAG-поиска по базе встреч.

Что есть сейчас:

1) единый транскрипт встречи;

2) отдельный этап анализа на базе промпта.

Что можно добавить следующими этапами:

1) speaker diarization + сегменты по таймкодам;

2) поиск по встречам (ключевой/семантический);

3) метрики качества (WER, latency dashboard, пер-провайдер статистика);

4) anti-hallucination слой с цитатами и ссылками на фрагменты транскрипта.

Для кого подходит

1) команды, которым нужен контролируемый desktop-контур;

2) внутренние встречи с чувствительным содержанием;

3) процессы, где важны скорость подготовки summary и action items;

4) гибридные сценарии с разными AI-провайдерами.

FAQ

Работает ли офлайн?

Запись, хранение, воспроизведение и локальная транскрибация — да. Анализ зависит от провайдера: Ollama может быть локальным, OpenAI/Server требуют доступ к endpoint.

Нужен ли глобально установленный Python?

В актуальной сборочной схеме используется embedded runtime, чтобы снизить зависимость от системного Python.

Где лежит конфиг окружения?

Приоритетно читается .env из ~/Documents/AI Recorder/.env, плюс fallback-кандидаты.

Что делать при ошибках качества транскрибации?

Проверить модель, качество входного аудио и compute-профиль; при необходимости скорректировать конфигурацию и переснять запись.

Key takeaways

1) Это не «просто диктофон», а связанный desktop pipeline от записи до аналитического результата.

2) Сильная сторона реализации — локальный контур данных, гибкие провайдеры анализа и эксплуатационная устойчивость.

3) Текущая версия уже практична для рабочих встреч и готова к расширению (diarization, поиск, контроль качества).

Нужен разбор под ваш сценарий встреч?

Покажу, как адаптировать контур записи, транскрибации и анализа под ваши требования к приватности, скорости и инфраструктуре.

Связаться в Telegram