Skip to main content

MathCraft OCR

MathCraft OCR is an ONNX-only OCR runtime for mathematical documents. It provides formula recognition, text recognition, mixed text/formula page OCR, explicit model-cache management, and structured block output for downstream Markdown or TeX document engines.

The package is developed for LaTeXSnipper but is usable as a standalone Python library.

Features

  • ONNX Runtime inference only; no active PyTorch OCR runtime.
  • Formula OCR: image to LaTeX.
  • Text OCR: multilingual PP-OCRv5 mobile detector/recognizer.
  • Mixed OCR: formula detection, text masking, batched recognition, and layout merge.
  • Manifest-driven model cache with SHA-256 file checks.
  • Automatic repair for missing or incomplete model directories.
  • Resumable model downloads for interrupted first-run cache repair.
  • CPU/GPU provider selection through ONNX Runtime.
  • JSONL worker mode for GUI or service integration.

Installation

CPU backend:

pip install "mathcraft-ocr[cpu]"

GPU backend:

pip install "mathcraft-ocr[gpu]"

CUDA 12 backend:

pip install "mathcraft-ocr[gpu-cu12]"

Windows DirectML backend:

pip install "mathcraft-ocr[directml]"

Intel OpenVINO backend on Windows or Linux:

pip install "mathcraft-ocr[openvino]"

Install only one backend extra in a clean environment. The CPU, CUDA/TensorRT, DirectML, and OpenVINO ONNX Runtime distributions must not be mixed in the same environment. The standard onnxruntime macOS wheel includes CoreML EP support.

LaTeXSnipper's Dependency Management selects the ONNX Runtime GPU line from the detected CUDA toolkit: CUDA 11.x uses ONNX Runtime 1.20 from the official CUDA 11 feed, CUDA 12.x uses ONNX Runtime 1.21-1.26 from PyPI, and CUDA 13.x uses ONNX Runtime 1.27-1.29 from PyPI. The static mathcraft-ocr[gpu] extra follows the current PyPI default (CUDA 13 and Python 3.11+); use gpu-cu12 for CUDA 12. CUDA 11 installations must also select the official CUDA 11 package feed, so LaTeXSnipper's Dependency Management is recommended for that configuration.

Quick Start

from mathcraft_ocr import MathCraftRuntime

runtime = MathCraftRuntime(provider_preference="auto")
result = runtime.recognize_mixed("page.png")

print(result.text)
for block in result.blocks:
    print(block.role, block.kind, block.text[:80])

Formula-only recognition:

from mathcraft_ocr import MathCraftRuntime

runtime = MathCraftRuntime(provider_preference="cpu")
formula = runtime.recognize_formula("formula.png")
print(formula.text)

CLI

Check model cache:

mathcraft models check

Inspect runtime:

mathcraft doctor --provider auto

Warm up models:

mathcraft warmup --profile mixed --provider auto

Recognize an image:

mathcraft ocr "C:\path\to\page.png" --profile mixed --provider auto --output result.md
mathcraft ocr "C:\path\to\page.png" --profile mixed --provider auto --output-dir "D:\MathCraft\outputs"
mathcraft ocr "C:\path\to\formula.png" --profile formula --provider auto --json

Run JSONL worker mode:

mathcraft worker --provider auto

Model Cache

MathCraft reads models from a platform-specific default user data root:

Windows: %APPDATA%\MathCraft\models
macOS: ~/Library/Application Support/LaTeXSnipper/MathCraft/models
Linux: ${XDG_DATA_HOME:-~/.local/share}/LaTeXSnipper/MathCraft/models

or from a custom root:

$env:MATHCRAFT_HOME="D:\MathCraft\models"
mathcraft doctor --provider auto

Persist the custom root for future PowerShell sessions:

setx MATHCRAFT_HOME "D:\MathCraft\models"

Restore the default user cache root:

[Environment]::SetEnvironmentVariable("MATHCRAFT_HOME", $null, "User")
Remove-Item Env:\MATHCRAFT_HOME -ErrorAction SilentlyContinue
mathcraft doctor --provider auto

Open a new PowerShell window after removing the persistent variable. The default root is:

Windows: %APPDATA%\MathCraft\models
macOS: ~/Library/Application Support/LaTeXSnipper/MathCraft/models
Linux: ${XDG_DATA_HOME:-~/.local/share}/LaTeXSnipper/MathCraft/models

Model artifacts are downloaded from the MathCraft-Models release assets declared in mathcraft_ocr/manifests/models.v1.json.

Runtime Profiles

Profile Models Output
formula formula detector + formula recognizer LaTeX string
text text detector + text recognizer OCR text and text blocks
mixed formula detector + formula recognizer + text detector + text recognizer Markdown-ready structured blocks

Provider Selection

provider_preference accepts:

  • auto: prefer CUDA, then a platform accelerator, and finally CPU; TensorRT remains explicit because of its first-use engine build cost.
  • cpu: force CPU.
  • gpu: request the first available supported accelerator.
  • cuda: request CUDA.
  • tensorrt or trt: request TensorRT, followed by CUDA and CPU for unsupported nodes.
  • directml or dml: request DirectML.
  • coreml: request CoreML.
  • openvino: request OpenVINO.

Advanced callers can pass an explicit ordered provider list and provider options:

runtime = MathCraftRuntime(
    providers=[
        (
            "TensorrtExecutionProvider",
            {
                "device_id": 0,
                "trt_engine_cache_enable": True,
                "trt_engine_cache_path": "./trt-cache",
            },
        ),
        ("CUDAExecutionProvider", {"device_id": 0}),
    ]
)

auto deliberately prefers CUDA over TensorRT because TensorRT can spend substantial time building an engine on first use. Select tensorrt explicitly when its native runtime is installed; enable its engine cache for repeated startup performance.

The actual provider is available on recognition results through the provider field. Doctor and warmup reports also expose device_id, device_name, device_uuid, and device_verified under provider_info. GPU sessions bind the reported device_id explicitly; device_verified becomes true only after the runtime confirms the device used by initialized inference sessions.

Development

Run tests from the repository root:

cd E:\LaTexSnipper
python .\test\test_mathcraft_ocr.py
python .\test\test_mathcraft_document_engine.py

Build package artifacts:

cd E:\LaTexSnipper
python -m build --no-isolation --outdir .\release_assets\mathcraft-ocr-package\dist .

License

GPL-3.0-only. See LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mathcraft_ocr-0.3.0.tar.gz (66.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mathcraft_ocr-0.3.0-py3-none-any.whl (72.5 kB view details)

Uploaded Python 3

File details

Details for the file mathcraft_ocr-0.3.0.tar.gz.

File metadata

  • Download URL: mathcraft_ocr-0.3.0.tar.gz
  • Upload date:
  • Size: 66.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.0

File hashes

Hashes for mathcraft_ocr-0.3.0.tar.gz
Algorithm Hash digest
SHA256 04f1a05ff1407f63e0ca118c8fdb7b03ca76ef42f192a9cae90c28082a36bf35
MD5 59b2e98b0b355316b6dda0d4a2ccb91b
BLAKE2b-256 0807b899480f210e01dedc9b07d8b4f66a9858cc5a77d871fefb2ddf8b058042

See more details on using hashes here.

File details

Details for the file mathcraft_ocr-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: mathcraft_ocr-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 72.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.0

File hashes

Hashes for mathcraft_ocr-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fce2bf8a1583f1341e1534569dc9bc7b006cb4730cbf7d0d7893026c3fc0a7fc
MD5 7fe444727d9186d2294fe538aa3c57c4
BLAKE2b-256 6d45696129ba24a16e54c4ca17f94f21ea5635f4daf13eef682d8da97957acb3

See more details on using hashes here.

Release history Release notifications | RSS feed

0.3.1

2 files

This release

0.3.0 This release

2 files

0.2.9

2 files

0.2.8

2 files

0.2.7

2 files

0.2.6

2 files

0.2.5

2 files

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

0.2.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page