Skip to content
runonweb

OCR

Scan

Extract printed and scene text in the browser. Three sizes (tiny, small, medium) so you can trade a few megabytes for accuracy. Nothing is uploaded.

Try Scan

Runs in this tab · nothing uploaded

Pick a size, then a sample or photo. It reads right away

Model size

Try with

Drop an image here

or click · PNG JPG WEBP

What it does

Read text from any photo. Pick the size.

  • Default size is small (~31 MB): the best size/quality trade-off. Pass tiny (~6 MB) or medium (~139 MB).
  • small and medium cover 50 languages (Chinese, English, Japanese, Latin). tiny is Chinese + English.
  • Each line comes back with a box and a confidence score.

Specifications

Package
runonweb/ocr
License
Apache-2.0
Download
~31 MB (small)tiny ~6 MBmedium ~139 MB
Quantization
fp32 on WebGPUfp32 on WASM
Backend
WebGPUWASM fallback
Input
Image

Get started with runonweb/ocr

pnpm add runonweb
runonweb/ocrts
import { OCR } from 'runonweb/ocr'

const ocr = new OCR({
  size: 'small', // tiny | small | medium
  onProgress: (info) => console.log(info.status, info.progress),
})

await ocr.load()

const { text, lines } = await ocr.read(imageFile)
console.log(text)
// lines: [{ text, score, box: { xmin, ymin, xmax, ymax } }]

ocr.dispose()

Same shape everywhere: construct, load(), run, dispose(). Pass onProgressto show download progress on first use.

Questions about Scan

Does Scan run on device?

Yes. Weights download once and stay in the browser. Nothing is sent to a server.

What does Scan cost?

Nothing. runonweb is free and MIT-licensed, with no device limits, tokens or sign-in.

Which browsers support Scan?

Chromium browsers use WebGPU. Firefox and Safari fall back to WebAssembly automatically, slower but identical output.

Can I use a different model with runonweb/ocr?

Yes. See each module’s docs for the options it accepts (model, size, language…). Check the license and test both backends before shipping.