Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

283 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GigaAM v3 Transcriber

Python 3.10+ Desktop: PyQt6 API: FastAPI Web: Docker GitHub stars

🇷🇺 Русский · 🇺🇸 English

Транскрибация русской речи из аудио и видео на базе GigaAM-v3. Один сервисный слой, пять интерфейсов: Desktop GUI, CLI, REST API, Web GUI и terminal TUI.

GigaAM Transcriber — полноценный workflow для расшифровки, экспорта, диаризации и LLM-постобработки, а не только обёртка над моделью.

Содержание

Возможности

  • Пакетная обработка файлов и папок, рекурсивный поиск, 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.

Быстрый старт

1. Установите зависимости

git clone https://github.com/dubr1k/GigaAMGUI.git
cd GigaAMGUI
cp .env.example .env
python -m pip install -r requirements.txt
ffmpeg -version

2. Укажите Hugging Face token

HF_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.txt

macOS требует разрешения Microphone для микрофона и Screen Recording для системного звука. ScreenCaptureKit доступен с macOS 13. На Linux приложение не создаёт monitor source: включите совместимость PipeWire-Pulse или PulseAudio и проверьте, что входное устройство с Monitor в названии доступно. При отсутствии пакета, разрешения или monitor source захват сообщает ошибку и не создаёт дорожку.

Live desktop

Вкладка 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, который приложение не создаёт.

Опционально: NVIDIA Sortformer

В полной 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 Терминальная интерактивная очередь

TUI

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_password

Развёртывание Web UI через Docker

cp .env.example .env
mkdir -p uploads results logs cache
docker compose up -d --build gigaam-web
curl -fsS http://127.0.0.1:8001/health

Compose монтирует выбранный на хосте 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/cache
python cli.py --audio-preprocessing auto -f noisy.wav
python cli.py --audio-preprocessing off -f studio.wav

ASR backend

auto на 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/hf

Структура

GigaAMGUI/
├── 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
Обработка LLM Настройки LLM

Благодарности

About

Реализация механизма траснкрибации с графическим интерфейсом с помощью GigaAM-v3 от Sber

Resources

Stars

39 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages