ekhodzitsky/gigastt

Local STT server powered by GigaAM v3.

Rust

68

1,134 commits

updated Oct 19, 2026

See the code

README

gigastt

Russian speech to text, locally.

crates.io docs.rs CI coverage license

A speech recognizer in Rust, powered by GigaAM v3 and ONNX Runtime. Transcribe files, serve HTTP and WebSocket clients, or embed the engine. CPU by default. The default INT8 model is about 310 MiB; inference runs on the device after the initial downloads. No cloud API or API key.

Examples

Transcribe a recording or write subtitles:

gigastt transcribe recording.wav
gigastt transcribe recording.wav --format srt --output recording.srt

Process a folder, or watch for new recordings:

gigastt transcribe-batch recordings/ transcripts/
gigastt watch inbox/ transcripts/

Start the server:

gigastt serve

From another terminal, upload a file:

curl http://127.0.0.1:9876/v1/transcribe \
  -H 'Content-Type: application/octet-stream' \
  --data-binary @recording.wav

The server binds to loopback by default. Deployment covers Docker, remote clients and reverse proxies.

Interfaces

InterfaceUse
CLIFiles, batch folders, watched folders; TXT, JSON, SRT, VTT, Markdown
/v1/transcribeFile upload; word timings, segments and optional speaker labels
/v1/transcribe/streamFile upload with SSE results
/v1/wsLive PCM16 audio with partial and final transcripts
/v1/audio/transcriptionsOpenAI-compatible multipart upload; JSON, text, subtitles, verbose JSON
/v1/jobsOpt-in queue for file transcription; progress, polling and cancellation
In processRust, C ABI, Node and Python; Swift/Kotlin packaging guides

API reference · Go client · TypeScript client · Embedding quickstarts

Audio and models

Files: WAV (PCM, IEEE float, G.711, G.722, GSM, ADPCM, RF64), AAC/M4A, MP3, FLAC, OGG/Vorbis, OGG/Opus and WebM/Opus. Raw telephony input is available through the CLI and native REST API. WebSocket takes PCM16 at 8, 16, 24, 44.1 or 48 kHz.

The default rnnt head recognizes Russian. e2e_rnnt includes punctuation and casing; ml_ctc / ml_ctc_large support Russian, English, Kazakh, Kyrgyz and Uzbek. Optional punctuation, Russian text normalization, hotwords and speaker diarization are described in the API.

For measured Kazakh, Kyrgyz and Uzbek accuracy, model selection and limits on conversation quality, see Languages. The latest matched evaluation recommends ml_ctc_large; reading and conversation are reported separately.

CPU works out of the box. CUDA, CoreML and NNAPI builds, plus experimental ANE and Candle backends: architecture.

Performance

Reported file-transcription WER (%), lower is better. Apple M1 CPU, Golos/OpenSTT slices, 1,000 samples per domain (992 clean references).

EngineClean readFar-fieldPhoneYouTube
gigastt (rnnt, INT8)pending evidencepending evidencepending evidencepending evidence
Vosk 0.542.976.2922.7417.24
faster-whisper (Large v3)15.5317.3424.9315.45

The previously reported primary rnnt scores are withheld until their raw results and complete run provenance are available. Competitor rows remain historical measurements. These datasets are close to GigaAM's training distribution; results on held-out sets differ. Full comparisons, confidence intervals and artifact provenance: benchmarks.

The 2026-10-09 RNN-T bundle keeps convolutions in FP32 and quantizes MatMul weights to INT8. On the measured Linux CPU, warm long-form processing takes about 55–56% of the old bundle's time, with about 22–23% higher peak RSS. Model size is about 310 MiB per head. The historical M1 latency and memory figures have not been remeasured for this bundle. See the quality trade-offs and upgrade instructions.

Live WebSocket recognition uses a buffered offline model with incremental partials. Its accuracy and latency differ from file transcription; see the streaming measurements.

Install

Homebrew:

brew tap ekhodzitsky/gigastt https://github.com/ekhodzitsky/gigastt
brew install gigastt

Or build from crates.io:

cargo install gigastt

Building requires Rust 1.94+ and protoc; ONNX Runtime is downloaded at build time by default. Linux source builds also need OpenSSL development files; see native build prerequisites. Prebuilt releases cover macOS Apple Silicon, Linux x86_64/aarch64 and Windows x86_64. Docker instructions use the published GHCR images.

For Rust embedding: gigastt-core = "2.22". Node: npm install gigastt. Python: pip install gigastt. Model setup and platform packaging: quickstarts.

Who uses gigastt · Documentation · CLI · API · Benchmarks · Changelog

MIT. Default ASR weights are MIT; the optional WeSpeaker model is CC BY 4.0. Benchmark datasets retain their own licenses. See LICENSE, NOTICE and data licenses.

asr
gigaam
on-device
onnx
onnxruntime
privacy
russian
rust
speech-recognition
stt
transcription
voice-recognition

ekhodzitsky/gigastt

Local STT server powered by GigaAM v3.

Rust

68

1,134 commits

updated Oct 19, 2026

See the code

README

gigastt

Russian speech to text, locally.

crates.io docs.rs CI coverage license

A speech recognizer in Rust, powered by GigaAM v3 and ONNX Runtime. Transcribe files, serve HTTP and WebSocket clients, or embed the engine. CPU by default. The default INT8 model is about 310 MiB; inference runs on the device after the initial downloads. No cloud API or API key.

Examples

Transcribe a recording or write subtitles:

gigastt transcribe recording.wav
gigastt transcribe recording.wav --format srt --output recording.srt

Process a folder, or watch for new recordings:

gigastt transcribe-batch recordings/ transcripts/
gigastt watch inbox/ transcripts/

Start the server:

gigastt serve

From another terminal, upload a file:

curl http://127.0.0.1:9876/v1/transcribe \
  -H 'Content-Type: application/octet-stream' \
  --data-binary @recording.wav

The server binds to loopback by default. Deployment covers Docker, remote clients and reverse proxies.

Interfaces

InterfaceUse
CLIFiles, batch folders, watched folders; TXT, JSON, SRT, VTT, Markdown
/v1/transcribeFile upload; word timings, segments and optional speaker labels
/v1/transcribe/streamFile upload with SSE results
/v1/wsLive PCM16 audio with partial and final transcripts
/v1/audio/transcriptionsOpenAI-compatible multipart upload; JSON, text, subtitles, verbose JSON
/v1/jobsOpt-in queue for file transcription; progress, polling and cancellation
In processRust, C ABI, Node and Python; Swift/Kotlin packaging guides

API reference · Go client · TypeScript client · Embedding quickstarts

Audio and models

Files: WAV (PCM, IEEE float, G.711, G.722, GSM, ADPCM, RF64), AAC/M4A, MP3, FLAC, OGG/Vorbis, OGG/Opus and WebM/Opus. Raw telephony input is available through the CLI and native REST API. WebSocket takes PCM16 at 8, 16, 24, 44.1 or 48 kHz.

The default rnnt head recognizes Russian. e2e_rnnt includes punctuation and casing; ml_ctc / ml_ctc_large support Russian, English, Kazakh, Kyrgyz and Uzbek. Optional punctuation, Russian text normalization, hotwords and speaker diarization are described in the API.

For measured Kazakh, Kyrgyz and Uzbek accuracy, model selection and limits on conversation quality, see Languages. The latest matched evaluation recommends ml_ctc_large; reading and conversation are reported separately.

CPU works out of the box. CUDA, CoreML and NNAPI builds, plus experimental ANE and Candle backends: architecture.

Performance

Reported file-transcription WER (%), lower is better. Apple M1 CPU, Golos/OpenSTT slices, 1,000 samples per domain (992 clean references).

EngineClean readFar-fieldPhoneYouTube
gigastt (rnnt, INT8)pending evidencepending evidencepending evidencepending evidence
Vosk 0.542.976.2922.7417.24
faster-whisper (Large v3)15.5317.3424.9315.45

The previously reported primary rnnt scores are withheld until their raw results and complete run provenance are available. Competitor rows remain historical measurements. These datasets are close to GigaAM's training distribution; results on held-out sets differ. Full comparisons, confidence intervals and artifact provenance: benchmarks.

The 2026-10-09 RNN-T bundle keeps convolutions in FP32 and quantizes MatMul weights to INT8. On the measured Linux CPU, warm long-form processing takes about 55–56% of the old bundle's time, with about 22–23% higher peak RSS. Model size is about 310 MiB per head. The historical M1 latency and memory figures have not been remeasured for this bundle. See the quality trade-offs and upgrade instructions.

Live WebSocket recognition uses a buffered offline model with incremental partials. Its accuracy and latency differ from file transcription; see the streaming measurements.

Install

Homebrew:

brew tap ekhodzitsky/gigastt https://github.com/ekhodzitsky/gigastt
brew install gigastt

Or build from crates.io:

cargo install gigastt

Building requires Rust 1.94+ and protoc; ONNX Runtime is downloaded at build time by default. Linux source builds also need OpenSSL development files; see native build prerequisites. Prebuilt releases cover macOS Apple Silicon, Linux x86_64/aarch64 and Windows x86_64. Docker instructions use the published GHCR images.

For Rust embedding: gigastt-core = "2.22". Node: npm install gigastt. Python: pip install gigastt. Model setup and platform packaging: quickstarts.

Who uses gigastt · Documentation · CLI · API · Benchmarks · Changelog

MIT. Default ASR weights are MIT; the optional WeSpeaker model is CC BY 4.0. Benchmark datasets retain their own licenses. See LICENSE, NOTICE and data licenses.

asr
gigaam
on-device
onnx
onnxruntime
privacy
russian
rust
speech-recognition
stt
transcription
voice-recognition

Project health

crates.io

Latest release

2.22.0 · Oct 6, 2026

Releases this year

54

Significant stargazers

Nickolay V. Shmyrev

746 followers · starred Jul 2026

Alex V.

11 followers · starred Sep 2026