PDF OCR — Searchable Scans
A scanned PDF is a photo album pretending to be a document: it looks right and finds nothing. This adds the missing text layer — invisible words placed exactly over the scanned ones — so search, select and copy work, while the scan itself stays untouched.
🔒 Your scan never leaves your browser. The OCR engine (Tesseract) runs as WebAssembly on your machine; contracts and statements are exactly the files that should not go to a server for this.
Drop a scanned PDF here
English text · ≈6 MB engine loads on first use · expect a few seconds per page
An overlay, not a rewrite
The recognised words are written as an invisible text layer (PDF text rendering mode 3) on top of each scanned page, sized and positioned from the word boxes the recogniser reports. The page images are byte-for-byte what they were — a wrong guess by the OCR engine can make a search miss, but it can never corrupt what you see. Pages that already have text are skipped entirely, because overlaying them would double every search hit.
Honest numbers instead of magic
OCR quality tracks scan quality, so the result reports what actually happened: how many pages got a text layer, how many words were recognised, and the mean confidence. Low-confidence words are kept — a shaky match that makes a document findable beats a clean blank — and the number tells you how much to trust it. Recognition is English-only for now; other languages are a model file away and will say so on this page when they land.
Before and after this tool
Encrypted scans need unlocking first (also local). Big scan files stay big after OCR — the text layer adds almost nothing — so if the file needs to be emailed, compress it after making it searchable. Agent access (MCP) for OCR is not offered yet: rendering PDF pages outside a browser needs a native canvas we are not willing to require — the honest state of that work is documented, not hidden.
Every behaviour this tool commits to (4 rules)
OCR-001 Pages that already have text are left alone
A page with an existing text layer is already searchable. Overlaying OCR text on top would double every search hit, so such pages are skipped and reported — not re-recognised.
Source: yaktool engineering rule for this OCR overlay; the recogniser is Tesseract (tessdata_fast English model).
OCR-002 Low-confidence words are written too
The overlay keeps every recognised word, including uncertain ones — a shaky match that makes a document findable beats a clean blank. The mean confidence is reported so you know how shaky.
Source: yaktool engineering rule for this OCR overlay; the recogniser is Tesseract (tessdata_fast English model).
OCR-003 Pages that failed are listed, not skipped silently
A page that could not be rendered or recognised is named in the result. The output file still contains the page — just without a text layer for it.
Source: yaktool engineering rule for this OCR overlay; the recogniser is Tesseract (tessdata_fast English model).
OCR-004 English model only, for now
Recognition uses the English tessdata_fast model. Other languages are a data file away, not a code change — but shipping one language honestly beats shipping twelve badly.
Source: yaktool engineering rule for this OCR overlay; the recogniser is Tesseract (tessdata_fast English model).
Engine: Tesseract via tesseract-wasm (BSD-2-Clause), English tessdata_fast model (Apache-2.0), both loaded on first use. Recognition quality varies with scan quality; the confidence figure is the engine's own, reported as-is.