Press Camera to take a photo right here, or choose one from your gallery. The text is read on your phone, shown next to the photo with a box around each line, and ready to copy into a message, note or document.
Nothing is uploaded. The image is read by a model that runs inside your browser, so it works for private documents and keeps working on a slow connection once the model is cached.
How to take a photo that reads well
Light first. Daylight or a bright room beats any camera. Avoid your own shadow across the page and the glare of a flash on glossy paper.
Straight and flat. Hold the phone parallel to the page and fill the frame with the text. A little tilt is fixed automatically; a page photographed at a steep angle or curling off a book spine is not.
Sharp. Tap the screen to focus before you capture. A blurry photo is the most common reason for wrong letters. On our test photos (slightly rotated, soft focus, JPEG) English still came out at 100.0%.
How to do it
- Pick the language of the text.
- Press Camera and allow camera access, or choose a photo you already took.
- Wait a moment while the photo is read (the first time also downloads the model).
- Fix anything in amber, then copy or download.
How accurate it is (measured, not claimed)
We render known text in each script as images in five styles: a clean screenshot, small 15 px text, a photo (rotated, soft focus, uneven light, JPEG), a dark-mode screenshot and a rough photo (low contrast, blurrier, more tilt, heavy JPEG). Each engine reads them in a browser, and we count the characters it gets right (100% minus the character error rate). The default engine for each script is the one with fewer character errors (within half a point, the one with more whole words right).
| Script | Engine | All | clean | small | photo | dark | rough | s / image |
|---|---|---|---|---|---|---|---|---|
| English | PaddleOCR PP-OCRv5default | 100.0% | 100.0% | 100.0% | 100.0% | 100.0% | 100.0% | 2.3 |
| English | Tesseract 5 | 99.6% | 100.0% | 100.0% | 99.6% | 100.0% | 98.4% | 0.7 |
| Other Latin languages | PaddleOCR PP-OCRv5default | 99.9% | 100.0% | 100.0% | 100.0% | 100.0% | 99.5% | 1.7 |
| Hindi | Tesseract 5default | 99.7% | 100.0% | 100.0% | 100.0% | 100.0% | 98.2% | 0.5 |
| Hindi | PaddleOCR PP-OCRv5 | 96.7% | 99.4% | 96.7% | 98.5% | 94.0% | 94.7% | 1.8 |
| Urdu (Nastaliq) | Tesseract 5default | 70.7% | 77.1% | 76.7% | 68.2% | 69.1% | 62.9% | 0.2 |
| Urdu (Nastaliq) | PaddleOCR PP-OCRv5 | 30.7% | 44.7% | 32.3% | 25.6% | 44.2% | 7.7% | 0.9 |
| Urdu (Naskh) | Tesseract 5default | 95.7% | 97.1% | 97.0% | 97.4% | 96.4% | 90.6% | 0.4 |
| Urdu (Naskh) | PaddleOCR PP-OCRv5 | 81.8% | 90.0% | 82.0% | 84.6% | 86.7% | 65.3% | 1.8 |
| Arabic | PaddleOCR PP-OCRv5default | 95.7% | 96.9% | 94.2% | 96.9% | 98.7% | 91.9% | 0.9 |
| Arabic | Tesseract 5 | 95.7% | 96.9% | 96.5% | 96.3% | 96.0% | 92.5% | 0.3 |
| Bengali | Tesseract 5default | 99.1% | 99.4% | 99.3% | 100.0% | 99.3% | 97.6% | 0.3 |
| Tamil | Tesseract 5default | 100.0% | 100.0% | 100.0% | 100.0% | 100.0% | 100.0% | 0.3 |
| Tamil | PaddleOCR PP-OCRv5 | 98.5% | 99.5% | 99.0% | 99.5% | 98.1% | 96.4% | 2.3 |
| Telugu | PaddleOCR PP-OCRv5default | 98.5% | 99.0% | 99.5% | 99.0% | 100.0% | 95.0% | 1.2 |
| Telugu | Tesseract 5 | 83.5% | 100.0% | 61.6% | 100.0% | 81.0% | 73.9% | 1.1 |
| Gujarati | Tesseract 5default | 98.9% | 100.0% | 100.0% | 100.0% | 100.0% | 94.7% | 1.2 |
| Punjabi | Tesseract 5default | 99.3% | 99.4% | 100.0% | 99.4% | 100.0% | 97.8% | 0.5 |
| Kannada | Tesseract 5default | 88.5% | 100.0% | 100.0% | 99.5% | 81.9% | 61.5% | 0.4 |
| Malayalam | Tesseract 5default | 96.3% | 95.1% | 99.0% | 95.1% | 99.0% | 93.7% | 0.3 |
Measured 2026-11-03 on Intel(R) Core(TM) i7-14700KF (28 threads), headless Chromium, no WebGPU adapter, cross-origin isolated. Real photos have not been validated for this tool. Generated images are easier than real photos of real paper, so treat these as a ceiling for printed text, not a promise. Tesseract was partly trained on font-rendered text, which may flatter it on generated images. The test text and the script that draws the images are in the project repository.
Private by design
The image is read by an open-source model that runs in your browser (PaddleOCR or Tesseract, both Apache-2.0). It downloads once, about 12 MB for most scripts, and is cached for next time. Your images, the text and your downloads stay on your device: there is no upload, no account and no log of what you read.
Questions people ask
Are my images uploaded to a server?
No. The reading model is downloaded to your browser once and runs on your own phone or computer. The image, the text and the files you download never leave your device. You can switch off your internet after the model has loaded and it still works.
Is it free? Is there a limit?
It is free, with no sign-up, no watermark and no daily cap. Because your own device does the work, there is no server cost for us to recover. Add as many images as you like; they are read one after another.
Which file types can I use?
PNG, JPG, WebP, GIF and BMP images, screenshots pasted with Ctrl+V, and photos from your camera. For a PDF, take a screenshot of the page or export it as an image first.
Why does it ask for the camera?
Only so you can take the photo inside the page. The video never leaves your phone. If you prefer, say no and choose a photo from your gallery instead.
Can I photograph several pages?
Yes. Take or choose them one after another; each joins the queue. Download them all as one Word file with a heading per photo.
Does it work offline?
After the first use, yes. The model is kept in your browser, so you can read photos with no signal.