Native offline speech-to-text for Russian, Kazakh, Kyrgyz, and Uzbek on Apple Silicon with GigaAM and MLX
Project description
GigaAM-Multilingual MLX
English · Русский
Fast, offline speech-to-text for Russian, Kazakh, Kyrgyz, and Uzbek on Apple Silicon. This is an independent native MLX port of GigaAM, based on the official GigaAM-Multilingual model.
PyPI · Hugging Face models · Latest release · Full benchmark
The chart compares WER, five-minute transcription time, peak process memory, and
model size. Filled pills mark column leaders, outlined pills mark runners-up,
◇ marks the Pareto frontier, and ★ the recommended default. Lower is better.
Quick start
Requires an Apple Silicon Mac, macOS 14+, Python 3.12 or 3.13,
uv, and
ffmpeg.
brew install uv ffmpeg
uv tool install gigaam-multilingual-mlx
gigaam-stt meeting.m4a --output transcript.txt
For a uv-managed Python project:
uv add gigaam-multilingual-mlx
pip install gigaam-multilingual-mlx and the long
gigaam-multilingual-mlx transcribe ... command remain supported.
Local transcription server
Use GigaAM MLX with applications that support the OpenAI transcription API:
uv tool install 'gigaam-multilingual-mlx[server]'
gigaam-stt serve
The server is now available at http://127.0.0.1:8000/v1:
curl http://127.0.0.1:8000/v1/audio/transcriptions \
-F model=whisper-1 \
-F file=@meeting.m4a
The same endpoint works with the OpenAI Python client (uv add openai):
from pathlib import Path
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:8000/v1", api_key="local")
with Path("meeting.m4a").open("rb") as audio:
result = client.audio.transcriptions.create(model="whisper-1", file=audio)
print(result.text)
whisper-1 is a compatibility alias; the server still runs GigaAM
Multilingual MLX. It is local-only by default. See the
server guide
for formats, model IDs, network access, configuration, and troubleshooting.
Why this port?
- Native MLX inference without PyTorch, ONNX Runtime, Core ML, or a cloud API.
- Strong measured quality for the four core GigaAM languages, especially Kazakh, Kyrgyz, and Uzbek.
- A 699 MB default model that used 0.877 GB peak process memory in the published five-minute benchmark.
- Local WAV, FLAC, MP3, M4A, and video transcription to TXT, JSON, SRT, or VTT.
On the tested Russian five-minute input, INT8 was 3.30× faster than Whisper v3 Turbo, 7.02× faster than Whisper large-v2, and 8.94× faster than Whisper large-v3. Whisper and Parakeet were better on the English appendix. These are single-machine public-corpus results, not a universal ASR leaderboard; see the full report for confidence intervals, commands, hashes, and limitations.
Model variants
| Variant | Recommended use | Model size | Peak RAM | Hugging Face |
|---|---|---|---|---|
| INT8 g64 | default balance | 699 MB | 0.88 GB | ai-babai/...-int8-g64 |
| FP16 | fastest measured, reference port | 1.17 GB | 1.35 GB | ai-babai/gigaam-multilingual-mlx |
| INT6 g64 | smaller, near-INT8 quality | 573 MB | 0.76 GB | ai-babai/...-int6-g64 |
| INT4 g64 | minimum memory and disk | 447 MB | 0.63 GB | ai-babai/...-int4-g64 |
Choose a variant without remembering its repository name:
gigaam-stt speech.wav --variant fp16
gigaam-stt speech.wav --variant int6 --format json
gigaam-stt models
The runtime downloads immutable model revision v0.1.0 on first use and then
reuses the standard Hugging Face cache.
Common commands
# Subtitles
gigaam-stt interview.mp3 --format srt --output interview.srt
# Output directory; creates transcripts/recording.vtt
gigaam-stt recording.mov --format vtt --output-dir transcripts/
# Machine-readable text, timestamps, revision, and metrics
gigaam-stt sample.flac --format json --output sample.json
# Reuse a downloaded snapshot without network access
gigaam-stt audio.wav --offline
# Move the Hugging Face cache
gigaam-stt audio.wav --cache-dir /Volumes/ML/huggingface
Long inputs are processed in deterministic overlapping chunks. CTC word timestamps are approximate emission times, suitable for navigation and subtitles but not forced alignment.
Python API
import mlx.core as mx
from gigaam_multilingual_mlx import load_model
model = load_model(variant="int8")
audio = mx.zeros((1, 16_000), dtype=mx.float32)
log_probs, lengths = model(audio)
text = model.greedy_decode(log_probs, lengths)[0]["text"]
Local portable model directories are also supported:
load_model("/path/to/model").
Compatibility and limitations
- Supported: Apple Silicon, native ARM Python, macOS 14+.
- M1–M5 are expected to be runtime-compatible; published performance numbers come from one 14-inch MacBook Pro with Apple M4 Pro and 48 GB memory.
- Not supported: Intel Mac, Linux, Windows, or iOS.
- This release uses greedy CTC decoding. It does not provide diarization, training, microphone streaming, or realtime HTTP/WebSocket streaming.
- Accuracy can degrade with noise, far-field speech, overlapping speakers, code-switching, or domains unlike the public evaluation data.
Reproducibility and development
The repository contains pinned public FLEURS manifests, compact benchmark results, and commands for GigaAM, MLX Whisper, and MLX Parakeet. No private audio, model weights, datasets, caches, or raw large benchmark outputs are stored in Git.
Developer-only conversion and evaluation tools use optional dependencies:
python -m pip install 'gigaam-multilingual-mlx[convert,quality]'
python -m gigaam_multilingual_mlx.dev_cli --help
Start with benchmarks/multilingual-v1/README.md
for the protocol and docs/benchmark-multilingual-v1.md
for the results.
Key numbers in text
This compact table is the text alternative to the GigaAM part of the image. Core macro WER averages Russian, Kazakh, Kyrgyz, and Uzbek; lower is better.
| GigaAM MLX variant | Core macro WER | 5-min WAV | Peak RAM | Model size |
|---|---|---|---|---|
| FP16 | 5.066% | 1.952s | 1.350 GB | 1.171 GB |
| INT8 g64 (default) | 5.070% | 2.036s | 0.877 GB | 0.699 GB |
| INT6 g64 | 5.069% | 2.195s | 0.755 GB | 0.573 GB |
| INT4 g64 | 5.219% | 2.563s | 0.626 GB | 0.447 GB |
License and attribution
The MLX port is MIT-licensed. Upstream and dataset provenance is recorded in
THIRD_PARTY_NOTICES.md. Please cite the original
GigaAM-Multilingual work from the upstream model card and this project using
CITATION.cff.
This project is not an official release of the GigaAM authors. Security reports
and contributions are covered by SECURITY.md and
CONTRIBUTING.md.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gigaam_multilingual_mlx-0.2.0.tar.gz.
File metadata
- Download URL: gigaam_multilingual_mlx-0.2.0.tar.gz
- Upload date:
- Size: 1.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e77dbdcec4ae17e2ffe23af4b1e30ca2162189e996e959fd4d93a67de93b9270
|
|
| MD5 |
aa756f89b95a2d0157a02627fe66b137
|
|
| BLAKE2b-256 |
76832ea6b5fe9efcd55bd05b729a3e0e5c2588215e006e8d4f0a44c60d523d6e
|
Provenance
The following attestation bundles were made for gigaam_multilingual_mlx-0.2.0.tar.gz:
Publisher:
publish-to-pypi.yml on ai-babai/gigaam-multilingual-mlx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gigaam_multilingual_mlx-0.2.0.tar.gz -
Subject digest:
e77dbdcec4ae17e2ffe23af4b1e30ca2162189e996e959fd4d93a67de93b9270 - Sigstore transparency entry: 2187895143
- Sigstore integration time:
-
Permalink:
ai-babai/gigaam-multilingual-mlx@366a8929df315e9df1681655a6d7cf0ddace21af -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/ai-babai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@366a8929df315e9df1681655a6d7cf0ddace21af -
Trigger Event:
release
-
Statement type:
File details
Details for the file gigaam_multilingual_mlx-0.2.0-py3-none-any.whl.
File metadata
- Download URL: gigaam_multilingual_mlx-0.2.0-py3-none-any.whl
- Upload date:
- Size: 51.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3fe7cf6ab28148d0843f6d179228bdaa0aa927b6d6d1d16509f395e14a164172
|
|
| MD5 |
4b204037cbbf1e38c2e2b8b2ed490705
|
|
| BLAKE2b-256 |
d6cb1308f14ab1f37eccbf0daf60c0cc539e324a5e26fc133ecfb75e3761aac2
|
Provenance
The following attestation bundles were made for gigaam_multilingual_mlx-0.2.0-py3-none-any.whl:
Publisher:
publish-to-pypi.yml on ai-babai/gigaam-multilingual-mlx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gigaam_multilingual_mlx-0.2.0-py3-none-any.whl -
Subject digest:
3fe7cf6ab28148d0843f6d179228bdaa0aa927b6d6d1d16509f395e14a164172 - Sigstore transparency entry: 2187895146
- Sigstore integration time:
-
Permalink:
ai-babai/gigaam-multilingual-mlx@366a8929df315e9df1681655a6d7cf0ddace21af -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/ai-babai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@366a8929df315e9df1681655a6d7cf0ddace21af -
Trigger Event:
release
-
Statement type: