Scan: OCR
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
Model size
Drop an image here
or click · PNG JPG WEBP
Text
What it does
Read text from any photo. Pick the size.
- Default size is
small(~31 MB): the best size/quality trade-off. Passtiny(~6 MB) ormedium(~139 MB). smallandmediumcover 50 languages (Chinese, English, Japanese, Latin).tinyis Chinese + English.- Each line comes back with a box and a confidence score.
Specifications
- Package
- runonweb/ocr
- Base model
- PP-OCRv6 · PaddlePaddle
- 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 runonwebimport { 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.
Which model does Scan use?
PP-OCRv6 by PaddlePaddle, under Apache-2.0. runonweb loads the PaddlePaddle/PP-OCRv6_small_det_onnx weights and runs fp32 on WebGPU · fp32 on WASM.
How big is the Scan download?
~31 MB (small) · tiny ~6 MB · medium ~139 MB, fetched once on first use. The browser caches the weights, so later loads skip the network and keep working offline.
What does Scan 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 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.