Tools,

MinerU on a Mac, tested on a real scanned PDF

1,949

of 1,955 scan words, read in order

Get the setup

Ten scanned pages in 41 seconds

41 s for 10 pages, Mac GPU

2.1 GB model download

  1. Run pip install mineru in a fresh venv.
  2. Run mineru-kit models download --tier standard once.
  3. Run mineru.sh below next to book.pdf. It writes book.md.
mineru.sh
# One time: pip install "mineru==4.2.1", then mineru-kit models download --tier standard (2 GB)
export MINERU_TELEMETRY_DISABLED=1   # usage telemetry is on by default
mineru server start
mineru config set parse_server.local.managed_tier standard
mineru config set parse_server.local.mode managed
mineru server restart
# Every file: without --pages, a PDF stops after page 10
mineru parse book.pdf --pages all --no-marker --wait 1800 -o book.md

MinerU 4 runs a background server. The parse command sends your file to it, on your own Mac.

Out of the box, it says no

With no models and no parse server, the first parse stopped after 2.1 seconds:

quality_tier_unavailable

The message offers --tier flash, --remote or a local parse server. Remote uploads your file to mineru.net. I used the local server.

It stops at page 10

Without --pages, mineru parse reads the first 10 pages of a PDF. My 11-page file has a typed cover page, so the last scan page fell off.

11-page file, scan words in order, of 1,955
Command Pages Words
Default 1-10 1,779
--pages all 1-11 1,949

Flash, basic and standard

Standard adds the MinerU2.5 vision model, in llama.cpp. The error calls flash a text-only preview, but it read the scan too.

10-page scan, words in order, of 1,955
Tier Words Time
flash 1,899 57 s
basic 1,899 25 s
standard 1,949 41 s

Flash and basic wrote the same bytes. --tier advanced stopped with tier_mismatch on this server.

Small misses, page headers kept

Four of the 6 missed words were quote marks, moved or dropped. One was a dash, and one was "unloadin'", spelled out as "unloading'".

It keeps running heads and page numbers as text. Some became Markdown headings:

## THE UNCOMMON PRAYER-BOOK

German: 204 of 206 umlauts

The same command read 3 German pages in 25 s, with no language option.

3 German pages: umlauts, and words in order on the two-column page
Model Umlauts Columns
MinerU, standard 204 970
LightOnOCR-3 202 961
olmOCR-2 194 935
PaddleOCR-VL 188 956

The two-column page has 972 words.

Five words behind, 31 s faster

The same 10 scanned pages, scorer and Mac GPU:

Scan words in order, of 1,955
Model Words Time
LightOnOCR-2 1,954 72 s
olmOCR-2 1,954 77 s
MinerU, standard 1,949 41 s
PaddleOCR-VL 1,947 73 s

MinerU and our Actor: 4 wins, 0 losses

Our Actor, from a file URL, with no install:

curl -s -X POST "https://api.apify.com/v2/acts/brasspage~pdf-ocr-to-markdown/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"documentUrls": ["https://api.apify.com/v2/key-value-stores/sTnmNrGoSsi7tLQvs/records/anythingllm-mixed-11-pages.pdf"]}' \
  | jq -r '.[].markdown' > mixed.md
Same files, MinerU on the Mac GPU
Test MinerU Actor
Scan words in order 1,949 1,874
Typed cover words 13 13
Umlauts 204 192
Two columns, in order 970 954
Time, 11 pages 65 s 133 s

The MinerU time starts from a stopped server. The Actor needs no install, no GPU and no model download. It costs $0.006 a page.

Apache 2.0, plus two terms

I read the license and the model cards before the install. Business use is free below 100 million monthly users and USD 20 million monthly revenue.

An online service built on MinerU must say that it uses MinerU. On a Mac, the default model file comes from a personal Hugging Face repo with no license file.

How I tested it
  • Scan: the 10 pages of OCR in n8n, proofread Wikisource book scans, 1,955 true words. The 11-page file adds the 13-word typed cover page of AnythingLLM OCR.
  • German: the 3 pages of Paperless-ngx OCR, 1,887 words, 206 umlauts. One page has two columns, 972 words.
  • Score: true words found in order in book.md, with the scorer of the tessdata test. German: the scorer of Tesseract German.
  • mineru 4.2.1 with torch 2.15.0 on an Apple Silicon Mac GPU, at the lowest priority, 2 CPU threads, one file at a time.
  • Models: MinerU-4_models_torch revision 2b3afb8 (0.89 GB) and the MinerU2.5-Pro-2605-1.2B Q8_0 GGUF revision 9185688 (1.24 GB).
  • Times count the parse command with the server running, and --force so no run read a cached result. In the Actor table, the MinerU time also counts the server start. One run of each file.
  • The other model rows: the same files and scorer, on the same Mac, on November 12. They have their own pages.
  • The Actor: two real runs earlier the same day, build 0.1.65, on the same files.
What I did not test
  • The remote mineru.net service and its paid tiers.
  • vLLM, LMDeploy or MLX instead of llama.cpp.
  • The ONNX models of a Mac with an Intel CPU.
  • Tables, math, handwriting and rotated pages.
Sources

Two ways to skip the work

Run it yourself. Our Apify Actor turns scanned PDFs into Markdown, tables included.

Try the Actor

Or send us the scan. Tack, our AI, does the job for $29, up to 50 pages. First page free.

Get one page free

Questions people ask

Can MinerU run on a Mac?

Yes. On Apple Silicon, pip install mineru brings torch. Download the standard models and turn on the local parse server, and it uses the Mac GPU.

Why does MinerU stop at page 10?

mineru parse reads the first 10 pages of a PDF unless you add --pages all. On an 11-page file, the default dropped the last page.

Is MinerU free for commercial use?

Yes, below 100 million monthly users and USD 20 million monthly revenue. An online service built on it must say that it uses MinerU.