Model reference · open weights

turkish-stt

Audio mihuai Speech→text 1 build Its own licence terms 542 dl/mo

turkish-stt is an open-weight audio or speech model from mihuai.

For self-hosting, compare this build's requirements below with the GPU you plan to rent.

  • turkish-stt-66m-v2 is a 66 million parameter streaming speech-to-text model designed for real-time Turkish transcription on CPU devices.
  • It operates with 16 kHz mono audio and uses a Zipformer transducer architecture to provide low-latency results for edge and IoT applications.
  • The model is distributed under the mihu Community License.

Summary of the mihuai/turkish-stt-66m-v2 model card, 2026-10-26

What it is

Released bymihuai
Released2026-10-19

From the model card

What mihuai says about turkish-stt

Read the model card

🇹🇷 Türkçe · Damga (Turkish ITN/TN) · Previous version (v1)

Real-time, low-latency speech-to-text (STT) for Turkish — second release.

Turkish-only · streaming · CPU-friendly · runs on the edge. Same size and architecture as mihuai/turkish-stt (v1), retrained: about 28% fewer word errors on FLEURS-TR (standard normalization; about 34% with Damga normalization) at identical speed.

Model: 66 M parameters · ~68 MB (int8) · streaming Zipformer transducer · 16 kHz mono


What's new in v2

v1 (turkish-stt)v2 (turkish-stt-66m-v2)Change
FLEURS-TR WER — standard normalization13.9010.06−28%
FLEURS-TR WER — Damga normalization9.386.21−34%
Parameters / int8 size66 M / ~68 MB66 M / ~68 MBsame
Latency, throughput—unchanged (same architecture)same

Measured in-house with the same audio, decoder settings and eval/score.py.

What it does

turkish-stt-66m-v2 transcribes Turkish speech as it is spoken — partial results arrive while the speaker is still talking, on an ordinary CPU (no GPU, no cloud). It is built for real-time use cases: voice agents, call centers, live captioning, dictation, IoT and edge devices.

Highlights

  • 🇹🇷 Turkish-first — every parameter serves one language, not ~100
  • ⚡ Streaming — ~320 ms chunks, partial results while you speak
  • 🖥️ CPU-native — faster than real time on a single CPU thread
  • 🔌 Tiny — ~68 MB int8; fits on a Raspberry-Pi-class device
  • 🔢 Pairs with Damga — open-source Turkish ITN turns spoken numbers, dates, money and phone numbers into written form

Benchmarks

Every number below was measured in-house on the same audio with one scoring script (eval/score.py). No figures are taken from external publications; every system, including Whisper, was run by us under identical conditions.

Accuracy — FLEURS-TR (743 clips, real human read speech)

ModelClassWER % (standard)WER % (Damga)CER % (Damga)
Whisper large-v3offline · GPU7.824.481.11
Whisper large-v3-turbooffline · GPU8.264.841.22
turkish-stt-66m-v2streaming · CPU10.066.211.70
turkish-stt (v1)streaming · CPU13.909.382.50
Whisper smalloffline · GPU17.4113.273.18

Whisper: Hugging Face transformers, fp16, language="turkish", greedy. turkish-stt-66m-v2 and v1: int8, streaming, modified_beam_search (4 paths), one CPU thread.

What this means. v2 cuts v1's word errors by roughly 28–34% (depending on normalization) and is clearly ahead of Whisper small, while staying a streaming, CPU-only model at a fraction of Whisper's size. The much larger offline Whisper large-v3 / turbo (about 1.5 B / 0.8 B parameters, 12–24× larger) still lead on read speech, but they cannot stream and are slower than real time on a CPU.

Two normalizations — why both columns?

WER depends heavily on how text is normalized before comparison, so we report two:

  • Standard — OpenAI Whisper's BasicTextNormalizer (lower-case, punctuation → space). It is language-agnostic and widely used, so it is the column to compare against other published numbers. It counts formatting differences as errors: 17 vs on yedi, Ay'ın vs ayın, hâlâ vs hala.
  • Damga — Damga text normalization (written → spoken, so 17 = on yedi), then Turkish-aware lower-casing (I/ı, İ/i), apostrophes removed and circumflex folded. It answers "was the word recognized?" — which is what matters when the transcript goes to an LLM or a voice agent.

The model's output is never altered by either; normalization is applied only at scoring time, to the reference and the hypothesis alike.

Domain sets (Damga normalization)

DatasetDomainWER %
FLEURS-TRread speech6.21
MediaSpeech-TRbroadcast media10.95

Latency and throughput

v2 has exactly the same architecture and size as v1, so speed is unchanged. Timings below were measured on the shared architecture (AMD EPYC 7282, one CPU thread, FLEURS-TR clips):

ModelCPU RTFCPU p50 msCPU p95 msGPU RTF (RTX 4090)
turkish-stt-66m-v2 (int8)0.12816192437CPU-only
Whisper small1.09812923185400.0252
Whisper large-v36.09570258979790.0400
Whisper large-v3-turbo4.29652760559690.0180

RTF = decode time ÷ audio duration (below 1.0 = faster than real time). On one 16-core CPU box turkish-stt-66m-v2 sustains about 25× real-time throughput (≈10–20 concurrent live streams); Whisper is slower than real time on CPU even for a single stream.

Usage

The easiest way is the turkish-stt package (GitHub) — 2.0.0 and later load this model; weights download on first use.

pip install turkish-stt              # 2.0.0+ — this model
pip install "turkish-stt[itn]"       # + Damga, for written-form output
import mihu_stt

mihu_stt.transcribe("audio.wav")              # "Toplam yüz elli lira ödedim."
mihu_stt.transcribe("audio.wav", itn=True)    # "Toplam 150 TL ödedim."  (Damga)

for seg in mihu_stt.transcribe_segments("audio.wav", itn=True):   # subtitles / timed transcript
    print(seg["start"], seg["end"], seg["text"])

stt = mihu_stt.StreamingSTT(itn=True)         # live: microphone, phone line
text, is_final = stt.accept_pcm16(pcm16, sample_rate=16000)

LiveKit / Pipecat adapters, a microphone CLI and subtitle export are in the [GitHub repo](https://github.com/mih

Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.

© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms