Cursive Translator

Handwriting OCR for notes, forms and everyday pages

Handwriting OCR: convert handwriting to text from a photo

Submit a photo of a written page and this page runs OCR on it. The image goes to Google Cloud Vision's DOCUMENT_TEXT_DETECTION feature, and whatever text comes back is written into the editable box on the right for you to review against the image; an empty result or an error is reported in the status line instead. The copy here is written for everyday material — meeting notes, study pages, a filled-in form, a list, a page that switches between printing and joined script.

This page and the cursive page submit the same OCR request. Same script, same endpoint, same feature and same language hint: only the wording on the two pages differs. Use whichever page's copy suits what you are holding.

1. Add a photo or scan of the page

JPG, PNG, WEBP, GIF, BMP or TIFF, up to 6 MB. You can also paste an image from your clipboard while focus is outside an editable control.

The button keeps the site's "Read cursive" label because all three upload pages load the same script and post the same OCR request. Nothing in that request distinguishes print from joined writing.

The box below holds the OCR text and is editable. Copy and Download act on what is in the box when you press them, not on what was returned.

Where the image goes. Pressing the read button reads the file in your browser, posts it to /api/cursive-to-text on this site, and that endpoint sends it to Google Cloud Vision for OCR and returns the text field of the response. The site code does not write your image or the OCR text to any store of its own. Site policy: review whatever comes back against the image before you file it, forward it or act on it, and do not upload a page whose contents you are unwilling to send to an external OCR service. A written page can carry names, addresses, medical details or client information; crop or mask anything you do not need read. The privacy page sets out the request path in detail.

What this handwriting OCR page does when you press the button

Three steps from handwriting to text, with no account, nothing to install, and no saved-work or history retrieval feature in the site code.

  1. Add one image

    Choose a file, drag one in, or press Ctrl or Cmd + V to paste one. The page checks type and size first: anything outside JPG, PNG, WEBP, GIF, BMP or TIFF, or over 6 MB, is refused in your browser and never sent. The form takes one image per request — submit a spread as two captures.

  2. Press the read button

    The file is read as base64 locally and posted to /api/cursive-to-text. That endpoint runs the OCR: one Google Cloud Vision DOCUMENT_TEXT_DETECTION request with the language hint en, and it returns the text field of the response. The status line reports text, an empty result, or an error.

  3. Review, then keep it

    Edit the OCR text against the image, then press Copy text or Download .txt. The script derives the download name from the selected image filename, or uses handwriting.txt when that name is empty; whether and where it is saved depends on the browser.

Capture checklist before you run the OCR

Instructions for taking the image, and one experiment you can run yourself. None of these is a claim about what the OCR will return.

  • Light the page evenly and keep your own shadow off it by stepping to one side rather than leaning over the page.
  • Shoot square to the page. Hold the camera parallel to the paper so the ruled lines run horizontally across the frame.
  • Flatten the paper first. Press out folds, and hold a spiral notebook or ring binder open at the edges so the inner margin does not curve away.
  • Crop to the writing. Fill the frame with the text and leave out the desk, your fingers and the facing page.
  • Save a full-resolution file from a flatbed or scanning app rather than a compressed preview, and upload that file rather than a screenshot of it.
  • Submit one page, half-page or column per request if the writing is small or the margins are crowded.
  • Zoom to full size and read the image yourself before uploading. Anything you cannot read on screen, you will not be able to check against the OCR text.
  • Keep the original image. Use it as the source for the review pass.
  • An experiment, not a rule: submit the same page twice — once as shot, once re-shot with one thing changed, such as the light, the angle, the crop, or a scanning app's filter switched off — and compare the two OCR results against the page yourself. That comparison is about your page; this site makes no prediction from it.

What OCR from handwriting gives you, and what it does not

This table is a worksheet, not a prediction. Find the rows that describe your page and carry out the check in the right-hand column against the OCR text.

What is on the page, and the check to run on the OCR text
If your page has Check in the box
Block capitals or print lettering Read the punctuation and the digits character by character, including any 0 and O, 1 and l, 5 and S.
Names, initials or personal shorthand Check each one against the image, and against another document where you have one. Expand your own shorthand now, while you still remember it.
Arrows, boxes or diagram labels This client displays only the text field and does not render where a label sat. Put each label back beside what it labelled, working from the image.
Bullets, ticks or columns Rebuild the list structure yourself before you correct any words, so you can see which line belongs where.
A printed form with written answers This client displays one text stream and does not render field structure. Pair each answer back to its printed label by eye.
Quantities, units or fractions Check every number and unit one at a time against the page. A wrong quantity reads exactly like a right one.
Fast or cramped joined writing Read the box against the image word by word rather than skimming, and mark anything you cannot resolve with [?].
A hand-drawn table or grid This page does not display response coordinates. Use the image if you need to reconstruct rows and columns.
Faint pencil, faded or bled ink List the words you cannot read in the image yourself first, then check what the box has in those positions and mark them.

Two interface facts apply to every row. This client reads and displays only fullTextAnnotation.text from the OCR response; it does not render position or layout fields, so use the image to reconstruct a two-column list, form, grid or keyed note. It also displays no OCR confidence values or uncertainty marks; the page does not show which words match the image.

The review pass on the OCR text, in order

Carry these out in this order, with the image open beside the box.

  1. Put the image and the box side by side and read them against each other line by line rather than skimming.
  2. Rebuild the structure first. Restore the headings, bullets, indents and columns from the image before correcting any words, so you can see which line belongs where.
  3. Check every name, number, date and unit individually against the page.
  4. Write out your own shorthand. Arrows, symbols and personal abbreviations have no text form; expand them now, while you still remember what they meant.
  5. For each doubtful word, find the same letters elsewhere on the page and compare the shapes directly, rather than deciding from the box alone.
  6. Type [?] wherever you cannot resolve a word from the image. Do not leave a plausible word standing unchecked.
  7. As an experiment, crop one difficult paragraph and submit it on its own, then compare that OCR text against the same lines in the first result and against the image. Decide from what you see; this site makes no claim about which will match.
  8. Save the image with the text if the notes matter, so the text remains connected to the source you reviewed.

Configured OCR checks, and questions for your review

The left column describes checks in the current client and endpoint code. The request thresholds are best-effort controls, not hard platform quotas. The right column is a worksheet for your page.

Checks configured in the code

  • Client-accepted types: JPG, PNG, WEBP, GIF, BMP, TIFF. Anything else is refused in your browser. The endpoint does not repeat this MIME-type check; it checks for a nonempty encoded image string and its encoded length.
  • Size cap: 6 MB, checked before any request is made.
  • One image per request. No PDF, no batch, no multi-page upload.
  • In-memory rejection branch: above 10 requests per IP in 60 seconds within one module isolate. This is not a stable distributed rate limit.
  • KV rejection thresholds: 100 requests per IP and 3000 site-wide per UTC day. The counters are fail-open and use non-atomic read-modify-write operations, so these are best-effort checks rather than hard caps.
  • One fixed language hint, en, with no control to change it, and one fixed OCR feature type for every request.

Questions to answer from your own page

  • Can you read every word of the image yourself at full zoom? List the ones you cannot.
  • Which parts carry meaning by position — a grid, a mind map, a tick column, an annotated diagram? Write down what you would lose as running text.
  • Is anything written over, crossed out or bled through from the reverse? Mark those lines before you compare.
  • Which words are names, numbers, dates or units? Those get checked one at a time.
  • Is any of it in a language other than English? Note which lines, and check them against the image yourself.
  • What would a wrong word cost you here? Set your review depth from that answer.

Archive material has its own worksheet: how to read old cursive sets out provenance fields, an exact-transcript rule set and a four-mark notation for what you cannot read. Nothing on this page states how any older document will come out of the OCR.

Questions about handwriting OCR on this page

What does OCR for handwriting mean here?

OCR is optical character recognition: reading characters out of an image. On this page the OCR is performed by Google Cloud Vision, called once per submitted image with the DOCUMENT_TEXT_DETECTION feature and the language hint en. The site code sends the image, reads the text field of the response and puts it in the box. It applies no correction or scoring of its own; the only change it makes is to strip leading and trailing whitespace.

How is OCR from handwriting different from OCR on a printed page?

Not in what this site sends: the same feature type and the same language hint go out either way, and there is no control that would change them. The difference is in your review. Printed letterforms are fixed and quick to check; joined writing, personal shorthand, crossed-out lines and squeezed margins are not, so read the box against the image word by word. This page displays no confidence values, so it cannot tell you which words to doubt.

Can I OCR handwriting in a language other than English?

The request carries one fixed language hint, en, and the page has no control to change it. This page does not state what the service does with a page written in another language. Submit it if you want to, and judge the returned text against the image yourself.

How is this different from the cursive page?

Only in the wording on the page. Both load the same script, post the same OCR request to the same endpoint, and send the same feature type and the same language hint. There is no separate engine, model or setting behind either one.

Can I submit a page that mixes printing and cursive?

Yes — nothing in the request distinguishes the two, and there is no control that would. Submit the page and compare what comes back against the image.

Will it keep my bullets, columns and indents?

No layout is displayed. This page reads one text field and does not render coordinates from the response, so use the image to rebuild bullets, tick boxes, tables, columns and boxed sections during review.

What about a filled-in form?

This client displays one text stream and does not render field structure, so printed labels and written answers are not paired by this page. Match each answer back to its label from the image.

What about a photo of a whiteboard?

The endpoint takes any accepted image; nothing in the code treats a board differently from paper. Submit it, then check the returned text against the photo — including any writing that was still faintly visible from before.

Which file types and sizes are accepted?

JPG, PNG, WEBP, GIF, BMP and TIFF, up to 6 MB per image. Both checks run in your browser before anything is sent. The status line states why the file was refused; an over-size message also states the measured size.

Can I upload a PDF or several pages at once?

No. PDF is not in the accepted list and the form takes one image per request. Export each page as an image and submit them one at a time.

Is the OCR accurate enough to skip proofreading?

Site policy is that you check it. This client reads only the returned text field and displays no confidence values or uncertainty marks, so the page provides no basis for skipping review. Compare the box against the image.

Is my image stored anywhere on this site?

The site code has no image or transcript database, does not intentionally persist either item, and provides no saved-work or history retrieval feature. The image is sent to Google Cloud Vision for the OCR. This page does not describe what Google logs, retains or transmits; consult Google's own current policies for that information.

Does it cost anything?

There is no account or payment control on this site. The endpoint has an in-memory rejection branch above 10 requests per IP in 60 seconds within one module isolate, plus KV rejection thresholds of 100 per IP and 3000 site-wide per UTC day. The KV checks are fail-open and non-atomic; all are best-effort controls, not hard platform quotas. The page prints any returned rejection message in the status line.

Can I do the reverse — turn typed text into handwriting?

The text to handwriting page requests a fixed list of script font names and calls local canvas APIs. Its drawing script sends neither the typed text nor the canvas in a request; page-level analytics requests remain disclosed separately.