emx-mistral-ocr-cli
CLI tool for converting PDF documents to Markdown or HTML using Mistral OCR.
Features
- PDF -> Markdown (default) or HTML output
- Automatic output format detection from
--outextension (.html/.htm-> HTML) - Optional page selection via
--pages(1-12,2,5,10-12, ...) - Optional local PDF slicing before upload (
--slice-pdf) to help with very large PDFs (e.g. >1000 pages) - Optional extracted image export
- HTML mode with embedded HTML tables and built-in CSS styling
- Local chapter index analysis before OCR (
--analyze-index) - Retry handling for temporary Mistral API errors
- Safe output behavior (no overwrite without
--force)
Requirements
- Python 3.10+
- A valid Mistral API key in environment variable
MISTRAL_API_KEY
Installation
Install via pip:
pip install emx-mistral-ocr-cli
Install from source (repo checkout):
pip install -r requirements.txt
Optional (editable install with console script):
pip install -e .
Development / Run from Source
If you want to run directly from a git checkout (without installing the package from PyPI), install dependencies and execute the script:
pip install -r requirements.txt
python mistral_ocr_cli.py <input.pdf> [options]
Setup
Set your API key:
Linux/macOS (bash/zsh):
export MISTRAL_API_KEY="your_key_here"
Windows PowerShell / PowerShell:
$env:MISTRAL_API_KEY="your_key_here"
Windows cmd.exe:
set MISTRAL_API_KEY=your_key_here
Usage
emx-mistral-ocr-cli <input.pdf> [options]
Show help:
emx-mistral-ocr-cli -h
Common Examples
Default Markdown output:
emx-mistral-ocr-cli doc.pdf
Write Markdown to a specific file:
emx-mistral-ocr-cli doc.pdf --out result.md
HTML output (auto-selected by extension):
emx-mistral-ocr-cli doc.pdf --out result.html
Explicit HTML output:
emx-mistral-ocr-cli doc.pdf --output-format html --out result.html
Process only selected pages:
emx-mistral-ocr-cli doc.pdf --pages "1-20"
Slice selected pages locally before upload:
emx-mistral-ocr-cli doc.pdf --pages "1150-1200" --slice-pdf --out result.html --force
Disable images entirely:
emx-mistral-ocr-cli doc.pdf --no-images
Export images to custom directory:
emx-mistral-ocr-cli doc.pdf --images-dir extracted_images
Analyze chapter index locally (no OCR call):
emx-mistral-ocr-cli doc.pdf --analyze-index
Analyze chapter index and write it to file:
emx-mistral-ocr-cli doc.pdf --analyze-index --chapter-index-out index.tsv --force
Options
--out <path>: Output file path--output-format {markdown,html}: Output format (default:markdown)--force: Overwrite existing outputs--pages "<spec>": 1-based page selection, e.g.1-12,2,5,10-12--slice-pdf: Build temporary sliced PDF locally before upload (requires--pages). Useful when Mistral rejects very large PDFs (e.g. >1000 pages) and you want to process it in chunks.--images-dir <dir>: Directory for extracted images (default:<out_stem>_images)--no-images: Disable image extraction/export--image-limit <n>: Maximum number of images to extract--image-min-size <px>: Minimum image width/height--no-header-footer: Disable header/footer extraction--chapter-index-out <file>: Write local chapter index output--analyze-index: Local chapter index analysis and exit
Notes
- In HTML mode, OCR tables are requested as HTML and embedded into the final HTML document. HTML is generally more expressive than Markdown for complex layouts (e.g. tables with
colspan/rowspan, which standard Markdown tables do not support). - For large PDFs,
--slice-pdfcan still take time (PDF parsing/writing), but it reduces upload size and processed content and can avoid API errors for extremely large documents (e.g. >1000 pages). --analyze-indexis useful to discover chapter boundaries and page numbers so you can select specific chapters via--pages.
Metadata
Release files for emx-mistral-ocr-cli 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| emx_mistral_ocr_cli-0.1.3.tar.gz | 11.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| emx_mistral_ocr_cli-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.9 kB
Release files / emx_mistral_ocr_cli-0.1.3.tar.gz
| Download URL | emx_mistral_ocr_cli-0.1.3.tar.gz |
|---|---|
| Size | 11.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5ff8bdc6260e862d109dc519edb9af299a1f31b1b5c01a6f4c93df4a1f9039e2
|
|
BLAKE2b-256 checksum How to use checksums |
6a3c19591a894d78e32390f90d95b8368d794bf0035e4a63ac2f4c9fafe4f73b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 20, 2026.
Transparency logRelease files / emx_mistral_ocr_cli-0.1.3-py3-none-any.whl
| Download URL | emx_mistral_ocr_cli-0.1.3-py3-none-any.whl |
|---|---|
| Size | 11.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f58bfd4b1315f3e0c56857e1b57efe0e698185fdfbfcf3d704307fa2c7768551
|
|
BLAKE2b-256 checksum How to use checksums |
376bdea1058f1133dfbaf056c908f88706ee9d7df60ac66a13cdc10e661decda
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 20, 2026.
Transparency log