Apache 2.0 document parsing engine: PDF/DOCX/images → Markdown/JSON with tracked-changes (strikethrough) support
Project description
MinerOS
MinerOS is an Apache 2.0-licensed fork of MinerU — a high-accuracy document parsing engine that converts PDF, Word, PPT, and images into structured Markdown/JSON for LLM · RAG · Agent workflows.
Why "OS"?
MinerU's upstream license history is complicated: the project briefly adopted AGPLv3 before reverting. MinerOS is pinned to the last clean Apache 2.0 commit (e148afa9) and kept Apache 2.0 going forward — making it safe to embed in commercial and government applications without AGPL copyleft concerns.
The OS suffix signals:
- Open Source — fully Apache 2.0, no AGPL, no CC-BY-NC
- Open Standard — suitable for government procurement, regulated industries, and open-data pipelines
- OS-level reliability — designed to run as infrastructure, not just a script
What MinerOS adds over upstream MinerU
| Feature | MinerU upstream | MinerOS |
|---|---|---|
| License | Briefly AGPLv3, reverted | Apache 2.0 throughout |
| Tracked-changes / strikethrough detection | ❌ | ✅ (~~struck text~~ in Markdown) |
Remote VLM via .env auto-config |
manual | .env loaded automatically |
| Package name | mineru |
mineros |
Core Parsing Capabilities
- PDF · DOCX · PPTX · Images → Markdown + JSON
- Tracked-changes detection — renders struck-through text as
~~...~~in Markdown output (critical for government contracts, legislative drafts, redlined legal documents) - Formulas → LaTeX · Tables → HTML · accurate layout reconstruction
- Scanned docs, handwriting, multi-column layouts, cross-page table merging
- Output follows human reading order with automatic header/footer removal
- VLM + OCR dual engine, 109-language OCR recognition
Deployment Backends
| Backend | Best For |
|---|---|
pipeline |
Fast & stable, no hallucination, runs on CPU or GPU |
vlm-http-client |
High accuracy via remote OpenAI-compatible VLM server (e.g., Azure llama.cpp) |
hybrid-http-client |
High accuracy + local OCR, minimal local VRAM |
vlm-auto-engine |
High accuracy via local vLLM / LMDeploy / mlx |
hybrid-auto-engine |
Best accuracy, native text extraction, low hallucination |
Quick Start
Install
pip install uv
uv pip install -e ".[core]"
Or from PyPI (once published):
uv pip install "mineros[core]"
Run
# Basic parsing (auto-selects best available backend)
mineros -p <input.pdf> -o <output_dir>
# CPU-only (pipeline backend)
mineros -p <input.pdf> -o <output_dir> -b pipeline
# Remote VLM server (reads MINERU_VL_SERVER / MINERU_VL_API_KEY / MINERU_VL_MODEL_NAME from .env)
mineros -p <input.pdf> -o <output_dir> -b vlm-http-client
# Specific page range
mineros -p <input.pdf> -o <output_dir> -b vlm-http-client -s 0 -e 3
Environment Variables (.env)
# Remote VLM server (OpenAI-compatible)
MINERU_VL_SERVER=https://your-llm-server.example.com
MINERU_VL_API_KEY=your-api-key
MINERU_VL_MODEL_NAME=your-model-name
# Required when server n_ctx is small (e.g., llama.cpp with 8192 context)
MINEROS_PROCESSING_WINDOW_SIZE=1
The .env file is loaded automatically via python-dotenv — no manual export needed.
Hardware Requirements
| Backend | pipeline | *-auto-engine | *-http-client | ||
|---|---|---|---|---|---|
| hybrid | vlm | hybrid | vlm | ||
| Pure CPU | ✅ | ❌ | ✅ | ||
| Min VRAM | 4 GB | 8 GB | 8 GB | 2 GB | None |
| Min RAM | 16 GB (32 GB recommended) | 16 GB | |||
| Python | 3.10 – 3.13 | ||||
| OS | Linux (2019+) · Windows · macOS 14+ | ||||
Docker
# Build
docker build -f docker/global/Dockerfile -t mineros:latest .
# Run via Compose
docker compose -f docker/compose.yaml up
Known Issues
- Reading order may be out of sequence in extremely complex multi-column layouts.
- Strikethrough detection relies on the VLM visually identifying struck text — accuracy depends on model capability and image resolution.
- Tables of contents and lists are recognized via rules; uncommon formats may be missed.
- Comic books, art albums, and heavily stylized documents parse poorly.
- OCR may produce inaccurate characters for lesser-known languages.
License
MinerOS is a derivative of MinerU (opendatalab), used and redistributed under the terms of the Apache 2.0 license as it existed at commit e148afa9. All modifications are also released under Apache 2.0.
Acknowledgments
MinerOS stands on the shoulders of MinerU and its dependencies:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
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 mineros-3.0.10.tar.gz.
File metadata
- Download URL: mineros-3.0.10.tar.gz
- Upload date:
- Size: 1.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
42df8bc9e48676348ca9ddf3e0b4aa75c859ce2b148cf0e705f04fed3d387955
|
|
| MD5 |
aa60fd91c2d4a37b3e9979f9432e9b6f
|
|
| BLAKE2b-256 |
c58d4306b4b09b65bf3197c701b74dc490615e61483c128801021c59816a6102
|
Provenance
The following attestation bundles were made for mineros-3.0.10.tar.gz:
Publisher:
publish.yml on loganpowell/MinerOS
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mineros-3.0.10.tar.gz -
Subject digest:
42df8bc9e48676348ca9ddf3e0b4aa75c859ce2b148cf0e705f04fed3d387955 - Sigstore transparency entry: 1796626715
- Sigstore integration time:
-
Permalink:
loganpowell/MinerOS@0fb17afbf28df17ad1afc30d00c12c1cdd7f64e7 -
Branch / Tag:
refs/tags/v3.0.10 - Owner: https://github.com/loganpowell
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0fb17afbf28df17ad1afc30d00c12c1cdd7f64e7 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mineros-3.0.10-py3-none-any.whl.
File metadata
- Download URL: mineros-3.0.10-py3-none-any.whl
- Upload date:
- Size: 1.4 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
08476ba2b687955598204666abf074eea76b24c1ce3bceac880f2520bf49589c
|
|
| MD5 |
058030e40b6ed59fc278e225fdba737c
|
|
| BLAKE2b-256 |
f377d98bab7e890471915b62880049a072d9c87d8b577962063f6d1ef6cdf36d
|
Provenance
The following attestation bundles were made for mineros-3.0.10-py3-none-any.whl:
Publisher:
publish.yml on loganpowell/MinerOS
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mineros-3.0.10-py3-none-any.whl -
Subject digest:
08476ba2b687955598204666abf074eea76b24c1ce3bceac880f2520bf49589c - Sigstore transparency entry: 1796626889
- Sigstore integration time:
-
Permalink:
loganpowell/MinerOS@0fb17afbf28df17ad1afc30d00c12c1cdd7f64e7 -
Branch / Tag:
refs/tags/v3.0.10 - Owner: https://github.com/loganpowell
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0fb17afbf28df17ad1afc30d00c12c1cdd7f64e7 -
Trigger Event:
push
-
Statement type: