🇷🇺 Русский · 🇺🇸 English
Программа для расшифровки русской речи из аудио и видео на модели GigaAM-v3 от SaluteDevices. Работает локально: файлы никуда не отправляются. Умеет разделять говорящих, делать субтитры, чистить шум и пересказывать расшифровку через LLM.
Один и тот же движок доступен в шести интерфейсах: нативное приложение для macOS (GigaAM Liquid), классическое десктоп-приложение на PyQt для Windows/macOS/Linux, командная строка, REST API, веб-панель и терминальный TUI.
- Как это выглядит
- Что умеет
- Установка готовых сборок
- GigaAM Liquid — нативное приложение для macOS
- Запуск из исходников
- Интерфейсы
- Live: запись и расшифровка в реальном времени
- LLM: выжимки, задачи и свои промпты
- Субтитры
- Диаризация — кто говорит
- Подготовка аудио и шумоподавление
- Движок распознавания (ASR backend)
- Где хранятся модели и данные
- Офлайн-сборки
- Веб-панель в Docker
- Структура репозитория
- Благодарности
| Обработка | Live |
|---|---|
![]() |
![]() |
| LLM: провайдер найден автоматически | Настройки → LLM: найденные CLI |
|---|---|
![]() |
![]() |
Тёмная тема: обработка · Live · LLM · настройки LLM.
| Обработка | LLM |
|---|---|
![]() |
![]() |
| Настройки LLM: таблица инструментов | Тёмная тема |
|---|---|
![]() |
![]() |
Расшифровка
- Пакетная обработка файлов и целых папок (с подпапками), drag & drop,
загрузка по ссылке через
yt-dlp. - Экспорт в
txt,txtс таймкодами,md,srt,vtt, а с диаризацией — текст с именами говорящих (с таймкодами и без). - Три движка на выбор: MLX на Apple Silicon (самый быстрый на Mac), ONNX Runtime (без PyTorch, работает на CPU, CUDA, CoreML, DirectML) и PyTorch.
- Умная подготовка звука: приложение само оценивает запись и при необходимости нормализует громкость, убирает шум лёгким фильтром или DeepFilterNet — только если это реально улучшает результат.
Говорящие и субтитры
- Диаризация тремя способами: pyannote, ONNX (PyAnnote + WeSpeaker) или NVIDIA Streaming Sortformer v2.1.
- SRT/VTT режутся на короткие фразы по пунктуации и таймстампам слов; число строк и ширина строки настраиваются, не влияя на TXT/MD.
Реальное время
- Вкладка Live: микрофон, системный звук или оба сразу, отдельная дорожка на каждый источник, диаризация «на лету» или после остановки, плавающий оверлей с текстом и вопросами ассистенту.
LLM-постобработка
- Готовые режимы «Выжимка» и «Задачи» плюс свой промпт.
- Провайдеры: любой OpenAI-совместимый или Anthropic API, а также локальные CLI — Claude Code, Codex, OpenCode, Pi, oh-my-pi и произвольная команда.
- CLI-инструменты находятся автоматически (в том числе из homebrew, npm, bun, nvm — даже когда приложение запущено из Finder или Dock), их статус и версия видны в настройках.
Прочее
- Русский и английский интерфейс, светлая и тёмная темы, журнал событий, прогресс по стадиям, отмена очереди.
- Веб-панель с авторизацией, прогрессом по SSE, восстановлением задач после перезапуска и защищённым Docker-образом.
Скачайте архив под свою систему со страницы
Releases. У каждого релиза
две версии: обычная докачивает модели при первом запуске, офлайн
(*-offline*) содержит базовый набор ONNX-моделей и не требует ни сети, ни
токена Hugging Face — см. Офлайн-сборки.
| Система | Что скачать |
|---|---|
| macOS, Apple Silicon — нативное приложение | GigaAMLiquid-macos-arm64-<версия>.zip |
| macOS, Apple Silicon — классическое PyQt | GigaAMTranscriber-macos-app-<версия>.zip |
| macOS, Intel | GigaAMTranscriber-macos-x86_64-app-offline-<версия>.zip (только офлайн, ONNX + CoreML, macOS 13+) |
| Windows x64 | GigaAMTranscriber-windows-x64.exe или …-offline.zip |
| Linux x64 | GigaAMTranscriber-linux-x64 или …-offline.zip |
Сборки для macOS подписаны ad-hoc, поэтому при первом открытии Gatekeeper может отказать. Откройте приложение через правый клик → «Открыть», либо снимите карантин:
xattr -dr com.apple.quarantine /Applications/GigaAMLiquid.appWindows-сборка портативная: распакуйте и запустите .exe. Путь к папке с
моделями не должен содержать кириллицу — некоторые нативные библиотеки с ней
не работают.
GigaAM Liquid — отдельный клиент на Swift/AppKit с интерфейсом в стиле
Liquid Glass (macOS 26; на macOS 13–15 используется обычное размытие).
Внутри архива один GigaAMLiquid.app: вся обработка выполняется встроенным
Python-движком, который лежит в Contents/Resources и запускается как
фоновый процесс. Отдельно ставить Python не нужно.
Что есть в приложении:
- Обработка — перетащите файлы или вставьте ссылку на медиа; форматы вывода, диаризация, число говорящих и настройки субтитров — на той же странице. Готовый текст и файлы — на странице «Результат».
- Live — микрофон и/или системный звук (ScreenCaptureKit), запись дорожек, расшифровка по мере записи, вопросы ассистенту по текущей записи.
- LLM — выжимка, задачи или свой промпт для любого транскрипта; рядом с
выбранным провайдером показывается его статус (
● 18.2.5,○ не найден). - Настройки → LLM — таблица всех CLI-инструментов со статусом, версией и путём; кнопки «Обзор…», «Проверить», «Пересканировать»; аргументы и внутренний провайдер для каждого CLI; переключатель «Разрешить инструменты и сессии агента».
- Журнал, API (примеры запросов к REST-серверу), Настройки (модель, движок, диаризация, аудио, пути, тема, язык).
Разрешения: Микрофон — для записи голоса, Запись экрана — для системного звука (так устроен ScreenCaptureKit). Токен Hugging Face и ключ API хранятся в Связке ключей.
Собрать самостоятельно:
# движок (PyInstaller, 5–20 минут)
bash packaging/build_exe_mac.sh # → dist/GigaAMTranscriber.app
# нативный клиент
swift build -c release --package-path macos/GigaAMLiquidТочная сборка бандла (Info.plist, вложение движка, подпись) описана в
.github/workflows/build.yml, шаг «Assemble and verify app bundle». Для
разработки достаточно swift run --package-path macos/GigaAMLiquid из корня
репозитория — клиент найдёт .venv/bin/python проекта сам.
Нужен Python 3.10+ и ffmpeg в PATH.
git clone https://github.com/dubr1k/GigaAMGUI.git
cd GigaAMGUI
cp .env.example .env
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
python -m pip install -r requirements.txt
ffmpeg -version
python app.pyДля диаризации через pyannote укажите в .env токен Hugging Face
(HF_TOKEN=…) и примите условия моделей pyannote/speaker-diarization-3.1
и pyannote/segmentation-3.0. ONNX-диаризация и Sortformer токена не
требуют.
Дополнительные наборы зависимостей:
python -m pip install -r requirements-live-macos.txt # Live на macOS 13+
python -m pip install -r requirements-live-windows.txt # Live на Windows (PyAudioWPatch)
python -m pip install -r requirements-live-linux.txt # Live на Linux (+ libportaudio2 pulseaudio-utils libasound2-plugins)
python -m pip install -r requirements-sortformer.txt # NVIDIA Sortformer (тянет NeMo)
python -m pip install -r requirements-macos-mlx.txt # MLX на Apple SiliconДля видеокарт RTX 50xx (Blackwell) сначала поставьте совместимый PyTorch:
python -m pip install torch==2.8.0 torchvision==0.23.0 torchaudio==2.8.0 --index-url https://download.pytorch.org/whl/cu128
python -m pip install -r requirements.txt| Интерфейс | Запуск | Когда удобен |
|---|---|---|
| GigaAM Liquid (macOS) | GigaAMLiquid.app |
Повседневная работа на Mac |
| Классический GUI (PyQt) | python app.py |
Windows, Linux, macOS |
| CLI | python cli.py -f audio.wav -o output |
Скрипты и пакетная автоматизация |
| REST API | python api.py |
Интеграции; документация на http://127.0.0.1:8000/docs |
| Веб-панель | docker compose up -d --build gigaam-web |
Сервер в локальной сети: http://127.0.0.1:8001/ |
| TUI (preview) | cd tui && cargo run --release |
Очередь задач в терминале |
Установить TUI одной командой:
curl -fsSL https://raw.githubusercontent.com/dubr1k/GigaAMGUI/main/scripts/install_tui.sh | bash
gigaamВкладка Live есть в Liquid и в PyQt. Источники — микрофон, системный звук
или оба одновременно, для каждого выбирается своё устройство. По желанию
сохраняются mic.wav, system.wav и, при двух источниках, mix.wav.
После остановки доступны те же форматы экспорта, что и при обычной
обработке.
Диаризация в Live работает в трёх режимах: выключена, анонимная оценка в реальном времени (метки могут уточняться в последние 10 секунд) или полная обработка после остановки. Кнопка «Оверлей» открывает плавающее окно поверх других приложений с финальным и промежуточным текстом; там же можно задать LLM вопрос по уже расшифрованному.
Платформы:
- macOS 13+ — микрофон через
sounddevice(разрешение Microphone), системный звук через ScreenCaptureKit (разрешение Screen Recording). - Windows —
requirements-live-windows.txt(PyAudioWPatch, loopback WASAPI). - Linux —
requirements-live-linux.txtплюс системныеlibportaudio2,pulseaudio-utils,libasound2-plugins. Системный звук берётся только из существующего monitor-источника PipeWire/PulseAudio: приложение находит его черезpactl, открывает поток на ALSA-агрегатеpulseи переключает на выбранный монитор черезmove-source-output. Если переключить не удалось, сессия завершается ошибкой, а не пишет микрофон вместо системного звука.
Портативные и офлайн-сборки уже содержат всё для Live (включая PortAudio на Linux); команды выше нужны только при запуске из исходников.
Страница LLM принимает готовые транскрипты (файлы или вставленный текст) и
прогоняет их через выбранную модель в одном из режимов: Выжимка,
Задачи или Свой промпт. Результат сохраняется в txt, md или
docx рядом с транскриптом или в выбранную папку.
| Провайдер | Как работает |
|---|---|
| API | Любой OpenAI-совместимый endpoint или Anthropic Messages API. Тип определяется по URL. Ретраи на 429/5xx с учётом Retry-After. Google Gemini подключается через https://generativelanguage.googleapis.com/v1beta/openai/. |
| Claude Code | claude -p — локальный CLI Anthropic. |
| Codex | codex exec — CLI OpenAI. Модель выбирает сам клиент. |
| OpenCode | opencode run, модель в формате provider/model. |
| Pi | pi -p; можно задать внутренний provider (anthropic, openai, google…). |
| oh-my-pi | omp -p — форк pi с 60+ провайдерами; модель задаётся нечётко (opus, gpt-5.2, openai/gpt-5.2). |
| Другое | Своя команда: промпт передаётся последним аргументом и в stdin; напишите {stdin} в аргументах, чтобы передавать только через stdin. |
Приложение, запущенное из Finder, Dock или ярлыка, получает «пустой» системный
PATH и не видит claude, omp или codex, установленные через homebrew,
npm, bun или nvm. Поэтому поиск устроен так:
- проверяется
PATHпроцесса и типичные каталоги установки —/opt/homebrew/bin,/usr/local/bin,~/.local/bin,~/.bun/bin,~/.npm-global/bin,~/.volta/bin,~/.cargo/bin, все версии nvm, pnpm; на Windows —%APPDATA%\npm, scoop, bun, pnpm; - найденный бинарь запускается с
--version; в настройках видны статус (●найден,○не найден,⚠не запускается) и версия; - тот же расширенный
PATHполучает и сам CLI, поэтому npm-обёрткиclaude/opencodeнаходятnode.
Пустое поле пути означает автопоиск. Кнопка «Обзор…» позволяет указать бинарь вручную, «Проверить» — перепроверить один инструмент, «Пересканировать» — все сразу. Для ненайденного инструмента показывается команда установки.
По умолчанию агентные CLI запускаются как обычный запрос к модели: без
инструментов и без сохранения сессии (--no-tools --no-session у pi/omp,
--tools "" --no-session-persistence у Claude Code, run --pure у
OpenCode). Выжимка транскрипта — не задача для coding-агента, и она не
должна засорять его историю. Переключатель «Разрешить инструменты и сессии
агента» снимает это ограничение.
Промпт передаётся через stdin, а не аргументом командной строки: длинные транскрипты не упираются в лимит аргумента (128 КиБ на Linux).
Аргументы в настройках — дополнительные флаги командной строки, которые
добавляются к запуску как есть, например --thinking low. Обычно они не
нужны. Provider у Pi и oh-my-pi — внутренний поставщик модели, если нужно
переопределить настроенный в самом CLI.
Настройки SRT/VTT находятся рядом с выбором форматов: число строк в блоке, максимальная ширина строки и разбиение по предложениям. Они не влияют на TXT и MD. CLI принимает те же параметры:
python cli.py -f audio.wav --format srt --format vtt \
--subtitle-sentence-split --subtitle-max-lines 2 --subtitle-max-width 64В TUI — команды /subtitle-split on|off, /subtitle-lines 1..4,
/subtitle-width 20..100.
При наличии таймстампов слов каждый cue получает точные границы; иначе время
распределяется внутри исходного сегмента распознавания. С диаризацией SRT
подписывает говорящего только при его смене (Спикер №1:), а VTT добавляет
стандартный <v Спикер №1> в каждый cue — в плеере он невидим, но нужен для
атрибуции и стилей.
| Движок | Особенности |
|---|---|
| pyannote | Проверенный вариант; нужен HF_TOKEN и принятые условия моделей. |
| ONNX (PyAnnote + WeSpeaker) | Без PyTorch и токена; сохраняет перекрывающуюся речь, кластеризует embeddings. Используется в офлайн-сборках. |
| NVIDIA Sortformer v2.1 | Сам определяет число говорящих (до четырёх); токен не нужен. Лучше на CUDA, на Apple Silicon работает через MPS с автоматическим откатом на CPU. Модель ~470 МБ скачивается при первом использовании. |
Sortformer в полной macOS-сборке уже включён; из исходников ставится через
requirements-sortformer.txt (NeMo 2.7 — версии из Space намеренно не
используются из-за исправленных позже уязвимостей). На Windows Sortformer
работает через ONNX Runtime без NeMo. Для веб-панели соберите расширенный
образ: INSTALL_SORTFORMER=1 docker compose build gigaam-web.
python cli.py --diarize --diarization-backend sortformer -f audio.wav
python cli.py --backend onnx --diarize --diarization-backend onnx -f audio.wavДиаризация всегда получает исходную дорожку (без шумоподавления), поэтому тембр говорящих и таймкоды не искажаются.
Режим AUDIO_PREPROCESSING_MODE=auto (по умолчанию) перед распознаванием
измеряет громкость, уровень шума, SNR, клиппинг, тишину, DC-смещение и
спектральные признаки и выбирает одно из действий: ничего не менять,
нормализовать громкость, применить мягкий фильтр FFmpeg или включить
DeepFilterNet для сильного широкополосного шума. Обработанный вариант
проверяется повторно и берётся только если он действительно лучше — без
роста клиппинга, потерь речи и изменения длительности. Паузы не вырезаются.
DeepFilterNet — официальный Rust-бинарь 0.5.6, который скачивается с
GitHub Releases при первом тяжёлом шуме, проверяется по SHA-256 и хранится в
кэше. Python-пакет DeepFilterNet не нужен. Если сети нет или платформа не
поддерживается, распознавание идёт по исходной дорожке.
AUDIO_PREPROCESSING_MODE=auto # off | auto | light | denoisepython cli.py --audio-preprocessing off -f studio.wav| Backend | Где и зачем |
|---|---|
auto |
На Apple Silicon — MLX, на macOS Intel — ONNX, на остальных — PyTorch. |
mlx |
gigaam-mlx, самый быстрый вариант на Mac. |
onnx |
onnx-asr, без PyTorch. Провайдеры: CPU, CUDA, TensorRT, CoreML, DirectML. |
pytorch |
Классический движок; CPU, CUDA, Intel XPU, MPS. |
python cli.py --backend auto -f audio.wav
python cli.py --backend onnx --onnx-provider coreml -f audio.wavВ портативных сборках Windows/Linux ONNX использует CUDA выбранного
PyTorch-runtime (cu124/cu128) с откатом на CPU; macOS — CoreML → CPU.
DirectML и TensorRT включаются вручную и только если установленный ONNX
Runtime их предоставляет. Реальная цепочка провайдеров пишется в журнал.
REST API принимает те же параметры как query-строку, а список допустимых
значений отдаёт GET /api/v1/asr/options:
curl -H "X-API-Key: $GIGAAM_API_KEY" -F "file=@audio.wav" \
"http://127.0.0.1:8000/api/v1/transcribe?asr_backend=onnx&asr_model=v3_e2e_rnnt&onnx_provider=coreml"Сравнить движки на своём корпусе:
python scripts/benchmark_asr_backends.py corpus/asr.json --backend onnx --backend pytorch --output asr-metrics.json
python scripts/benchmark_diarization_backends.py corpus/diarization.json --backend onnx --backend pyannote --output diarization-metrics.jsonДля Intel-маков публикуется отдельный офлайн-ассет: .app плюс папка
models. Сборка без torch и mlx — распознавание, VAD и диаризация целиком
на ONNX Runtime (CoreML/CPU). Нужна macOS 13+. arm64-сборки на Intel не
запускаются: Rosetta работает в обратную сторону.
python -m pip install -r requirements-macos-x86_64.txt -r requirements-live-macos.txt
bash packaging/build_exe_mac_x86_64.shВсе крупные загрузки — PyTorch runtime, GigaAM, ONNX/MLX, pyannote,
Sortformer, NeMo, DeepFilterNet — можно направить на выбранный диск одним
параметром GIGAAM_DATA_DIR. Внутри создаются runtimes и
models/{gigaam,huggingface,onnx,torch,nemo,deepfilter}.
- PyQt: Настройки → «Папка данных и моделей…». Портативная сборка предлагает выбрать папку до первой загрузки. После смены нужен перезапуск; уже скачанные модели не переносятся автоматически.
- Liquid: переменная окружения
GIGAAM_DATA_DIR(например, черезlaunchctl setenv GIGAAM_DATA_DIR /Volumes/Data/GigaAM); встроенный движок читает её так же, как CLI. - CLI/GUI:
python app.py --data-dir /mnt/large/GigaAMData,python cli.py --data-dir …. - TUI:
gigaam --data-dir …. - REST API / Web: задайте
GIGAAM_DATA_DIRдо запуска сервера.
Узкие переменные (HF_HOME, HUGGINGFACE_HUB_CACHE, TRANSFORMERS_CACHE,
TORCH_HOME, NEMO_HOME, ONNX_MODEL_DIR, GIGAAM_RUNTIME_DIR,
GIGAAM_CONFIG_DIR, GIGAAM_PYTORCH_MODEL_DIR, GIGAAM_DEEPFILTER_DIR)
имеют приоритет, если отдельный компонент нужно положить в другое место.
Небольшие пользовательские настройки (язык, токены, параметры обработки)
живут в системном config-каталоге и при смене диска не сбрасываются.
Архивы *-offline* содержат рядом с исполняемым файлом папку models с
базовой ONNX-цепочкой: распознавание, VAD и диаризация PyAnnote + WeSpeaker.
Такой сборке не нужны сеть, токен Hugging Face и PyTorch. Распакуйте архив
целиком и запускайте из распакованной папки — модели ищутся рядом. Папка
офлайн-моделей только читается; всё, что скачивается позже (multilingual,
MLX, pyannote, Sortformer), попадает в обычный кэш приложения.
Собрать набор моделей самостоятельно:
python scripts/build_offline_models.py --output offline/models/hfcp .env.example .env # WEB_SECRET, WEB_USERNAME, WEB_PASSWORD
mkdir -p uploads results logs cache
docker compose up -d --build gigaam-web
curl -fsS http://127.0.0.1:8001/healthGIGAAM_DATA_DIR для Compose — путь на хосте; внутри контейнера он
монтируется как /data. Корневая файловая система контейнера read-only,
поэтому кэши (HF_HOME, TORCH_HOME, NEMO_HOME, ONNX_MODEL_DIR,
GIGAAM_RUNTIME_DIR) должны оставаться под /data.
При обновлении пересобирайте контейнер, но сохраняйте GIGAAM_DATA_DIR,
uploads, results и logs — модели и файлы пользователей лежат в этих
томах. Если каталоги создавались от root, дайте UID 1000 права на запись.
После обновления проверяйте /health и журнал:
docker compose ps gigaam-web
docker compose logs --tail=200 gigaam-webВ логе не должно быть Read-only file system или VAD недоступен.
Reverse proxy к 127.0.0.1:8001 настраивается отдельно.
GigaAMGUI/
├── app.py # классический PyQt-клиент
├── cli.py # командная строка
├── api.py # REST API (FastAPI)
├── src/
│ ├── core/ # распознавание, диаризация, субтитры
│ ├── services/ # общий слой: транскрипция, LLM, реестр CLI (cli_tools.py)
│ ├── gui/ # PyQt-миксины
│ ├── live/ # захват и live-сессии
│ └── utils/ # ffmpeg, подготовка аудио, HTTP-клиент LLM
├── macos/GigaAMLiquid/ # нативный Swift-клиент для macOS
├── tui/ # Ratatui-клиент
├── web/ # веб-панель
├── packaging/ # PyInstaller-спеки и скрипты сборки
├── tests/
└── docs/ # CHANGELOG, release notes, инструкции
Для разработчиков: правила проекта — в AGENTS.md; список изменений — в docs/CHANGELOG.md.
- SaluteDevices / GigaAM и GigaAM-v3 на Hugging Face
- aystream / gigaam-mlx — MLX-порт для Apple Silicon
- istupakov / onnx-asr — лёгкое кроссплатформенное распознавание на ONNX
- NVIDIA Streaming Sortformer v2.1 и Scrybl / ONNX-экспорт
- parakeet-rs — MIT, референс потокового Sortformer на ONNX
- DeepFilterNet — MIT, нейросетевое шумоподавление








