Toolvore

Image OCR — Extract Text

Pull text out of images right in your browser with Tesseract.

This tool runs entirely in your browser. Your data is never uploaded, never stored, and never leaves your device.

Reads printed text out of a picture — a screenshot, a photographed page, a scan — and hands it back as characters you can select and copy. Recognition is done by Tesseract compiled to WebAssembly and run inside this tab, in one of twelve languages.

How to use it

  1. 1Choose the language first: it is read at the moment the file arrives, so changing it afterwards means dropping the image in again.
  2. 2Drop in a PNG, JPG or anything else the browser can decode — only the first file is used, and PDFs are not accepted.
  3. 3Watch the percentage climb, then copy the extracted text from the box that appears; an image with no readable text says so instead of leaving you an empty one.

Example

Input
A 900 × 340 PNG of an invoice header, language set to English
Output
Invoice INV-2026-0148 / Amount due: £1,240.50 / Due date: 14 August 2026 — every character right, in about eight seconds

Eight seconds is with the language data already cached; the first run of any language downloads roughly 10–20 MB before it starts and takes considerably longer. Two things decide whether this works for you. Resolution: the same kind of sentence rendered at 9–10px came back as "Ordor 4471 shipped on 12 March a1 0941 rom Brsol depot", and turned the reference QX-88213-B into QX.85215.8, so enlarge or rescan rather than trusting a small screenshot. Layout: recognition sweeps line by line across the full width, so a two-column page interleaves, giving "The left column runs The right column is" as one line — crop to a single column first. Only line breaks survive, so tables lose their columns, and one language runs at a time, so a page mixing scripts loses one of them. For a PDF, try Extract Text from PDF first; if it is a scan with no text layer, put it through the PDF to PNG converter and bring the pages here.

What happens to your data

The image never goes anywhere: it is decoded and recognised on your own machine, which is the point, given that the things people put through OCR are passports, payslips and screenshots of private conversations. What does travel is the engine — tesseract.js fetches its worker script, WebAssembly core and language data from the jsDelivr CDN on first use, so that CDN learns which language you picked and nothing more. After that it is cached and local, and the extracted text is never written anywhere.

Last updated August 2026

The text is right in front of you and no way to get at it — an error message sent as a screenshot, a page photographed in a library, a contract that came back from the printer as a scan. You can read every word and select none of them.

Before you drop anything in, check that the text really is pixels. Open the original and drag a cursor across a line: if the highlight catches on words, the characters already exist, and copying them is exact where recognition never is. Recognition looks at shapes and decides which letter each one most resembles, so what comes back is a good guess. Reach for it when there is nothing to copy.

The second thing to settle is what kind of image you have. A screenshot is the easy case: flat, sharp, evenly lit. A photograph of a page brings problems no recogniser can undo — the page tilted a few degrees, your own shadow across the lower half, a lens that focused on the paper rather than the type. Taking the picture again is usually cheaper than fighting the result.

The mistake that costs most is treating what comes out as finished. Read it against the image before it goes anywhere that matters. Prose is forgiving, because a wrong letter looks wrong; account numbers, dates and totals are not, because a wrong digit reads as plausible and your eye slides over it.

How it works

Toolvore runs Tesseract, compiled to WebAssembly, inside the tab you already have open. The engine and the trained data for the language you chose are fetched the first time they are needed, which is why an early run sits on a loading message and later ones do not. Your file goes to the recogniser directly, and the status and percentage it reports drive the progress line. One check happens first: the image is drawn into an off-screen element to confirm the browser can decode it, because a file's type is taken from its name, so a mislabelled file would otherwise fail deep inside the engine, where it looks like a lost connection. What comes back is one block of trimmed text and nothing else — no confidence score, no word positions, no marking of the parts it found hard, so a wrong word looks as convincing as a right one. There is no cancel either: drop a second image and the first still runs to the end.

Common use cases

  • Pulling an error message out of a screenshot pasted into chat
  • Copying a serial number off a photo of a device label
  • Getting a quotation out of a scanned page for an essay
  • Turning a photographed lecture slide into editable notes
  • Lifting a reference code off a receipt without retyping it
  • Reading the words in a shared image to search for the source

Frequently asked questions

Why can't I select the text in a screenshot or a scan?

Because there is no text there. An image records a grid of coloured dots, and a letter in it is only a pattern of dark ones — the file has no idea a letter exists. Selecting works in a document or a web page because characters are stored as characters, each with a position. Recognition is the business of putting that information back: software finds shapes that look like glyphs and writes out the characters it settles on. That is why the result can be wrong in ways copying never is, and why a page you can already highlight should be copied rather than recognised.

How accurate is OCR, and which characters go wrong most?

On a clean screenshot of ordinary type, close enough that you will spend longer reading it than fixing it. The errors that survive are the ones where two shapes really are alike: zero against capital O, the digit one against lowercase l and capital I, five against S, eight against B, and the pair rn read as m. Punctuation is the other weak spot — a full stop and a comma differ by a few pixels. None of them look wrong on their own, which is the danger: the sentence still reads, and the reference number still looks like a reference number.

Does OCR work on handwriting?

Not in any way you should depend on. Engines of this family are built for printed type: a finite set of letterforms, consistent spacing, straight baselines. Handwriting breaks all three, and joined-up writing breaks the assumption underneath — that a letter is a shape you can cut out on its own. Neat block capitals on ruled lines sometimes come back partly readable, usually with digits and letters confused; anything cursive tends to produce word-shaped nonsense. Reading handwriting needs models trained for that job, which is not what this kind of engine does. For a page of notes, retyping beats correcting.

How should I photograph a page so the text reads correctly?

Get the camera parallel to the paper and centred, so the page is a rectangle rather than a trapezium — perspective bends the lines the recogniser follows. Light it from the side with something diffuse and watch where your own shadow falls: overhead light plus a phone held above the page puts a shadow down the middle of the text. Turn the flash off on glossy paper, where it burns a hole through a paragraph. Press a book flat, or shoot each page alone, since text curving away into the spine is where errors collect on anything thicker than a pamphlet.

Is my image uploaded anywhere when text is extracted?

No. Recognition happens in the browser: the engine is compiled to WebAssembly and runs in the page, your file is passed straight to it, and the preview is drawn from a local reference that is released when you leave. There is no upload step, so a payslip, a passport page or a signed letter never becomes a copy on someone else's disk. The one thing crossing the network goes the other way — the engine and the trained data for your language download before the first run, which is why a failure suggests checking your connection. That traffic carries nothing of yours.

Why does my scan come back as gibberish, or with nothing found?

Contrast and orientation cause more of it than people expect. Light grey type, text sitting on a photograph, or a watermark printed across a paragraph all leave shapes the models cannot match. A page saved sideways or upside down produces confident nonsense, because the engine looks for horizontal lines of type. White text on a dark background is worth inverting first. The fixes are all upstream: crop to the block of text you want, straighten it, raise the contrast, convert it to greyscale. There is nothing here but a language menu, so that cleanup belongs in an image editor beforehand.

Does extracted text keep bold, headings and bullet points?

None of it. Weight, size, italics, colour and typeface are properties of the pixels; what comes back is characters, which have none of those. A heading arrives as a line of words indistinguishable from any other, bold emphasis disappears, and a bullet glyph either vanishes or turns up as a stray character you will want to delete. Worth knowing before you plan the work: the output is raw material for a document rather than a copy of one. Keep the image open beside you to see which lines were meant to stand out.

Can OCR read Chinese, Japanese, Arabic or other non-Latin scripts?

Yes, with data trained for that script — which is why there is a language menu rather than one universal setting. The twelve on offer cover Chinese (Simplified), Japanese, Korean, Hindi, Arabic and Russian alongside the western European languages; Traditional Chinese is not among them. Right-to-left text comes back in reading order, but a paragraph broken across lines in the original can still arrive out of sequence. For accented Latin scripts, choosing the actual language rather than English matters more than it looks: a model that knows which accented forms exist will keep them rather than flattening them.