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
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.
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.