Initialising Workbench...
Extract text — or a Markdown table — from screenshots, scans, and photos entirely in your browser. The image is never uploaded.
Drop a file here or click to upload
PNG, JPG, WebP, BMP or GIF — or just paste a screenshot with Ctrl/⌘ + V
Extracted text will appear here once you run a scan.
Before reading a single character, Tesseract decides how the image is laid out — where the columns, blocks, lines, and words are. Picking the wrong mode is the most common reason output comes back garbled or with text missing.
Recognition runs in a Web Worker using the Tesseract WASM engine served from this site — nothing is uploaded and no third-party CDN is contacted.
The Image to Text (OCR) tool pulls readable, copyable text out of screenshots, scanned documents, and photographs — without uploading anything. It runs a WebAssembly build of the Tesseract OCR engine inside a Web Worker, so the image is processed on your own machine and the engine and language models are served from this site rather than a third-party CDN.
Drop in an image or paste a screenshot straight from the clipboard, pick one of twelve languages, and choose a page segmentation mode that matches the layout — automatic for full pages, single line or single word for tight crops, sparse text for scattered UI labels. Alongside the plain text you get per-word confidence scores with bounding boxes, plus hOCR and TSV exports when you need the positional data for downstream processing.
If the image contains a table, the Table tab turns it into a GitHub-flavored Markdown table. It reuses the word coordinates from the scan: words are grouped into rows by vertical overlap, and columns are found by locating the vertical whitespace no row writes into — so whitespace-aligned tables work just as well as ruled ones. Adjust the column gap if a table splits too eagerly or not enough, and hand the result to the Markdown Table Generator for alignment and further editing.
It is a practical fit for grabbing an error message out of a bug-report screenshot, lifting a config snippet from a slide, or digitising a scanned page. Results are strongest on clean, high-contrast, roughly horizontal text; angled photos, very low resolution, and handwriting remain hard for any OCR engine.
No. The OCR engine is a WebAssembly build of Tesseract that runs inside a Web Worker in your browser. The image is read from local memory and never sent anywhere — the engine and language models are served from this site itself, so not even a third-party CDN sees that you ran a scan.
The first run downloads the WASM engine (~3 MB) and the language model for your selected language (1–3 MB). Both are cached by the browser — the engine in the HTTP cache and the language model in IndexedDB — so subsequent scans start almost immediately.
PNG, JPEG, WebP, BMP, and GIF. PDFs are not supported directly; export or screenshot the page you need as an image first.
Accuracy is very high on clean, high-contrast sources like screenshots, terminal output, and flatbed scans. It drops on photographs taken at an angle, low-resolution images, unusual fonts, and handwriting — Tesseract is not designed for handwriting recognition. The per-word confidence scores in the Words tab show you exactly which parts of the result to double-check.
It tells Tesseract how to interpret the layout before reading. 'Automatic' analyses the whole page and works for most documents. Switch to 'Single line' or 'Single word' when you crop a small snippet, 'Single uniform block' for a paragraph screenshot, and 'Sparse text' for scattered labels such as UI elements or diagrams. Picking the right mode often fixes garbled output.
Because it isn't in the character set the Tesseract models were trained on. The engine can only output characters it knows, so when it meets ₹ it substitutes the closest glyph it has — usually ¥ or g, and sometimes the digit 3 or 7. This is a limitation of the model rather than of your image: on a clean, high-resolution render where $, €, £ and ¥ are all read perfectly, ₹ still comes back wrong. Changing the language or page segmentation mode does not help, and adding Hindi does not either, since ₹ is missing from that model's character set too. The 'Correct ₹ misreads' option rewrites the ¥ and g cases back to ₹, but it cannot recover the ones misread as a digit — 370 is indistinguishable from a genuine number — and it will also rewrite real Yen amounts, which is why it is off by default.
Anything outside the model's character set behaves the same way as ₹: it gets mapped to a similar-looking character rather than flagged as unknown. In practice that means currency symbols beyond $ € £ ¥, most emoji, icon-font glyphs, and box-drawing characters. Icons in screenshots are especially noisy — a circular app icon often comes through as (1), €), or (). Treat symbols in OCR output as needing a look, and use the per-word confidence scores in the Words tab to find the spots worth checking.
Yes. Crop to just the text you care about, upscale small images before uploading, and make sure the text is dark on a light background and roughly horizontal. Increasing contrast on a faded scan helps a lot. If a scan looks wrong, try a different page segmentation mode before assuming the image is unreadable.
Scan the image, then open the Table tab. It rebuilds the table from the word coordinates the engine already produced: words that overlap vertically become one row, and columns are found by locating the vertical bands of whitespace that no row writes into. That means both ruled tables and plain whitespace-aligned columns work — no border lines are required. The output is a GitHub-flavored Markdown table you can copy, download as .md, or paste into the Markdown Table Generator for alignment tweaks.
Change the 'Column gap' setting: it controls how wide a run of whitespace has to be before it counts as a column break, relative to the text size. Pick 'Narrow' when two columns were merged into one, and 'Wide' when a single column was split in half — a wide gap between words inside a cell is the usual cause. Cropping the image to just the table also helps a lot, since surrounding paragraphs and titles span the full width and blur the column boundaries. If the first row is data rather than headings, turn off 'First row is the header'.
hOCR is an HTML-based format that keeps the layout, bounding boxes, and confidence for every word — useful for building searchable PDFs or feeding downstream layout-aware tooling. TSV is the same positional data as tab-separated rows, which is easy to pipe into scripts or a spreadsheet.
English, Spanish, French, German, Portuguese, Italian, Russian, Simplified Chinese, Japanese, Korean, Arabic, and Hindi. Each language has its own model that downloads on first use, so pick the one that matches the image — running English against a Cyrillic scan will produce nonsense.