Photo, scan or PDF → text, Markdown and JSON

Read in this tab with litert-ocr. Your files never leave this device.

Starting…

or drop a file here, or paste a screenshot

Examples:

What this page does

Photos and screenshots: every text line and its box, in reading order (worker.recognize(file)). PDFs, scans and the Markdown and JSON tabs: pages with a text layer are read from it, scanned pages by OCR, and the lines become headings, paragraphs, lists and tables (convert(file)). A PDF's page is shown with a frame around each heading, paragraph, list item and table that convert() found on it, colored by type; the arrows under the page turn the pages read.

Your files are read in this tab. The page downloads only the litert-ocr library, its LiteRT.js runtime and pdf.js from jsDelivr, and the model files from Hugging Face, once: about 80 MB over the network on the first visit (litert-ocr 0.1.0 in Chrome 155 on a Mac, 2026-10-22; 87 MB uncompressed, the size the status line shows). The browser keeps them. A page that is already open goes on reading with no network (tested in Chrome on a Mac and on an Android phone in airplane mode). Opening the page again with no network worked in Chrome on a Mac, not in Chrome on Android.

The time shown is from handing the file to the library to the result, with the model already loaded. PDFs are read up to 20 pages per file here.

Source and documentation · This page's code · litert-ocr 0.2.0