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/firefoxChrome: chrome://extensions → enable Developer mode → Load 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-firefox → Load Temporary Add-on → build/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
DUPLICATEmean the document didn't actually advance.
Resources
- GitHub: thiagotigaz/ocr-it (MIT)
- Chrome Web Store: install
- Firefox Add-ons: install
- OCR benchmark: results