Instructions to use skillsafe-ai/whisper-base with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers.js
How to use skillsafe-ai/whisper-base with Transformers.js:
// npm i @huggingface/transformers import { pipeline } from '@huggingface/transformers'; // Allocate pipeline const pipe = await pipeline('automatic-speech-recognition', 'skillsafe-ai/whisper-base');
Whisper base speech-to-text (encoder + decoder, transformers.js)
Browser-ready import artifacts for automatic-speech-recognition, produced by SkillSafe's
reproducible converter (models/ in skillsafe.ai)
from a pinned upstream source. Every byte here is derivable from that source plus
the recipe below; nothing was edited by hand.
Provenance
| Upstream | https://huggingface.co/onnx-community/whisper-base/tree/1846881b6b3a3024392c1eea3ad983695bc23925 |
| Upstream SHA-256 / commit | 1846881b6b3a3024392c1eea3ad983695bc23925 |
| Recipe | recipes/whisper-base.yaml β sha256 7b6e7e83a7b4704bb97d2b8d671f9a39ee5f88dbe43b96d47dc2ceecd943f41b |
| Toolchain | Python 3.12.13, torch 2.10.0, onnx 1.23.0, onnxruntime 1.30.0 on Darwin 25.6.0 arm64 |
| Converted | 2026-09-22T20:45:00+00:00 |
Files
| file | class | size | SHA-256 |
|---|---|---|---|
added_tokens.json |
bundle | 0.03 MB | 9715fd2243b6f06a5858b5e32950d2853f73dd5bc201aafcf76f5082a2d8acd1 |
config.json |
bundle | 0.00 MB | f4d0608f7d918166da7edb3e188de5ef1bfe70d9802e785d271fd88111e9cf4b |
generation_config.json |
bundle | 0.00 MB | 61070cf8de25b1e9256e8e102ded49d8d24a8369ed36ef84fdf21549e68125a0 |
merges.txt |
bundle | 0.47 MB | 2df2990a395e35e8dfbc7511e08c12d56018d8d04691e0133e5d63b21e154dc6 |
normalizer.json |
bundle | 0.05 MB | bf1c507dc8724ca9cf9903640dacfb69dae2f00edee4f21ceba106a7392f26dd |
onnx/decoder_model_merged.onnx |
registry (fp32) | 198.86 MB | 514903744bb1b45803ec571af99b31110491c6f77b0a154825866995fb124b73 |
onnx/decoder_model_merged_fp16.onnx |
registry (fp16) | 99.88 MB | 2078fb08b753e3a74120e6a52446eef1b98f6152d1da43658731367a93fd71a4 |
onnx/decoder_model_merged_quantized.onnx |
registry (q8) | 51.21 MB | fa3ef9902734ce5ae6f9ef2bdb2ba9a6c4b5785b09f4f420ce036573dc9d090b |
onnx/encoder_model.onnx |
registry (fp32, q8) | 78.65 MB | a9f3b752833b49e880dec91ee5b6d936112be7c3ea07c221024ba493439f46fe |
onnx/encoder_model_fp16.onnx |
registry (fp16) | 39.42 MB | ffba51b20185377c1b89362b1128148d0132de936a32b200af973da2a11a5369 |
preprocessor_config.json |
bundle | 0.00 MB | a6a76d28c93edb273669eb9e0b0636a2bddbb1272c3261e47b7ca6dfdbac1b8d |
special_tokens_map.json |
bundle | 0.00 MB | e67ae3a0aaa99abcd9f187138e12db1f65c16a14761c50ef10eef2c174a7a691 |
tokenizer.json |
bundle | 2.37 MB | 27fc476bfe7f17299480be2273fc0608e4d5a99aba2ab5dec5374b4482d1a566 |
tokenizer_config.json |
bundle | 0.27 MB | 2e036e4dbacfdeb7242c7d4ec4149f4a16e86026048f94d1637e3a8ee9c6a573 |
vocab.json |
bundle | 0.99 MB | 50d6a919f0a0601d56a04eb583c780d18553aa388254ba3158eb6a00f13e2c1a |
registry files are parameter files served from models.skillsafe.ai once vetted;
bundle files ship inside an app; registry-shared is a runtime library reused by
every model of the same architecture.
Verification
Imported as published upstream (no conversion). Each file is pinned by SHA-256 to its source; every ONNX file passed onnx.checker and a CPU smoke run under onnxruntime with zero-filled inputs at the declared shapes:
| file | inputs | outputs | ms |
|---|---|---|---|
onnx/decoder_model_merged.onnx |
input_ids[1, 4], encoder_hidden_states[1, 1500, 512], past_key_values.0.decoder.key[1, 8, 1, 64], past_key_values.0.decoder.value[1, 8, 1, 64], past_key_values.0.encoder.key[1, 8, 1500, 64], past_key_values.0.encoder.value[1, 8, 1500, 64], past_key_values.1.decoder.key[1, 8, 1, 64], past_key_values.1.decoder.value[1, 8, 1, 64], past_key_values.1.encoder.key[1, 8, 1500, 64], past_key_values.1.encoder.value[1, 8, 1500, 64], past_key_values.2.decoder.key[1, 8, 1, 64], past_key_values.2.decoder.value[1, 8, 1, 64], past_key_values.2.encoder.key[1, 8, 1500, 64], past_key_values.2.encoder.value[1, 8, 1500, 64], past_key_values.3.decoder.key[1, 8, 1, 64], past_key_values.3.decoder.value[1, 8, 1, 64], past_key_values.3.encoder.key[1, 8, 1500, 64], past_key_values.3.encoder.value[1, 8, 1500, 64], past_key_values.4.decoder.key[1, 8, 1, 64], past_key_values.4.decoder.value[1, 8, 1, 64], past_key_values.4.encoder.key[1, 8, 1500, 64], past_key_values.4.encoder.value[1, 8, 1500, 64], past_key_values.5.decoder.key[1, 8, 1, 64], past_key_values.5.decoder.value[1, 8, 1, 64], past_key_values.5.encoder.key[1, 8, 1500, 64], past_key_values.5.encoder.value[1, 8, 1500, 64], use_cache_branch[1] | logits[1, 4, 51865], present.0.decoder.key[1, 8, 4, 64], present.0.decoder.value[1, 8, 4, 64], present.0.encoder.key[1, 8, 1500, 64], present.0.encoder.value[1, 8, 1500, 64], present.1.decoder.key[1, 8, 4, 64], present.1.decoder.value[1, 8, 4, 64], present.1.encoder.key[1, 8, 1500, 64], present.1.encoder.value[1, 8, 1500, 64], present.2.decoder.key[1, 8, 4, 64], present.2.decoder.value[1, 8, 4, 64], present.2.encoder.key[1, 8, 1500, 64], present.2.encoder.value[1, 8, 1500, 64], present.3.decoder.key[1, 8, 4, 64], present.3.decoder.value[1, 8, 4, 64], present.3.encoder.key[1, 8, 1500, 64], present.3.encoder.value[1, 8, 1500, 64], present.4.decoder.key[1, 8, 4, 64], present.4.decoder.value[1, 8, 4, 64], present.4.encoder.key[1, 8, 1500, 64], present.4.encoder.value[1, 8, 1500, 64], present.5.decoder.key[1, 8, 4, 64], present.5.decoder.value[1, 8, 4, 64], present.5.encoder.key[1, 8, 1500, 64], present.5.encoder.value[1, 8, 1500, 64] | 9.9 |
onnx/decoder_model_merged_fp16.onnx |
input_ids[1, 4], encoder_hidden_states[1, 1500, 512], past_key_values.0.decoder.key[1, 8, 1, 64], past_key_values.0.decoder.value[1, 8, 1, 64], past_key_values.0.encoder.key[1, 8, 1500, 64], past_key_values.0.encoder.value[1, 8, 1500, 64], past_key_values.1.decoder.key[1, 8, 1, 64], past_key_values.1.decoder.value[1, 8, 1, 64], past_key_values.1.encoder.key[1, 8, 1500, 64], past_key_values.1.encoder.value[1, 8, 1500, 64], past_key_values.2.decoder.key[1, 8, 1, 64], past_key_values.2.decoder.value[1, 8, 1, 64], past_key_values.2.encoder.key[1, 8, 1500, 64], past_key_values.2.encoder.value[1, 8, 1500, 64], past_key_values.3.decoder.key[1, 8, 1, 64], past_key_values.3.decoder.value[1, 8, 1, 64], past_key_values.3.encoder.key[1, 8, 1500, 64], past_key_values.3.encoder.value[1, 8, 1500, 64], past_key_values.4.decoder.key[1, 8, 1, 64], past_key_values.4.decoder.value[1, 8, 1, 64], past_key_values.4.encoder.key[1, 8, 1500, 64], past_key_values.4.encoder.value[1, 8, 1500, 64], past_key_values.5.decoder.key[1, 8, 1, 64], past_key_values.5.decoder.value[1, 8, 1, 64], past_key_values.5.encoder.key[1, 8, 1500, 64], past_key_values.5.encoder.value[1, 8, 1500, 64], use_cache_branch[1] | logits[1, 4, 51865], present.0.decoder.key[1, 8, 4, 64], present.0.decoder.value[1, 8, 4, 64], present.0.encoder.key[1, 8, 1500, 64], present.0.encoder.value[1, 8, 1500, 64], present.1.decoder.key[1, 8, 4, 64], present.1.decoder.value[1, 8, 4, 64], present.1.encoder.key[1, 8, 1500, 64], present.1.encoder.value[1, 8, 1500, 64], present.2.decoder.key[1, 8, 4, 64], present.2.decoder.value[1, 8, 4, 64], present.2.encoder.key[1, 8, 1500, 64], present.2.encoder.value[1, 8, 1500, 64], present.3.decoder.key[1, 8, 4, 64], present.3.decoder.value[1, 8, 4, 64], present.3.encoder.key[1, 8, 1500, 64], present.3.encoder.value[1, 8, 1500, 64], present.4.decoder.key[1, 8, 4, 64], present.4.decoder.value[1, 8, 4, 64], present.4.encoder.key[1, 8, 1500, 64], present.4.encoder.value[1, 8, 1500, 64], present.5.decoder.key[1, 8, 4, 64], present.5.decoder.value[1, 8, 4, 64], present.5.encoder.key[1, 8, 1500, 64], present.5.encoder.value[1, 8, 1500, 64] | 18.5 |
onnx/decoder_model_merged_quantized.onnx |
input_ids[1, 4], encoder_hidden_states[1, 1500, 512], past_key_values.0.decoder.key[1, 8, 1, 64], past_key_values.0.decoder.value[1, 8, 1, 64], past_key_values.0.encoder.key[1, 8, 1500, 64], past_key_values.0.encoder.value[1, 8, 1500, 64], past_key_values.1.decoder.key[1, 8, 1, 64], past_key_values.1.decoder.value[1, 8, 1, 64], past_key_values.1.encoder.key[1, 8, 1500, 64], past_key_values.1.encoder.value[1, 8, 1500, 64], past_key_values.2.decoder.key[1, 8, 1, 64], past_key_values.2.decoder.value[1, 8, 1, 64], past_key_values.2.encoder.key[1, 8, 1500, 64], past_key_values.2.encoder.value[1, 8, 1500, 64], past_key_values.3.decoder.key[1, 8, 1, 64], past_key_values.3.decoder.value[1, 8, 1, 64], past_key_values.3.encoder.key[1, 8, 1500, 64], past_key_values.3.encoder.value[1, 8, 1500, 64], past_key_values.4.decoder.key[1, 8, 1, 64], past_key_values.4.decoder.value[1, 8, 1, 64], past_key_values.4.encoder.key[1, 8, 1500, 64], past_key_values.4.encoder.value[1, 8, 1500, 64], past_key_values.5.decoder.key[1, 8, 1, 64], past_key_values.5.decoder.value[1, 8, 1, 64], past_key_values.5.encoder.key[1, 8, 1500, 64], past_key_values.5.encoder.value[1, 8, 1500, 64], use_cache_branch[1] | logits[1, 4, 51865], present.0.decoder.key[1, 8, 4, 64], present.0.decoder.value[1, 8, 4, 64], present.0.encoder.key[1, 8, 1500, 64], present.0.encoder.value[1, 8, 1500, 64], present.1.decoder.key[1, 8, 4, 64], present.1.decoder.value[1, 8, 4, 64], present.1.encoder.key[1, 8, 1500, 64], present.1.encoder.value[1, 8, 1500, 64], present.2.decoder.key[1, 8, 4, 64], present.2.decoder.value[1, 8, 4, 64], present.2.encoder.key[1, 8, 1500, 64], present.2.encoder.value[1, 8, 1500, 64], present.3.decoder.key[1, 8, 4, 64], present.3.decoder.value[1, 8, 4, 64], present.3.encoder.key[1, 8, 1500, 64], present.3.encoder.value[1, 8, 1500, 64], present.4.decoder.key[1, 8, 4, 64], present.4.decoder.value[1, 8, 4, 64], present.4.encoder.key[1, 8, 1500, 64], present.4.encoder.value[1, 8, 1500, 64], present.5.decoder.key[1, 8, 4, 64], present.5.decoder.value[1, 8, 4, 64], present.5.encoder.key[1, 8, 1500, 64], present.5.encoder.value[1, 8, 1500, 64] | 8.9 |
onnx/encoder_model.onnx |
input_features[1, 80, 3000] | last_hidden_state[1, 1500, 512] | 71.7 |
onnx/encoder_model_fp16.onnx |
input_features[1, 80, 3000] | last_hidden_state[1, 1500, 512] | 110.2 |
Use in the browser
import * as ort from "onnxruntime-web";
const session = await ort.InferenceSession.create("https://huggingface.co/skillsafe-ai/whisper-base/resolve/main/onnx/decoder_model_merged.onnx", { executionProviders: ["webgpu", "wasm"] });
Contract (onnx/decoder_model_merged.onnx): input input_ids int64 ['batch_size', 'decoder_sequence_length'], encoder_hidden_states float32 ['batch_size', 'encoder_sequence_length / 2', 512], past_key_values.0.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.0.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.0.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.0.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.1.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.1.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.1.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.1.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.2.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.2.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.2.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.2.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.3.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.3.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.3.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.3.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.4.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.4.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.4.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.4.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.5.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.5.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length', 64], past_key_values.5.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], past_key_values.5.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], use_cache_branch bool [1] β output logits float32 ['batch_size', 'decoder_sequence_length', 51865], present.0.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.0.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.0.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.0.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.1.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.1.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.1.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.1.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.2.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.2.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.2.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.2.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.3.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.3.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.3.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.3.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.4.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.4.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.4.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.4.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.5.decoder.key float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.5.decoder.value float32 ['batch_size', 8, 'past_decoder_sequence_length + 1', 64], present.5.encoder.key float32 ['batch_size', 8, 'encoder_sequence_length_out', 64], present.5.encoder.value float32 ['batch_size', 8, 'encoder_sequence_length_out', 64]. Opset 14.
Licence and attribution
Whisper base: Copyright 2022 OpenAI, Apache License 2.0 (https://github.com/openai/whisper); ONNX export by onnx-community (https://huggingface.co/onnx-community/whisper-base).
Licence: Apache-2.0 β notice: https://github.com/openai/whisper/blob/main/LICENSE. The conversion recipe and this model card are part of the SkillSafe repository and carry its licence; the weights remain under the upstream licence above.
The full manifest.json in this repo records the recipe, sources, toolchain
(including the uv.lock hash) and per-file verification numbers.
- Downloads last month
- 161