Scribe: Speech-to-Text
Transcribe audio to text entirely in the browser. Record from the mic or drop a file. Nothing is uploaded, nothing is billed per minute.
Try Scribe
Runs in this tab · nothing uploaded
Language
Transcript
What it does
Transcribe audio without a server.
- English-only by default. Pass
model(e.g.onnx-community/whisper-tiny) andlanguage(es,ja…) for a multilingual Whisper variant. Withoutlanguage, tiny often guesses English and the transcript comes out translated. The live demo always usestask: "transcribe"and lets you pick the language. - WebGPU is several times faster; WASM works everywhere else.
- Audio is decoded and resampled to 16 kHz mono in the browser.
- Pass
timestamps: "segment"for each phrase with the model's start and end, in seconds."word"(ortrue) splits those phrases into words and keeps every word inside its phrase. This ONNX Whisper has no cross-attentions, so it cannot time a word on its own. Omittimestampsandchunksis empty. - Pass
onPartialto receive words as they are generated.
Specifications
- Package
- runonweb/stt
- Base model
- Whisper tiny.en · OpenAI
- License
- Apache-2.0
- Download
- ~154 MB / ~44 MB
- Quantization
- fp32 on WebGPUq8 on WASM
- Backend
- WebGPUWASM fallback
- Input
- Audio
Get started with runonweb/stt
pnpm add runonwebimport { SpeechToText } from 'runonweb/stt'
const stt = new SpeechToText({
onProgress: (info) => console.log(info.status, info.progress),
})
await stt.load()
// Blob, File, URL string, or Float32Array (16 kHz mono)
const { text, chunks } = await stt.transcribe(audioBlob, {
timestamps: 'word',
onPartial: (partial) => console.log(partial),
})
console.log(text, chunks[0])
stt.dispose()Same shape everywhere: construct, load(), run, dispose(). Pass onProgressto show download progress on first use.
Questions about Scribe
Does Scribe run on device?
Yes. Weights download once and stay in the browser. Nothing is sent to a server.
Which model does Scribe use?
Whisper tiny.en by OpenAI, under Apache-2.0. runonweb loads the onnx-community/whisper-tiny.en weights and runs fp32 on WebGPU · q8 on WASM.
How big is the Scribe download?
~154 MB / ~44 MB, fetched once on first use. The browser caches the weights, so later loads skip the network and keep working offline.
What does Scribe cost?
Nothing. runonweb is free and MIT-licensed, with no device limits, tokens or sign-in. The weights keep their own license: Apache-2.0.
Which browsers support Scribe?
Chromium browsers use WebGPU. Firefox and Safari fall back to WebAssembly automatically, slower but identical output.
Can I use a different model with runonweb/stt?
Yes. See each module’s docs for the options it accepts (model, size, language…). Check the license and test both backends before shipping.