Skip to content
dialegein

OCRmyPDF

Command-line tool and Python library that adds a searchable OCR text layer to scanned PDFs.

Operated by James R. Barlow

Visit OCRmyPDF

Opens the vendor's own site.

Jobs covered

Open a task to see exactly what the vendor documentation supports.

OCR Browse all ocr tools

adding a searchable optical-character-recognition text layer to existing scanned PDFs with OCRmyPDF: rasterising page images, running Tesseract with the requested language packs, and writing the recognised text back as an invisible layer so the PDF becomes searchable/copyable, with documented deskew, page-rotation, unpaper cleaning and image optimisation, PDF/A output modes, sidecar OCR text and batch/watch-folder workflows.

The scope records OCR/searchable-text-layer generation and the documented image-processing/output options, and explicitly excludes generic text extraction to arbitrary formats, editing or reflowing the visible body text, OCR of handwriting, redaction/content removal, digital signatures, semantic accessibility remediation/validation and understanding of arbitrary scanned content

Compress Browse all compress tools

reducing PDF size through OCRmyPDF's image-oriented optimizer, which runs after a successful OCR: lossless optimisation at the default level and optional lossy optimisation at higher levels, with the output size not guaranteed to decrease

Where your files are processed

No server involved

Command-line tool and Python library, usually run on your own machine or in your own container. No vendor service in the path. That is a property of the library itself: what an application built with it does with your file depends on that application, not on this.

A locally installed program, Python library or Docker image running on the caller's own machine/hardware; the OCRmyPDF project itself operates no hosted processing service. The documentation shows native Windows, WSL/Cygwin, macOS, Linux, FreeBSD and Docker installation paths.

The bundled Flask/Streamlit web wrapper is documented as a demonstration without authentication, not a public hosted service. Network I/O is controlled by the caller; local processing is architectural rather than a guarantee that every deployment is air-gapped.

What it does

OCRmyPDF is an MPL-2.0 Python command-line tool and importable library, currently at 17.13.0 (28 September 2026), that adds a searchable OCR text layer to existing scanned PDFs. It rasterises pages, runs Tesseract over the images, and writes the recognised text back as an invisible layer so a scan becomes searchable and copyable while retaining its page images.

It can deskew, rotate, clean, optimise and convert to PDF/A, write a sidecar text file containing OCR text, use multiple CPU cores, run as a Python API/CLI, and be deployed through native packages, Docker or watched-folder/batch workflows. Tesseract and its language packs are external dependencies; accuracy is bounded by Tesseract, handwriting is unsupported, and multi-column layouts can be merged or garbled.

It does not extract arbitrary text to other formats, edit body content, redact, sign, produce semantic accessibility remediation or understand scanned content beyond OCR; sidecar text is OCR output, and generic extraction should use a separate text extractor.

Best for

Archivists and integrators who need repeatable, automatable OCR over large scan collections on their own hardware, with a searchable text layer and optional PDF/A output.

Worth knowing

Accuracy is bounded by Tesseract: handwriting is not recognised, each language needs its own installed language pack, and multi-column layouts can be merged or garbled. OCR adds a hidden text layer to scanned page images; it does not edit or reflow the document's visible body text, remove content, redact, sign, perform semantic accessibility remediation or understand arbitrary scanned content.

A sidecar text file is OCR output, not a general extraction API; OCRmyPDF's documentation recommends a text extractor such as Poppler pdftotext for that. Tesseract is an external dependency, and pikepdf/pypdfium2, Ghostscript or other rasterizers have their own licensing and installation requirements; the MPL-2.0 project licence is not the whole dependency answer.

The bundled Flask/Streamlit HTTP demo wrapper has no authentication and is not for public deployment. Native Windows, WSL/Cygwin, macOS, Linux, FreeBSD and Docker paths differ in available dependencies and quality; check the platform-specific install notes.

Details, and where each comes from

Vendor statements, our own reading of their pages, and the things nobody has established yet, each answered separately. Where we have not confirmed something it says so rather than guessing, and a row nobody has established is greyed out.

Versions covered
Windows · macOS · Linux · Self-hosted
Website
ocrmypdf.readthedocs.io
Requires an account
Not applicable
Watermark on the free tier
Not verified
Maximum file size
Not verified
Batch processing
Yes
Data residency
Self-hosted
Open source
Yes
Self-hostable
Yes
Licence
MPL-2.0 for the OCRmyPDF project itself.

MPL-2.0 for the OCRmyPDF project itself. Current PyPI metadata for 17.13.0 requires Python >=3.11 and lists fpdf2, img2pdf, packaging, pdfminer.six, pikepdf[pdfa], Pillow, pluggy, pydantic, pypdfium2, rich, typing-extensions and uharfbuzz as dependencies; Tesseract is an external OCR dependency.

Ghostscript is optional/alternative depending on the rasterizer, and its AGPL-3.0 licence matters if it is installed or redistributed. The bundled Flask/Streamlit demo is not a hosted service.

Redaction
No redaction feature
Programmatic access
Embeddable library · Command line
Last availability check
Responded in 92 ms 21 October 2026

Checked automatically by our own runner, not reported by the vendor. 100% of our last 30 checks got a response.

What the redaction verdict rests on

From the vendor's own documentation, read 22 September 2026. Not tested by us.

What that does not establish

The vendor’s own site was read on 22 September 2026 and contains no mention of redaction, sanitisation, blackout or whiteout. Absence from a vendor’s own material is not proof that a feature does not exist - it may be undocumented, or on a page the reading did not reach - but for a NEGATIVE claim it is the strongest evidence available, and it is weaker than a positive quote.

Recorded as such rather than presented as certainty.

https://ocrmypdf.readthedocs.io/en/latest/

Sponsorship is distribution, not an endorsement or a promise of search rankings, AI citations, traffic, or sales. This listing is a free entry, compiled from published sources.

Visit OCRmyPDF Report a problem

Related reading

How this record was put together

Editorial review.
No editor has signed this record off. That is not the same as nothing having been checked, and the lines below say what has.
Source reading.
No vendor page has been read for this record yet.
Website availability.
The vendor's site was last checked on 21 October 2026.
Behaviour testing.
We ran this ourselves. The file handling was watched directly.

Sources: https://pypi.org/project/ocrmypdf/ (17.13.0, 28 September 2026, Python >=3.11, MPL-2.0, author James R. Barlow, dependencies; read 2026-10-16); https://github.com/ocrmypdf/OCRmyPDF (MPL-2.0, created 2013-12-20, last push 2026-10-12, latest release v17.13.0; read 2026-10-16); https://ocrmypdf.readthedocs.io/en/latest/ (OCR text layer, searchable output, image processing, PDF/A, sidecar, Docker, native/WSL/macOS/Linux paths); /cookbook.html (deskew/rotate/clean/optimize, sidecar, extraction note); /api.html (Python API); read 2026-10-16.

Compared head to head

All comparisons