Image to Text reads printed text out of images, screenshots, and scanned PDFs, and hands you back something you can select, edit, and paste: receipts, whiteboard photos, error dialogs, old scanned letters, contracts. The reading itself happens on your device: the recognition engine downloads once, a little over 31 MB, and after that the tool keeps working with your internet turned off. Nothing about the image you feed it is sent anywhere, at any point.
| Screenshots & photos | PNG, JPG, WEBP, BMP, and GIF (only the first frame of an animated GIF gets read). HEIC works too, but only if your own browser can decode HEIC: Safari usually can, Chrome and Firefox usually can't. |
| Scanned PDFs | Any page count, read one page at a time. Pages that already contain a real text layer are pulled out directly instead of recognized (see below). |
| Clipboard | Paste an image anywhere in the app with Ctrl+V (⌘V on Mac), no need to save it first. |
| Batches | Any number of files in one run. There's no file-count or page limit built into the tool. |
The PDF handling is the part worth explaining. Before a page ever touches the recognition engine, it's checked for a real text layer: more than roughly 200 characters of actual, selectable text on the page (or a document that averages more than 20 characters a page) counts as already-text, and that page's content gets read straight out of the PDF: instant and exact, no recognition involved. This check runs page by page, so a 40-page contract with one scanned signature page tacked onto the end only actually recognizes that one page. Pages that do need recognition are rendered at roughly 200-DPI-equivalent resolution, capped at 2,560 pixels on the longest side, and accuracy doesn't measurably improve past that scale, and memory use grows with the square of the resolution. Only one page's image is ever held in memory at a time, which is why a 300-page scan behaves the same as a 3-page one instead of slowing to a crawl or running out of memory.
Drop images or scanned PDFs onto the page, or press Ctrl+V (⌘V on Mac) to paste a screenshot straight from your clipboard. Paste works from anywhere in the app, not just one drop zone.
The engine reads each page using whichever language packs you've ticked (English plus around fifty other languages are on by default). PDFs stream results in as pages finish, so you can start reading page 1 while page 7 is still being recognized.
Image and extracted text sit side by side: click a line of text to see exactly which box on the image it came from. Anything the recognizer scored below 0.85 confidence gets an amber underline, so you know what's actually worth a second look instead of guessing.
Copy everything to the clipboard, or download .txt, .md, or one .csv per detected table. A batch of files zips into a single download; a multi-page PDF stitches into one document with "--- page 4 ---" markers between pages.
Most OCR tools either guess the language automatically or make you commit to one before you start. This one does something blunter: every language you tick gets tried on every page, and whichever attempt actually produces the most text at the highest confidence wins, not a language the tool "detected," but the pass that empirically read best. Tick two languages and a page roughly takes twice as long to read; tick three and it's roughly triple. That's worth it when you genuinely don't know what's in a stack of scanned mail. It's wasted time if you already know every file in the batch is in English.
The default pack (English plus roughly fifty other European languages, and, because of how its word list happens to be built, Chinese and Japanese as well) covers most people without ever opening the language picker. Korean, Russian/Ukrainian/Belarusian, Hindi/Marathi/Nepali, and Thai are separate downloads, roughly 8–14 MB each, fetched the first time you tick them. Right-to-left scripts like Arabic aren't supported yet: the logic that puts recognized lines back into reading order is left-to-right only today. Vietnamese technically runs, but its word list doesn't carry tone-marked vowels, so diacritics won't survive.
There's no dedicated table model running today: what you get is geometry. If recognized line boxes line up into at least two aligned columns across at least three rows, the tool guesses it's a table and offers a "copy as CSV" action. That works well on a clean receipt or a simple price list. It breaks on merged cells, wrapped text inside a cell, or a borderless table where nothing lines up cleanly, so a heuristic table never gets folded automatically into a Markdown export; you have to pull the CSV yourself and check it. A mode that reads document structure directly, instead of inferring it from box positions, is already visible in the language-picker screen: grayed out, labeled "coming soon," because it isn't finished rather than because it's being hidden from you.
Built and maintained by CloudlessKit, an independent, ad-supported set of browser tools.
Related reading: How to copy text from a screenshot or photo.