Skip to content
sceptre

sceptre

EasyOCR's accuracy. Rust's speed and footprint.

sceptre is a from-scratch Rust reimplementation of EasyOCR’s pipeline — CRAFT text detection then gen2 CRNN recognition with CTC decoding, over ONNX. It matches EasyOCR’s output on every script it supports, runs faster on a fraction of the memory, and ships as one self-contained binary with no Python runtime. Use it as a library, a CLI, or an MCP server.

Parity accuracy

Validated against real EasyOCR output across all eight gen2 scripts — English, Latin, Chinese, Japanese, Korean, Cyrillic, Telugu, Kannada — matching text and boxes. A faithful reimplementation, not an approximation.

Substantially faster

~2.8× higher throughput than EasyOCR warm on the same corpus — and a cold, one-shot CLI run (~4.4×) still beats EasyOCR’s already-loaded reader.

A fraction of the memory

Peak RSS around 3× lower than the Python + torch process, measured like-for-like. Runs where EasyOCR won’t — small containers, edge boxes, many workers.

One binary, no Python

A single static executable. Models download once, cache locally, and run offline thereafter. cargo install and go — nothing to pip install.

Three surfaces

The same engine as a Rust library, a CLI (sceptre), and an MCP server for agents — drop it into a service, a shell pipeline, or an AI tool.

Native or pure-Rust

ONNX Runtime (ort) for native speed, or a pure-Rust backend (tract) for WASM / Android — behind one backend seam.

Terminal window
cargo install sceptre-cli
sceptre run receipt.png --lang english --format json

Models — CRAFT plus the gen2 recognizers — are fetched from Hugging Face on first use, cached under the standard HF cache, and sha256-verified. Every run after that is offline.