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-smallbyclients/android/scripts/export_whisper_all_in_one_onnx.py(the fused beam-search graph, viamicrosoft/onnxruntime'sconvert_to_onnx.py) andexport_whisper_processing_onnx.py(the pre/post-processing graphs, viaonnxruntime_extensions.gen_processing_models). - NLLB encoder/decoder are the
optimumint8 export republished fromKj0rdan/eazyspk-nllb-200-distilled-600M-int8; the tokenizer/detokenizer graphs are built from NLLB'ssentencepiece.bpe.modelbyexport_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).