СейчасЧто входит в gigastt
- Что входит в gigastt
- gigastt и GigaAM — разные уровни стека
- Модели и основные возможности
- Точность, скорость и память
- Что показывают сравнения
- Установка
- Первые команды и проверка результата
- Подключение по API
- Аппаратное ускорение и системные требования
- Безопасный запуск сервера
- Полезные сценарии
- Лицензии
- Что проверить при проблемах
- Официальные ссылки
- Следующий шаг
- Связанные материалы
gigastt — локальный движок распознавания русской речи на GigaAM v3. Он работает как CLI, HTTP-сервер или встраиваемая библиотека: инференс выполняется на вашей машине, без облака, API-ключей и Python в рантайме.
Что входит в gigastt
gigastt — открытая обёртка на Rust вокруг моделей GigaAM. Конвейер включает декодирование аудио, построение мел-спектрограммы, Conformer-энкодер, RNN-T- или CTC-декодер, токенизатор и необязательную постобработку.
Использовать движок можно четырьмя способами:
- CLI для отдельных файлов, папок и наблюдения за каталогом;
- HTTP-сервер с REST, SSE и WebSocket;
- библиотека
gigastt-coreдля Rust; - привязки для встраивания: C-ABI, опубликованные пакеты для Node.js и Python.
Проект распространяется по MIT. На 6 сентября 2026 года в опубликованных контейнерах указана версия 2.20.0: доступны теги 2.20.0 и 2.20.0-cuda, а пример зависимости в документации — gigastt-core = "2.20".
gigastt и GigaAM — разные уровни стека
| Что | Кто развивает | Назначение |
| gigastt | Evgeny Khodzitsky, MIT | Локальный сервер, CLI и библиотеки на Rust |
| GigaAM | SberDevices, MIT | Семейство акустических моделей, на которых работает движок |
Модели и основные возможности
| Возможность | Что доступно |
| Варианты моделей | rnnt по умолчанию; e2e_rnnt со встроенными пунктуацией, регистром и нормализацией; ml_ctc и ml_ctc_large на базе GigaAM Multilingual |
| Языки | rnnt и e2e_rnnt ориентированы на русский; многоязычные варианты поддерживают ru/en/kk/ky/uz |
| Потоковое распознавание | Промежуточные результаты по WebSocket; REST и SSE для файлов |
| OpenAI-совместимый API | /v1/audio/transcriptions принимает multipart-запрос с файлом и моделью |
| Пунктуация и ITN | Встроены в e2e_rnnt; для rnnt включаются через --punctuation и --itn с дополнительными моделями |
| Диаризация | Разметка говорящих через WeSpeaker и polyvoice; для стереозаписей доступен режим «канал = спикер». Режимы взаимоисключающие |
| Аудио | WAV с PCM, G.711, G.722, GSM 06.10, ADPCM и RF64; M4A/AAC, MP3, OGG/Vorbis, OGG/Opus, WebM/Opus, FLAC и необработанные μ-law, A-law и G.722 |
| Экспорт | JSON, TXT, SRT, VTT и Markdown, включая тайминги и оценку уверенности |
| Пакетная работа | transcribe-batch, watch и необязательная очередь /v1/jobs |
Модель ml_ctc имеет энкодер на 220 млн параметров и занимает около 225 МБ в INT8. Вариант ml_ctc_large содержит 600 млн параметров и занимает около 592 МБ. В лабораторных измерениях ml_ctc быстрее стандартной rnnt, но это вариант с приоритетом скорости, а не облегчённая по памяти версия. Его качество следует отдельно проверять на своих данных. Многоязычные CTC-варианты выдают строчный текст, поэтому для пунктуации и нормализации потребуется дополнительная обработка.
Точность, скорость и память
Опубликованные сравнительные измерения сделаны командой проекта на Apple M1, CPU, INT8, с единым тестовым конвейером. Для четырёх основных доменов использовалось около 1000 записей на домен и 95-процентные бутстрап-интервалы.
Метрика gigastt rnnt | Результат |
| WER, чистая начитка | 3.55% |
| WER, дальнее поле | 4.08% |
| WER, телефонный звук | 18.50% |
| WER, YouTube | 10.91% |
| Файловый RTF | Около 0.10 на CPU |
Модель rnnt | Около 225 МБ, INT8 |
Память, --pool-size 1 | Около 46 МБ resident; ps показывает около 277 МБ RSS |
Память, --pool-size 2 | Около 66 МБ resident; ps показывает около 510 МБ RSS |
| Холодный старт | Около 0.94 с |
Разница между resident footprint и RSS возникает из-за отображённой в память модели. RSS включает общие страницы memory-mapped-файла, которые операционная система может освободить под давлением. Для планирования нагрузки полезно отслеживать обе метрики и воспроизводить измерения на своём сервере.
Что показывают сравнения
На чистой начитке оценки gigastt 3.55% и Vosk 0.54 2.97% имеют пересекающиеся доверительные интервалы. В опубликованной матрице это статистическая ничья. На дальнем поле, телефонии и YouTube gigastt показывает меньший WER среди участников этой матрицы, но Vosk и T-one работают быстрее.
Whisper полезнее при широкой многоязычности. Преимущество gigastt в сравнении с Whisper связано прежде всего с промежуточными результатами и компактной локальной упаковкой, а не с универсальностью по языкам.
Установка
# Homebrew: macOS arm64 и Linux x86_64
brew tap ekhodzitsky/gigastt https://github.com/ekhodzitsky/gigastt && brew install gigastt
# crates.io: protoc должен находиться в PATH
brew install protobuf
cargo install gigastt
# На Debian/Ubuntu вместо brew install protobuf:
# sudo apt install protobuf-compiler
# Готовый CPU-образ, amd64 и arm64
docker pull ghcr.io/ekhodzitsky/gigastt:latest
docker run -p 9876:9876 ghcr.io/ekhodzitsky/gigastt:latest
# CUDA 12+ на Linux x86_64
docker pull ghcr.io/ekhodzitsky/gigastt:cudaСтандартный INT8-комплект модели размером около 225 МБ загружается при первом запуске или командой gigastt download. Рантайм использует готовые INT8-веса: отдельного FP32-пути загрузки или инференса нет.
Для собственного образа модель можно подготовить во время сборки:
docker build --build-arg GIGASTT_BAKE_MODEL=1 -t gigastt:baked .
docker run -p 9876:9876 gigastt:bakedort скачивает ONNX Runtime, а protoc должен быть установлен отдельно. Для автономной сборки используйте заранее подготовленный ONNX Runtime или режим динамической загрузки и перенесите внутрь контура готовые модель и бинарник.Первые команды и проверка результата
# Один файл
gigastt transcribe recording.wav
# Папка с файлами
gigastt transcribe-batch samples/ out/
# Наблюдение за входной папкой
gigastt watch inbox/ out/ --move-to inbox/done/
# REST, SSE и WebSocket на одном порту
gigastt serveПосле запуска проверьте готовность и выполните минимальную расшифровку:
curl http://127.0.0.1:9876/ready
curl -X POST http://127.0.0.1:9876/v1/transcribe -H 'Content-Type: application/octet-stream' --data-binary @recording.wavПроверка успешна, если после загрузки модели /ready показывает готовность, а /v1/transcribe возвращает результат с распознанным текстом. HTTP-ответ сам по себе не подтверждает качество: сравните результат с ручной расшифровкой своего аудио, особенно если это телефон, переговорная или запись с фоновой музыкой.
Подключение по API
| Эндпоинт | Метод | Назначение |
/health | GET | Проверка жизнеспособности процесса |
/ready | GET | Готовность модели принимать запросы |
/v1/models | GET | Доступные варианты модели |
/v1/transcribe | POST | Расшифровка файла с полным ответом |
/v1/transcribe/stream | POST | Потоковая выдача результата файла через SSE |
/v1/audio/transcriptions | POST | OpenAI-совместимая расшифровка |
/v1/ws | GET | WebSocket с промежуточными и финальными результатами |
/v1/jobs | Разные | Очередь длинных задач при --enable-jobs |
/v1/admin/reload | POST | Горячая перезагрузка модели, только для loopback-клиентов |
WebSocket-клиент подключается к ws://127.0.0.1:9876/v1/ws, передаёт конфигурацию и аудиокадры, затем получает сообщения partial и final. Для протокола 1.0 опубликованы типизированные клиенты на Go и TypeScript; переподключение учитывает retry_after_ms.
Если HTTP-сервер не нужен, движок можно подключить напрямую:
npm install gigastt
pip install gigasttДля Rust:
[dependencies]
gigastt-core = "2.20"Пакеты Node.js и Python опубликованы. Упаковка для SwiftPM и Kotlin AAR на дату проверки ещё находится в разработке.
Аппаратное ускорение и системные требования
| Платформа | Флаг или образ | Исполнение |
| Любая | По умолчанию | CPU |
| macOS ARM64 | --features coreml | CoreML с автоматическим откатом на CPU при ошибке проверки |
| macOS ARM64 | --features ane | Экспериментальный ANE, только файловый режим |
| macOS ARM64 | --features candle | Экспериментальный Candle/Metal |
| Linux x86_64 + NVIDIA | --features cuda или образ :cuda | CUDA 12+ |
| Android ARM64 | --features nnapi | NNAPI |
Актуальные требования: Rust 1.94+, protoc для сборки, macOS 14+ на Apple Silicon, Linux x86_64 или aarch64 либо Windows x86_64. Для минимальной установки с моделью и бинарником закладывайте примерно 250–400 МБ диска. Модели пунктуации, VAD и диаризации потребуют дополнительного места.
Производительность на Raspberry Pi пока не опубликована. Наличие arm64-образа подтверждает возможность установки, но не доказывает пригодность для диктовки в реальном времени. RTF, холодный старт и потоковую задержку нужно измерять на конкретной плате.
Безопасный запуск сервера
Сервер по умолчанию работает на петлевом интерфейсе. Встроены список разрешённых Origin, ограничение частоты запросов, корректное завершение активных сессий и Prometheus-метрики на отдельном адресе, по умолчанию 127.0.0.1:9090.
При горячей перезагрузке сервер прогревает новый движок и атомарно заменяет старый. Дополнительный пик памяти после отображения модели в память не измерен, поэтому на ограниченном устройстве оставьте запас или перезапускайте процесс.
Полезные сценарии
- Расшифровка интервью внутри контура. Передайте WAV, M4A или MP3 через CLI либо REST. Результатом будет текст или JSON с таймингами. Перед рабочим использованием проверьте WER на нескольких типичных записях.
- Обработка стереозвонков. Включите
--stereo-speakersв CLI илиchannels=splitв REST. Левый и правый каналы получат меткиspeaker_0иspeaker_1. Этот режим нельзя совмещать с модельной диаризацией. - Голосовой ввод. Отправляйте аудио через WebSocket и показывайте пользователю
partial, заменяя его послеfinal. Учитывайте задержку около 0.8–1.7 с и более высокий WER относительно REST. - Папка на входе, текст на выходе. Команда
watchподхватывает новые записи, создаёт результаты и переносит исходники в обработанный каталог. Успех можно проверить по появлению файлов вout/и перемещению записи вinbox/done/. - Субтитры. Экспортируйте SRT или VTT с таймингами. Перед публикацией просмотрите границы сегментов и имена собственные вручную.
- Локальная замена Whisper API. Укажите клиенту базовый URL собственного сервера и используйте
/v1/audio/transcriptions. Совместимость относится к этому сценарию расшифровки и не означает поддержку всего OpenAI API.
Лицензии
Код gigastt и стандартные веса GigaAM распространяются по MIT, что допускает коммерческое использование при соблюдении условий лицензии. Необязательная модель спикеров WeSpeaker имеет лицензию CC BY 4.0 и требует сохранения атрибуции.
Что проверить при проблемах
| Симптом | Проверка |
| Сборка падает на зависимостях | Убедитесь, что установлен protoc и команда доступна через PATH |
| Первый запуск ждёт модель | Заранее выполните gigastt download; стандартный INT8-комплект занимает около 225 МБ |
| Пул занят | Настройте размер пула или включите очередь /v1/jobs; клиентские переподключения учитывают retry_after_ms |
| Браузер отклонён сервером | Добавьте точный Origin в список разрешённых |
| Нет пунктуации | Включите --punctuation и --itn либо выберите e2e_rnnt |
| Стриминг теряет слова | Для готовых файлов используйте REST: потоковый режим имеет отдельный профиль качества |
| RSS кажется значительно выше resident memory | Учитывайте страницы memory-mapped-модели и измеряйте обе метрики после прогрева |
| Нужна Raspberry Pi | Не переносите цифры Apple M1 на Pi; измерьте RTF, холодный старт и TTFP на своей плате |
Официальные ссылки
- Репозиторий и основная документация: github.com/ekhodzitsky/gigastt
- Архитектура: docs/architecture.md
- Контейнеры и теги: GitHub Container Registry
- Модели GigaAM: github.com/salute-developers/GigaAM
- Веса GigaAM v3: huggingface.co/ai-sage/GigaAM-v3
Следующий шаг
Если нужен другой локальный стек распознавания речи, сравните Silero Models — open-source модели речи на русском.
Связанные материалы
- Статья: Не диктовка, а диалог: новый голосовой режим Codex
- Блог: ChatGPT Voice приехал в десктоп — теперь голосом можно рулить агентами
Локальное распознавание полезно, когда записи разговоров нельзя передавать внешнему провайдеру или нужно встроить STT в собственное приложение.
Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov
Если хотите разобрать свою задачу — напишите мне Если хотите разобрать свою задачу — напишите мне.
Можно прийти с идеей, черновым контекстом или уже живой задачей. Помогу быстро понять, где реальный следующий шаг, а где лишний шум.
Обычно хватает 2–3 сообщений, чтобы понять, могу ли я здесь реально помочь и в каком формате лучше двигаться дальше.
Дальше по теме
Open-source библиотека готовых моделей речи от Silero Team: синтез (TTS), распознавание (STT) и детекция голоса (VAD). Особенно сильна на русском: 5 живых голосов, автоматические у…