OCR Scanned PDFs to Text: Offline OCR It Guide

Scanned books and locked-down PDF viewers share the same problem: you can read them, but your LLM can't. No selectable text, no way to copy a paragraph, nothing to paste into Claude or ChatGPT. OCR It is a free, MIT-licensed Chrome/Firefox extension from the Firecrawl team that turns this around — you pin a screen region once, then hotkey your way through the whole document into a text transcript. It runs 100% offline on a bundled Tesseract build: no API key, no network, no outbound requests. Your document never leaves the machine.

Core idea: pin once, hotkey every page

Three hotkeys cover the entire workflow (on Windows/Linux, Alt replaces Option):

⌥⇧R   Draw / redraw the capture region
⌥⇧S   Capture the region once (OCR runs in the background)
⌥⇧A   Start / stop an automatic run (capture → turn → repeat)

Manual mode: press ⌥⇧R, drag a box over the text, nudge it pixel by pixel with the arrow keys (Shift+arrow resizes), hit Enter. Then press ⌥⇧S once per page. Captures are queued and OCR runs in the background, so you never wait between pages — the badge on the toolbar icon counts what's still being read.

Auto mode: ⌥⇧A takes over completely: screenshot, turn the page, repeat until the document ends. Esc on the page stops it. When you're done, Copy all or Download .txt emits the pages in order with --- page N --- separators — ready to hand to an LLM.

Page-turning that survives iframes and Shadow DOM

Most embedded readers are iframes — often cross-origin, sometimes wrapped in Shadow DOM — where a CSS selector can't reach. OCR It's trick: you store a point, not a selector. Hit Pick control and click the viewer's next-page button; what gets saved is the click location. A stored point survives the DOM re-renders that invalidate selectors, and at advance time it's offered to every frame — the one that actually owns it acts. Across an origin boundary the parent hands the offset down via postMessage. Alternatively you can dispatch a keyboard event (default ArrowRight) into whichever frame owns the middle of your region. Use Test now before starting a long run — it fires an advance immediately, without capturing.

Build it yourself

One source tree, two targets:

git clone https://github.com/thiagotigaz/ocr-it.git
cd ocr-it
npm run build          # -> build/chrome, build/firefox

Chrome: chrome://extensions → enable Developer modeLoad unpacked → select build/chrome (the repo root itself is a valid extension as checked in, so no build step is strictly required). Firefox: about:debugging#/runtime/this-firefoxLoad Temporary Add-onbuild/firefox/manifest.json. Everything needed is committed — npm install is only for tests and re-vendoring Tesseract.

After installing, check chrome://extensions/shortcuts: Chrome silently blanks a hotkey when another extension already claims it. Firefox has no navigable shortcut editor — use about:addons → gear icon → Manage Extension Shortcuts.

The extension asks for no site access at install. Single captures ride on activeTab; a durable grant is only requested when you enable an auto-run that outlives a page load or need to turn pages inside a cross-origin iframe — the popup offers an Allow button for the site you're on.

Where it shines — and where it doesn't

  • Great for: clean, simply laid-out pages — scanned books, slide decks, articles trapped in locked readers. The founder's benchmark claims roughly 20ms per page and ~300x faster than Docling at comparable quality; treat that as a headline number and verify on your own hardware.
  • Watch out for: pages that mix headers, footers, tables, math formulas and body paragraphs — complex layouts still trip it up. Draw the region a little inside the text margins so page numbers and running headers don't pollute the transcript.
  • Built-in guards: a run auto-stops when it sees two identical pages in a row (the document didn't turn), can't turn the page, hits OCR failure, or reaches the 300-page cap — a stuck run won't loop forever.
  • Built-in sanity checks: the popup lists every page with a thumbnail of exactly what was cropped, character count and OCR confidence, so a drifted region is obvious immediately instead of eighty pages later. Pages marked DUPLICATE mean the document didn't actually advance.

Resources

Leave a Comment

Scroll to top