eazySpk — Android on-device ONNX model set

Every ONNX file the eazySpk Android client needs to run its speech-translation pipeline entirely on the phone: microphone → speech-to-text → translation → speech, with no backend and no network once these files are installed.

The app downloads these itself — open it, press Download models. This repo is the source it downloads from; the layout below is exactly the layout expected on the device.

whisper-small-fp32/
  whisper_preprocessor.onnx           raw WAV bytes  → log-mel input_features
  whisper-small-fp32.onnx              fused WhisperBeamSearch graph
  whisper-small_beamsearch.onnx.data   its external weights (name is load-bearing)
  whisper_postprocessor.onnx          token ids → text (BpeDecoder)
nllb-200-distilled-600M-int8/
  nllb_tokenizer.onnx                 text + language codes → input_ids
  nllb_detokenizer.onnx               ids → text
  encoder_model_quantized.onnx        NLLB-200-distilled-600M encoder (int8)
  decoder_model_quantized.onnx        NLLB-200-distilled-600M decoder (int8)

Total ≈ 2.13 GB.

Provenance

  • Whisper graphs are exported from openai/whisper-small by clients/android/scripts/export_whisper_all_in_one_onnx.py (the fused beam-search graph, via microsoft/onnxruntime's convert_to_onnx.py) and export_whisper_processing_onnx.py (the pre/post-processing graphs, via onnxruntime_extensions.gen_processing_models).
  • NLLB encoder/decoder are the optimum int8 export republished from Kj0rdan/eazyspk-nllb-200-distilled-600M-int8; the tokenizer/detokenizer graphs are built from NLLB's sentencepiece.bpe.model by export_nllb_tokenizer_onnx.py.

Verification

clients/android/scripts/verify_on_device_chain.py runs all seven graphs in sequence, exactly as the Kotlin providers drive them. On the standard LibriSpeech sample (ground truth "MISTER QUILTER IS THE APOSTLE OF THE MIDDLE CLASSES AND WE ARE GLAD TO WELCOME HIS GOSPEL"):

  • transcript: Mr. Quilter is the apostle of the middle classes, and we are glad to welcome his gospel. — exact
  • en→uk: Г-н Квільтер - апостол середнього класу, і ми раді вітати його Євангелію.

Why fp32 and not int8: the int8 export of whisper-small degenerates into a repeated token ("Mr Quilter then is then apostle Oh middle class then records records records..."), including when fed transformers' own reference features, so it isn't a wiring problem. whisper-small at fp32 is exact. (whisper-base at fp32 is exact on this sample too and less than half the size — see ModelCatalog.WHISPER_DIRECTORY for why small is shipped anyway.)

Licensed MIT, following the upstream models (openai/whisper-small, MIT; facebook/nllb-200-distilled-600M, CC-BY-NC-4.0 — note NLLB's non-commercial terms apply to its weights).

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support