Skip to content
runonweb

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

Pick a language, then a clip, record, or upload

Language

Try with

Transcript

Transcript will appear here…

What it does

Transcribe audio without a server.

  • English-only by default. Pass model (e.g. onnx-community/whisper-tiny) and language (es, ja…) for a multilingual Whisper variant. Without language, tiny often guesses English and the transcript comes out translated. The live demo always uses task: "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" (or true) 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. Omit timestamps and chunks is empty.
  • Pass onPartial to receive words as they are generated.

Specifications

Package
runonweb/stt
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 runonweb
runonweb/sttts
import { 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.