shell
$ pip install 'openreading[pymupdf,tesseract]'
$ openreading backends # who is ready, and which env vars are missing
$ openreading parse loan.pdf --backend pymupdf # no key, no network
$ openreading parse invoices/ --backend pymupdf # a directory → one batch JSON
$ openreading compare loan.pdf --backends pymupdf,tesseract --format diffs
python · the same contract
import openreading
doc = openreading.run("loan.pdf", backend="pymupdf")
doc.keys()
# schema_version, status, backend, document, usage,
# warnings, backend_raw, channel_provenance
compare --format diffs · the verdict, not the diff wall
① CONTENT ✔ EQUIVALENT content shared by all: 1.00 · 0 real misses
② TABLES table counts differ: {'pymupdf': 1, 'tesseract': 0}
Same JSON Schemas on every surface: the command line, Python, and an HTTP API you run
yourself (openreading serve → /v1/parse, /v1/batch,
/v1/compare, /v1/jobs). A web UI comes with it, at
openreading serve-ui. All of that is in the package.
Hosting it for you is the separate thing.