🇷🇺 Русский · 🇺🇸 English
Транскрибация русской речи из аудио и видео на базе GigaAM-v3. Один сервисный слой, пять интерфейсов: Desktop GUI, CLI, REST API, Web GUI и terminal TUI.
GigaAM Transcriber — полноценный workflow для расшифровки, экспорта, диаризации и LLM-постобработки, а не только обёртка над моделью.
- Возможности
- Быстрый старт
- Live desktop
- Интерфейсы
- Конфигурация
- Интеллектуальная подготовка аудио
- ASR backend
- Офлайн-сборки
- Структура
- Скриншоты
- Благодарности
- Пакетная обработка файлов и папок, рекурсивный поиск, drag & drop, загрузка через
yt-dlp. - Экспорт:
txt,txt_timecodes,txt_diarize,txt_diarize_timecodes,md,srt,vtt. - SRT/VTT делятся на короткие фразы по пунктуации и word timestamps; число строк и максимальная длина строки настраиваются отдельно, не затрагивая TXT/MD.
- При диаризации SRT называет спикера только при смене говорящего (
Спикер №1:), а VTT сохраняет стандартный voice span<v Спикер №1>на каждом cue. - Выбираемая диаризация:
pyannote, ONNX PyAnnote + WeSpeaker или NVIDIA Streaming Sortformer v2.1. - Автоматическая диагностика качества, консервативная очистка и safe fallback без сдвига таймкодов.
- Ускорение MLX RNN-T на Apple Silicon; CPU, CUDA, Intel XPU и MPS.
- LLM-постобработка: выжимки, задачи и свои промпты.
- Провайдеры LLM: OpenAI-compatible API, Claude Code, Codex, OpenCode, Pi и произвольный CLI.
- RU/EN, светлая/тёмная тема, журнал, stage-aware progress и отмена очереди.
- Web UI с авторизацией, SSE-прогрессом, восстановлением задач и Docker hardening.
git clone https://github.com/dubr1k/GigaAMGUI.git
cd GigaAMGUI
cp .env.example .env
python -m pip install -r requirements.txt
ffmpeg -versionHF_TOKEN=your_huggingface_token_hereДля диаризации нужно принять условия моделей pyannote/speaker-diarization-3.1 и pyannote/segmentation-3.0.
# macOS 13+: ScreenCaptureKit для системного звука, sounddevice для микрофона
python -m pip install -r requirements-live-macos.txt
# Linux: sounddevice; системный звук доступен только как monitor source PipeWire/PulseAudio
python -m pip install -r requirements-live-linux.txtmacOS требует разрешения Microphone для микрофона и Screen Recording для
системного звука. ScreenCaptureKit доступен с macOS 13. На Linux приложение не
создаёт monitor source: включите совместимость PipeWire-Pulse или PulseAudio и
проверьте, что входное устройство с Monitor в названии доступно. При отсутствии
пакета, разрешения или monitor source захват сообщает ошибку и не создаёт дорожку.
Вкладка Live в Desktop GUI захватывает микрофон, системный звук или оба источника
одновременно; для каждого источника выбирается отдельное устройство. По выбору
сохраняются mic.wav и system.wav, а при захвате обоих источников — также
mix.wav. После остановки сессии доступны txt, txt_timecodes, txt_diarize,
txt_diarize_timecodes, md, srt и vtt.
Диаризация выбирается отдельно: выключена, анонимная оценка в реальном времени или обработка после остановки. Оценки в реальном времени могут изменяться в последние 10 секунд; если live-диаризация недоступна, сохраняются метки источников. Режим после остановки добавляет офлайн-метки спикеров к записанным дорожкам.
Кнопка «Оверлей» открывает плавающее окно поверх других окон с финальным и частичным текстом. В нём можно задавать LLM вопросы по финальным событиям текущей сессии и отменять генерацию ответа.
Live-захват поддерживается на Windows, macOS и Linux. В Windows установите
requirements-live-windows.txt (PyAudioWPatch). В macOS 13+ для микрофона нужны
requirements-live-macos.txt и разрешение Microphone; системный звук дополнительно
требует разрешение Screen Recording и ScreenCaptureKit. В Linux установите
requirements-live-linux.txt; системный звук доступен только через существующий
monitor source PipeWire/PulseAudio, который приложение не создаёт.
В полной macOS .app Sortformer и NeMo уже включены. При запуске проекта из
исходников Sortformer устанавливается отдельно, чтобы не добавлять тяжёлый NeMo
в базовую установку:
python -m pip install -r requirements-sortformer.txt
python cli.py --diarize --diarization-backend sortformer -f audio.wavИспользуется nvidia/diar_streaming_sortformer_4spk-v2.1 с официальными
high-latency параметрами model card. Модель сама определяет активных
спикеров, поддерживает максимум четыре голоса и не требует HF_TOKEN.
Диаризация не зависит от ASR-модели: она проверена с v3_e2e_rnnt,
multilingual_ctc (220M) и multilingual_large_ctc (600M). Обе CTC-модели
работают через PyTorch backend.
Рекомендуется CUDA; CPU работает значительно медленнее. На Apple Silicon
Sortformer запускается на MPS; если конкретная операция NeMo не выполнится на
MPS, приложение один раз повторит диаризацию на CPU и покажет причину fallback
в журнале. Модель (~471 МБ) загружается после первого нажатия «Начать обработку»
с выбранным Sortformer и затем остаётся в пользовательском кэше.
NeMo из Space (2.5.3) намеренно не используется из-за исправленных в новых
релизах уязвимостей; optional-файл фиксирует проверенную безопасную ветку 2.7.
Для Web GUI соберите расширенный образ: INSTALL_SORTFORMER=1 docker compose build gigaam-web.
| Интерфейс | Запуск | Для чего |
|---|---|---|
| Desktop GUI | python app.py |
Обычная интерактивная работа |
| CLI | python cli.py -f audio.wav -o output |
Скрипты и автоматизация |
| REST API | python api.py |
Интеграции; docs: http://127.0.0.1:8000/docs |
| Web GUI | docker compose up -d --build gigaam-web |
Локальная web-панель: http://127.0.0.1:8001/ |
| TUI (preview) | cd tui && cargo run --release |
Терминальная интерактивная очередь |
curl -fsSL https://raw.githubusercontent.com/dubr1k/GigaAMGUI/main/scripts/install_tui.sh | bash
gigaamВ Desktop GUI и Web UI параметры появляются рядом с форматами SRT/VTT. CLI
принимает --subtitle-sentence-split/--no-subtitle-sentence-split,
--subtitle-max-lines и --subtitle-max-width:
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. Настройки сохраняются между запусками. При наличии
word timestamps cue получает точные границы; иначе используется детерминированное
распределение внутри исходного ASR-сегмента. При диаризации SRT называет спикера
только при смене говорящего, и лимит ширины учитывает метку лишь в этих cue —
остальные используют всю заданную длину строки. VTT сохраняет стандартный voice
span <v Спикер №1> на каждом cue: он невидим в плеере, но нужен для атрибуции
и стилизации. При экстремально узкой строке длинная видимая метка сокращается
с сохранением идентифицирующего суффикса; в VTT имя не обрезается.
Все крупные загрузки можно направить на выбранный диск единым параметром
GIGAAM_DATA_DIR. Внутри автоматически создаются runtimes и отдельные
подкаталоги models/gigaam, models/huggingface, models/onnx,
models/torch, models/nemo и models/deepfilter. Это включает PyTorch
runtime, GigaAM, ONNX/MLX, Pyannote/Sortformer, NeMo и DeepFilterNet.
- Desktop GUI:
Настройки → Папка данных и моделей…. Portable-сборка также предлагает выбрать папку до первой загрузки. После смены папки нужен перезапуск; уже загруженные модели намеренно не перемещаются автоматически. - GUI/CLI:
python app.py --data-dir /mnt/large/GigaAMDataилиpython cli.py --data-dir /mnt/large/GigaAMData .... - TUI:
gigaam --data-dir /mnt/large/GigaAMData. - REST API/Web: задайте
GIGAAM_DATA_DIRдо запуска сервера. Для Docker Compose эта переменная означает путь на хосте:
GIGAAM_DATA_DIR=/mnt/large/GigaAMData docker compose up -d --build gigaam-webУзкие переменные (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) сохраняют приоритет, если
нужно разместить отдельный компонент иначе. В Windows путь моделей/runtime не
должен содержать кириллицу из-за ограничений некоторых нативных DLL.
Небольшие пользовательские настройки остаются в системном config-каталоге, чтобы
смена диска не сбрасывала язык, токены и параметры обработки. Для полностью
самостоятельной конфигурации её можно отдельно перенести через GIGAAM_CONFIG_DIR.
Для Web UI задайте в .env:
WEB_SECRET=change_me
WEB_USERNAME=admin
WEB_PASSWORD=replace_with_strong_passwordcp .env.example .env
mkdir -p uploads results logs cache
docker compose up -d --build gigaam-web
curl -fsS http://127.0.0.1:8001/healthCompose монтирует выбранный на хосте GIGAAM_DATA_DIR внутрь контейнера как
/data. Не подставляйте хостовый абсолютный путь в HF_HOME, TORCH_HOME,
NEMO_HOME, ONNX_MODEL_DIR или GIGAAM_RUNTIME_DIR: внутри контейнера эти
кэши должны оставаться под /data. Корневая файловая система контейнера
работает в режиме read-only, поэтому перенос кэшей обратно в /home приведёт к
ошибке загрузки VAD или модели диаризации.
При обновлении пересобирайте контейнер, но сохраняйте GIGAAM_DATA_DIR,
uploads, results и logs: модели и пользовательские файлы находятся в этих
томах и новый контейнер подхватит их автоматически. Не нужно копировать их внутрь
резервной копии самого контейнера. Если каталоги bind mount создавались от root,
дайте UID 1000 права записи до запуска сервиса.
После обновления проверяйте не только статус контейнера, но и /health и журнал:
docker compose ps gigaam-web
docker compose logs --tail=200 gigaam-web
curl -fsS http://127.0.0.1:8001/healthДля задач с диаризацией дополнительно убедитесь, что в логе нет Read-only file system или VAD недоступен, а сегментация ASR работает в режиме VAD, а не через
аварийный overlap_chunks fallback. Перед обновлением можно сохранить тег
предыдущего образа для быстрого rollback; nginx или другой reverse proxy к
контейнеру на 127.0.0.1:8001 настраивается отдельно.
Для 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По умолчанию AUDIO_PREPROCESSING_MODE=auto. Перед ASR приложение измеряет
громкость, noise floor, приблизительный SNR, clipping, тишину, DC offset,
spectral flatness и низкочастотный шум. Детерминированная policy выбирает одно
из действий:
- pass-through для уже качественной записи;
- только нормализацию для тихой записи;
- мягкий FFmpeg high-pass/denoise для умеренного шума;
- DeepFilterNet для сильного широкополосного шума;
- отказ от enhancement при клиппинге, почти пустой записи или неуверенном результате.
После обработки кандидат измеряется повторно. Он используется только если quality gate подтверждает улучшение без роста клиппинга, потери речи и изменения длительности. ASR получает выбранную дорожку, а диаризация — исходный canonical WAV: это сохраняет тембр спикеров, границы реплик и таймкоды. Паузы физически не удаляются.
DeepFilterNet запускается официальным self-contained Rust binary версии 0.5.6.
Он скачивается с GitHub Releases только при первом обнаружении тяжёлого шума,
проверяется по закреплённому SHA-256 и хранится в runtime cache. Python-пакет
DeepFilterNet не устанавливается и не конфликтует с NumPy 2. Поддерживаются
Windows x64, macOS Intel/Apple Silicon и Linux x64/arm64. При недоступной сети,
неподдерживаемой платформе или любой ошибке транскрибация продолжится с исходной
дорожкой.
AUDIO_PREPROCESSING_MODE=auto # off | auto | light | denoise
# GIGAAM_DEEPFILTER_DIR=/writable/executable/cachepython cli.py --audio-preprocessing auto -f noisy.wav
python cli.py --audio-preprocessing off -f studio.wavauto на macOS Apple Silicon использует gigaam-mlx, затем при необходимости переключается на PyTorch. На остальных платформах auto пока сохраняет PyTorch как проверенный default. Новый backend onnx использует onnx-asr==0.12.0, не импортирует PyTorch и поддерживает CPU, CUDA, TensorRT, CoreML и DirectML.
В portable-сборках 1.3.1 ускорение ONNX согласовано с выбранным устройством:
- Windows/Linux содержат один
onnxruntime-gpu; егоautoиспользуетCUDAExecutionProvider → CPUExecutionProvider. CUDA/cuDNN берутся из выбранного сменного PyTorch runtime (cu124/cu128), поэтому ASR и Sortformer не расходятся по устройствам. CPU остаётся встроенным fallback; - macOS содержит обычный
onnxruntime;autoиспользуетCoreMLExecutionProvider → CPUExecutionProvider; - DirectML и TensorRT остаются явными advanced-настройками и используются только когда установленный ORT действительно предоставляет такой provider.
Выбор CPU не скачивает CUDA runtime. Если CUDA runtime уже выбран и установлен, приложение активирует его до обнаружения providers и вызывает preload CUDA/cuDNN. Фактическая provider chain отображается в журнале подготовки.
python cli.py --backend auto -f audio.wav
python cli.py --backend mlx -f audio.wav
python cli.py --backend onnx --onnx-provider auto -f audio.wav
python cli.py --backend pytorch -f audio.wavТе же настройки доступны в Desktop GUI и Web UI. REST API принимает их как необязательные query-параметры; без них используется серверная конфигурация:
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"Список допустимых значений и активная конфигурация: GET /api/v1/asr/options.
Настройка, отличающаяся от серверного default, получает изолированный loader
задачи и не перенастраивает backend параллельных запросов.
ONNX-диаризация также доступна без PyTorch и HF_TOKEN:
python cli.py --backend onnx --diarize --diarization-backend onnx -f audio.wavОна сохраняет powerset-классы перекрывающейся речи, извлекает WeSpeaker embeddings и выполняет constrained clustering. Pyannote и Sortformer оставлены как проверяемые fallback-backend-ы: ONNX станет default только после прохождения локальных WER/CER и DER/JER ворот качества. На native Windows Sortformer запускается через ONNX Runtime без NeMo; на Linux/macOS официальный NeMo backend используется, когда он установлен, иначе автоматически выбирается тот же portable ONNX runtime. На Windows/Linux ONNX Sortformer использует CUDA выбранного runtime и CPU fallback; на macOS — CoreML и CPU fallback.
Сравнение на локальном лицензированном корпусе:
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Каждый релиз выходит в двух вариантах:
- обычный — после нажатия «Начать обработку» проверяет выбранную цепочку, показывает скачивание/загрузку, device/provider и fallback в журнале и докачивает недостающие модели (и PyTorch runtime, если он нужен выбранному PyTorch/NeMo/CUDA-сценарию);
- офлайн (
*-offline.zip) — рядом с исполняемым файлом лежит папкаmodelsс базовой ONNX-цепочкой: распознавание, VAD и Pyannote+WeSpeaker-диаризация. Такой сборке не нужны ни сеть, ни токен Hugging Face, ни PyTorch.
Распакуйте архив целиком и запускайте бинарник из распакованной папки: модели
ищутся рядом с ним. Приложение само выбирает onnx и для распознавания, и для
диаризации — явная настройка в .env или переменной окружения по-прежнему
имеет приоритет. Папка офлайн-моделей используется только для чтения, а
докачанные позже модели (multilingual, MLX, Pyannote, Sortformer) попадают в доступный для
записи кэш приложения. Выбор GIGAAM_DATA_DIR не заменяет встроенные snapshots:
офлайн-модели по-прежнему читаются рядом с бинарником, а writable-данные
размещаются на выбранном диске.
Собрать такой набор самостоятельно:
python scripts/build_offline_models.py --output offline/models/hfGigaAMGUI/
├── app.py # PyQt desktop app
├── cli.py # scripting CLI
├── api.py # REST API
├── src/ # core, services, GUI mixins, utilities
├── tui/ # Ratatui frontend
├── web/ # FastAPI Web UI
├── tests/
├── packaging/
├── assets/
├── Dockerfile
└── docker-compose.yml
| Обработка | LLM | Настройки LLM |
|---|---|---|
![]() |
![]() |
![]() |
- SaluteDevices / GigaAM
- GigaAM-v3 on Hugging Face
- aystream / gigaam-mlx
- istupakov / onnx-asr — за лёгкую кроссплатформенную реализацию распознавания речи на ONNX
- NVIDIA Streaming Sortformer v2.1
- Scrybl / Sortformer v2.1 ONNX — закреплённый ONNX-экспорт для native Windows
- parakeet-rs — MIT, референс потокового Sortformer ONNX
- DeepFilterNet — MIT, optional neural noise suppression


