How TextLens works
TextLens is a free, private OCR tool. It runs entirely in your browser as an installable PWA, recognizing text with the open-source Tesseract engine compiled to WebAssembly. Your files never leave your device.
Everything happens on your device
There is no server and no backend. When you load an image or PDF, your browser decodes it and runs the OCR engine locally. Nothing you upload is ever sent over the network. The site's Content-Security-Policy (connect-src 'self', plus only the public language-model CDN) even restricts which hosts the page may contact, so the privacy guarantee is enforced by the browser itself.
What about other languages?
English — the default — is bundled with the app, so English OCR works fully offline and never touches a network host. Other languages (Chinese, Japanese, Korean, Spanish, French, German) download their language model from the official Tesseract data CDN on first use, then cache it locally. That download is a plain GET of a generic public model file — your images and text are never uploaded to it.
HEIC photos from your iPhone
HEIC/HEIF photos are decoded in-browser by a WebAssembly build of libheif, then fed straight to OCR. No conversion step, no upload — your iPhone photos are recognized entirely on your device.
Scanned vs. text PDFs
For scanned or image-based PDFs, pdf.js renders each page to a canvas and Tesseract recognizes it. For PDFs that already contain a text layer, TextLens offers an instant native text extraction path that reads that layer directly — no OCR needed. Either way, the PDF stays on your device.
Offline-capable PWA
Install TextLens to your home screen or desktop. A service worker caches the app shell and the OCR engine, so English OCR keeps working with no internet connection at all.
No ads, no tracking, no account
There is no signup. This build ships with zero third-party scripts and a strict privacy policy. If monetization is added later, it will be environment-gated and off by default — the on-device privacy promise for your files is never traded away.