tooloora

Image to Text (OCR) — extract text from a picture

Drop a screenshot, scan or photo — or just paste it — and get editable text. Recognition runs in your browser; the picture never leaves your device.

Runs locally — nothing is uploaded

Drop an image here or choose a file

JPG, PNG, WebP, GIF or BMP — screenshots and straight scans give the best results.

Or simply paste a screenshot with Ctrl+V.

Runs entirely in your browser — no upload.

The first run downloads about 4.3 MB of recognition data once. After that it stays in your browser cache.

What works — and what does not

  • Screenshots and straight scans from 300 dpi: very good results.
  • Angled phone photos, shadows and blur: clearly worse, nothing is straightened automatically.
  • Handwriting and blackletter: not recognised.

Pull the text out of a picture

Drop an image, pick one from your device or paste it with Ctrl+V, choose German or English and start the recognition. A few seconds later the text sits in an editable field you can correct, copy or save as a .txt file. Everything runs in your browser — no upload, no signup.

What is this good for?

It works well whenever the type is upright and clearly separated from the background:

  • Screenshots from applications, PDFs, websites or video calls
  • Scans of letters, invoices, contracts and forms
  • Photos of flat originals, taken straight on and evenly lit

It gets harder with pages shot at an angle, shadows across the text, curved book pages, motion blur and text on a patterned background. The tool does not straighten images automatically (no deskew), so aim the camera squarely or crop the picture beforehand.

Why does resolution matter so much?

Because OCR compares letter shapes: with too few pixels per character, rn blurs into m, 1 into l and 0 into O. The Tesseract documentation ("Improving the quality of the output") names 300 dpi as the practical lower bound for scans and recommends upscaling text whose x-height is below roughly 10 pixels.

In practice: prefer a 300 dpi scan over a phone photo taken from a distance, and a screenshot at its original size over one that was shrunk first.

What does the confidence value mean?

The engine reports an average between 0 and 100 for the image. As a rough guide:

  • 85 and above — looks clean, still check numbers and proper names
  • 70 to 85 — usable, but expect mistakes
  • below 70 — get a better original (closer, more light, straighter angle)

Important: the value measures how sure the model is — not whether it is right. OCR is occasionally confidently wrong, especially with digits. That is why the result field is editable: proofreading is part of the job.

German, English or both?

Each language ships its own model and dictionary. A German model reads "Straße" correctly, an English one quickly turns it into "StraBe". For mixed documents you can pick German + English; that costs some speed and is marginally less accurate per language, but saves a second pass.

Why does the first run download data?

Because recognition happens on your device. The first time, the WebAssembly core (about 3 MB) and the chosen language model (1.3 MB German, 3 MB English) come from our own directory — not from a third-party CDN. After that the language data stays in your browser cache and the next run starts instantly. The size is shown before you start, so nobody is surprised on mobile data.

What happens to my image?

Nothing that leaves your device. The picture is drawn into a canvas, handed to the recognition worker in the same tab and then discarded. There is no upload endpoint, no queue and no account. That is the actual reason to use this variant: payslips, medical letters and contracts do not belong on someone else's server.

Honest limits

  • No handwriting, no blackletter — the models are trained on modern printed type.
  • No layout preservation — multi-column pages, tables and forms come back as running text, and the column order can get mixed up.
  • No automatic deskew, no exposure correction.
  • One image per run. For whole documents there is the PDF tool "make searchable", which recognises each page and embeds an invisible text layer.

Frequently asked questions

Is my image uploaded to a server?

No. The recognition engine (Tesseract, compiled to WebAssembly) is downloaded once and then runs inside your browser tab. The picture is drawn into a canvas on your own device and never sent anywhere — there is no upload endpoint. You can check it yourself: after the page and the language data have loaded, disconnect from the internet and recognition still works.

Why does the first run download several megabytes?

Because the OCR engine and the language model live in your browser, not on our server. The WebAssembly core is about 3 MB, a language adds 1.3 MB (German) or 3 MB (English). We show the size before you start; afterwards the language data stays in your browser cache, so the next run starts immediately.

How accurate is the result?

On clean screenshots and straight 300 dpi scans it is usually very good. On phone photos it drops: perspective, shadows, motion blur and low contrast all cost accuracy — the Tesseract documentation names 300 dpi as the practical lower bound and recommends upscaling text smaller than about 10 pixels x-height. We show the engine's confidence value, but treat it as a hint, not proof: OCR can be confidently wrong, so always proofread numbers and names.

Does it read handwriting or old Fraktur type?

No. The bundled models are trained on modern printed German and English type. Handwriting, Fraktur/blackletter, heavily stylised logos and dot-matrix printouts are outside their scope, and forcing them produces plausible-looking nonsense rather than a helpful error.

Which languages can I choose?

German, English, or both at once. Picking both helps with mixed documents but is slower and slightly less accurate per language, so choose a single language when the document only uses one.

Can I paste a screenshot directly?

Yes. Take a screenshot with your system shortcut and press Ctrl+V (Cmd+V on a Mac) anywhere on this page — the image is picked up from the clipboard. Drag & drop and the file picker work as well.