unlimitedocr.c
unlimitedocr.c runs the baidu/Unlimited-OCR model locally with a native C/Metal
inference engine and a small Python API for OCR workflows.
Python handles the user-facing pieces — image loading, prompt construction, tokenization, and text decoding. The native library handles model loading, memory management, KV cache, logits processing, and GPU execution.
Installation
uv add unlimitedocr-c
unlimitedocr-cis published on PyPI. Version0.3.0is the latest stable release.
Quick start
from unlimitedocr_c import UnlimitedOCR
ocr = UnlimitedOCR()
text = ocr.generate("page.png")
print(text)
ocr.close()
Create one UnlimitedOCR instance, reuse it for as many images as you want, and
call close() when finished.
from unlimitedocr_c import UnlimitedOCR
ocr = UnlimitedOCR()
for image_path in ["page-1.png", "page-2.png", "page-3.png"]:
print(ocr.generate(image_path, profile="base"))
ocr.close()
Quantization (Q8)
The engine supports two model profiles:
| Profile | Weights | Model file | Usage |
|---|---|---|---|
| fp16 (default) | fp16 | ~6.7 GB | UnlimitedOCR() |
| mixed Q8_0 | int8 weights + fp16 scales | ~3.5 GB | UnlimitedOCR(quant="q8") |
from unlimitedocr_c import UnlimitedOCR
ocr = UnlimitedOCR(quant="q8")
text = ocr.generate("page.png")
ocr.close()
The first use converts the Hugging Face checkpoint into a cached
unlimitedocr-q8.uocr model file; pass force_reconvert=True to rebuild it.
Q8 quantizes all decoder and vision-encoder weight matrices (attention, MLPs, MoE experts, LM head, embeddings, projector) with group-64 Q8_0. Norms, biases, position embeddings, convolutions, and all runtime activations stay fp16. Dequantization is fused inside the Metal kernels — quantization roughly halves model memory and speeds up token generation, which is memory-bandwidth-bound.
Input types
generate() accepts the common image forms directly:
| Input type | Example |
|---|---|
| local path | ocr.generate("page.png") |
| URL | ocr.generate("https://example.com/page.jpg") |
| bytes | ocr.generate(open("page.png", "rb").read()) |
| file-like object | ocr.generate(BytesIO(image_bytes)) |
| PIL image | ocr.generate(Image.open("page.png")) |
| base64/data URI string | ocr.generate("data:image/png;base64,...") |
Example:
from io import BytesIO
from PIL import Image
from unlimitedocr_c import UnlimitedOCR
ocr = UnlimitedOCR()
text_from_path = ocr.generate("page.png")
text_from_url = ocr.generate("https://example.com/page.jpg")
text_from_bytes = ocr.generate(open("page.png", "rb").read())
text_from_file = ocr.generate(BytesIO(open("page.png", "rb").read()))
text_from_pil = ocr.generate(Image.open("page.png"))
ocr.close()
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file unlimitedocr_c-0.3.0-py3-none-macosx_12_0_arm64.whl.
File metadata
- Download URL: unlimitedocr_c-0.3.0-py3-none-macosx_12_0_arm64.whl
- Upload date:
- Size: 451.6 kB
- Tags: Python 3, macOS 12.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
86b6db9010ffe8041b4bebb8144cdb62bed594c02c9eb94112f2ec1c64fefccd
|
|
| MD5 |
166036552719e005d2d055cde4702ec3
|
|
| BLAKE2b-256 |
1a281b1d88b04aa0125965046a9a039cf1d2fa7b123f401cd9e942ff1b5ba871
|