Zipformer Quran 3.2

Phoneme-level speech recognition for Quran recitation. It writes what was recited phoneme by phoneme, tajweed included, streaming on a phone with no internet. There is no language model, so a mistake is written as it was recited, never corrected away.

Task
Streaming phoneme recognition
Base
v3, fine-tuned for madd length
Parameters
65.5M
Language model
None, by design
Runs
On device, offline: ONNX and Apple Neural Engine
iOS package
63 MB, 8-bit weights
Phonetic alphabet
251 symbols, tajweed included
Licence
NPL-1.2
Updated
31 Oct 2026

Hear it work

Al-Fatiha with the word being read and the phonemes the model writes for it.

Al-Fatiha Zipformer Quran 3.2 · on device

Press play. The model hears the recording on this device and finds the ayah by itself.

The phonemes the model writes run along here.
0:00 / 0:46

See what the model hears

These demos run Zipformer Quran 3.2, our earlier model, in your browser, and your audio never leaves your phone or computer. TajweedFormer V4 comes to apps through the SDK.

  • Phonemes

    Each sound the model writes as you recite, with its time and its kind.

  • Makharij

    Recite, and each letter lights up where it is made: in the throat, on the tongue, at the lips or in the nose, the moment the model hears it.

  • Spectrogram

    Your voice as a live spectrogram, with each sound labelled at the moment the model placed it.

Results

All 600 clips of quranic-asr-benchmark v1.1, measured on 14 September 2026.

Full benchmark
All 600 clips
4.13%
25,989 reference phonemes
Held-out studio reciters
2.06%
200 / 200 clips
Real phone recordings
5.96%
200 / 200 clips
A professional reciter it never heard
5.09%
200 / 200 clips

Use it

Access is granted on Hugging Face after agreeing to NPL-1.2. Download only the files you need.

Python
from huggingface_hub import snapshot_download

# only v3.2 (INT8 ONNX) and its symbol table, not the whole repository
path = snapshot_download(
    "Quran-Lab/zipformer_p-arabic-v3",
    allow_patterns=["zipformer_p_arabic_v3.2.int8.onnx", "tokens.txt"],
)

Feed it 16 kHz mono audio as 80-dim kaldi fbank features (povey window), not a mel-spectrogram: a slaney-mel front end roughly doubles the error rate.

FileWhat it is
zipformer_p_arabic_v3.2.int8.onnxv3.2, the corrected export: streaming CTC for sherpa-onnx, 8-bit weights. The file the snippet downloads.
zipformer_p_arabic_v3.2.onnxv3.2 at full precision.
zipformer_p_arabic_v3.1.int8.onnxThe v3.1 export as first released, 8-bit weights. Superseded by v3.2.
zipformer_p_arabic_v3.1.onnxThe same export at full precision.
zipformer_p_arabic_v3.1.float8.mlpackageCore ML for iOS 18 and later, 8-bit weights, 63 MB, runs on the Neural Engine. Recommended for iPhone.
zipformer_p_arabic_v3.1.float16.mlpackageCore ML at half precision, 124 MB, same graph and interface.
zipformer_p_arabic_v3.1.ptPyTorch weights.
tokens.txtThe symbol table. Decode with it: the raw unit ids are offset by one against the output layer.

Known limits

Measured, not hypothetical. From the model card.

  1. 1

    It hears the rule, not always the slip.

    Trained almost entirely on correct recitation, it tends to write the rule when a reciter deviates. It reported full ikhfa for 81 of 94 clips where people heard a plain noon. Don't use it alone to judge ikhfa or similar contrasts.

  2. 2

    Free-choice madd lengths are unreliable in the output.

    Labels fixed munfasil and ʿarid at 4 harakat while reciters may choose 2, 4 or 6. v3.1 retunes this; grade durations from forced-alignment timing, not from the symbols.

  3. 3

    Children are its weakest region.

    Reciters under 12 score 2 to 3 times worse than adults on qdat_bench.

  4. 4

    Chunk size depends on the audio.

    On recitation, streaming chunks of 16 or 24 frames match full context. On other audio, full context is about 2 PER points better.

Research