Read the text out of a screenshot, without uploading it
Detection and recognition both run in this tab, on the PP-OCRv6 models, through onnxruntime-web compiled to WebAssembly. Your image is never sent anywhere — there is no upload step and no server in the recognition path. It works offline once the models are loaded.
The PP-OCRv6_tiny weights ship with the app — about 6 MB, loaded once when you open the page and then cached by your browser. Nothing to download, no sign-in, and the models are the publisher's own bytes, unmodified.
Free, and it works signed out: recognition itself, the per-line confidence score for every line, the bounding boxes, a filter for just the low-confidence lines, the diagnostics panel, and every export — text, CSV, JSON and Markdown. Only the optional repair-and-structure pass in step 4 is metered: it needs a signed-in account with credits, and it is reconciled against the local recogniser so it cannot quietly invent a character the recogniser never produced.
1 · The engine
loading…Loading the PP-OCRv6 models…
Detection 1.7 MB, recognition 4.3 MB, plus the 6,904-entry character dictionary. It runs in this tab; nothing is uploaded.
Use a different model package (advanced)
The bundled models are PP-OCRv6_tiny. To run a different PP-OCR package —
small, medium, or one you fine-tuned — drop its files here:
the detection .onnx, the recognition .onnx, and the
recognition inference.yml that carries the character dictionary. Names do
not matter; each file is identified by its graph shape, and the thresholds, channel
order and dictionary are all read out of the package itself rather than assumed.
Drop a model package here
or ·
small and medium use a different detection head and a larger
dictionary. Both load, but they are slower, and the post-processing here is tuned for
tiny.
Offline copy of the engine
The engine is about 20 MB — a 13.5 MB WebAssembly runtime and 6.2 MB of weights — and this site's assets are only cacheable for five minutes, so the app keeps its own verified copy in the browser's Cache Storage. That is what makes a reload instant instead of a fresh 20 MB download. Each entry is keyed and checked by its SHA-256, so a new release replaces it automatically and a damaged copy is re-fetched rather than used.
Checking the cache…
2 · The image
Drop a screenshot or photo here
or · paste with Ctrl/⌘+V · try a sample: · ·
3 · Recognised text
Diagnostics — what the models actually returned
4 · Repair and structure metered
Recognition gives you lines. This pass gives you a document: reading order fixed, split sentences rejoined, obvious character confusions corrected and flagged, and — if you ask for it — the values pulled out as JSON. It runs on the platform's model, so it costs credits, and the app checks its answer against what the recogniser actually produced.