Photo to Searchable PDF — OCR Scanner, No Upload

Take a photo of a document, receipt, or notes → straighten & clean it right here → OCR extracts the text layer → download a searchable PDF you can Ctrl+F inside. Nothing leaves your device.

1 Add photo(s)
2 Crop & clean
3 OCR
4 Download PDF

Step 1 — Add photo(s)

📷
Drop photos here or click to browse
JPEG · PNG · WebP · HEIC (if browser supports) — multiple OK

Step 2 — Perspective crop & shadow removal

Drag the blue handles to the four corners of the document. Adjust brightness, contrast, and shadow removal as needed. Then click Apply & Run OCR.

Processing page 1 of 1:

200
+10
+20

Step 3 — OCR in progress

Initializing Tesseract.js…

Step 4 — Download your searchable PDF

Ready
document.pdf

The PDF contains the image on each page with an invisible text layer above it, so Cmd/Ctrl+F search, copy-paste, and screen readers all work.

How it works

1
Photo → Canvas Your image is loaded into a browser canvas. Nothing is uploaded. HEIC files are decoded if your browser supports them (Safari / iOS do natively).
2
Perspective crop Drag four corner handles to match the document corners. A perspective transform (homography) maps those four points to a flat rectangle, removing keystoning from photos taken at an angle.
3
Shadow removal A per-pixel filter raises dark-background areas toward white while leaving ink-dark pixels dark — simulating "adaptive threshold" to flatten uneven lighting and coffee-shop shadow.
4
Tesseract.js OCR The cleaned image is passed to Tesseract.js (the industry-standard OCR engine, compiled to WebAssembly). It returns each word with its bounding box on the image.
5
pdf-lib overlay pdf-lib creates a PDF page, embeds the cleaned image (JPEG-compressed), then draws each OCR word as invisible text (opacity 0) scaled to match its bounding box. The result is a fully searchable PDF.
6
Zero upload All steps run client-side in WebAssembly and JavaScript. Your photos never leave your browser tab.

Frequently asked questions

Will it work offline?
On first use, the browser downloads Tesseract.js and its English language data (~10 MB) from a CDN. After that the page can work offline if you keep the tab open. The language data is cached by your browser — subsequent uses in the same browser are instant.
What makes this PDF "searchable"?
A standard image-only PDF is just a picture — you cannot select or search text in it. This tool adds an invisible text layer that exactly overlays the image. PDF readers (Adobe, Preview, Chrome PDF viewer, etc.) index that layer, so Cmd/Ctrl+F finds words, and you can drag-select and copy text out. The document still looks like your original photo; only the searchability changes.
How accurate is the OCR?
Tesseract.js uses Tesseract 4's LSTM neural network engine, which achieves around 90–97% character accuracy on clear, printed English text. Accuracy drops for very small fonts, handwriting, non-Latin scripts (it defaults to English — see the language hint below the OCR card), heavily shadowed photos, or extreme angles. The perspective-crop and shadow-removal steps are specifically designed to maximize Tesseract accuracy before recognition runs.
Can I process multiple pages into one PDF?
Yes — add multiple photos in Step 1. Each photo becomes its own page. After OCR runs on a page, click "Next page" to move to the next. When all pages are done, click "Build PDF" to merge all pages into a single multi-page searchable PDF file.
What happens to my photos and the text extracted?
Nothing is transmitted to any server. The images stay in your browser's memory (JavaScript heap) for the duration of the session and are discarded when you close the tab. No analytics, no third-party tracking on the image content — only standard CDN requests for the Tesseract.js library itself.