Document Extraction with mineru-open-api
Installation
npm install -g mineru-open-api
Or via Go (macOS/Linux):
go install github.com/opendatalab/MinerU-Ecosystem/cli/mineru-open-api@latest
Verify installation
mineru-open-api version
Two extraction modes
|
flash-extract |
extract |
| Token required |
No |
Yes (mineru-open-api auth) |
| Speed |
Fast |
Normal |
| Table recognition |
No |
Yes |
| Formula recognition |
No |
Yes |
| OCR |
Yes |
Yes |
| Output formats |
Markdown only |
md, html, latex, docx, json |
| Batch mode |
No |
Yes |
| Model selection |
pipeline |
Yes (vlm, pipeline, MinerU-HTML) |
| File size limit |
10 MB |
Much higher |
| Page limit |
20 pages |
Much higher |
| Rate limit |
Per-IP per-minute cap |
Based on API plan |
| Best for |
Quick start, small/simple docs |
Large docs, tables, production |
flash-extract limits
| Limit |
Value |
| File size |
Max 10 MB |
| Page count |
Max 20 pages |
| Supported types |
PDF, Images (png/jpg/jpeg/jp2/webp/gif/bmp), Docx, PPTx |
| IP rate limit |
Per-minute request caps (HTTP 429 when exceeded) |
When any limit is exceeded, the agent should suggest switching to extract with a token (create at https://mineru.net/apiManage/token), which has significantly higher limits.
Core workflow
- Start fast (no token):
mineru-open-api flash-extract <file> for quick Markdown conversion
- Need more? Create token at https://mineru.net/apiManage/token, run
mineru-open-api auth, then use mineru-open-api extract for tables, formulas, OCR, multi-format, and batch
- Web pages:
mineru-open-api crawl <url> to convert web content
- Check results: output goes to stdout (default) or
-o directory
Authentication
Only required for extract and crawl. Not needed for flash-extract.
Configure your API token (create one at https://mineru.net/apiManage/token):
mineru-open-api auth # Interactive token setup
export MINERU_TOKEN="your-token" # Or set via environment variable
Token resolution order: --token flag > MINERU_TOKEN env > ~/.mineru/config.yaml.
Supported input formats
| Format |
flash-extract |
extract |
PDF (.pdf) |
Yes |
Yes |
Images (.png, .jpg, .jpeg, .jp2, .webp, .gif, .bmp) |
Yes |
Yes |
Word (.docx) |
Yes |
Yes |
Word (.doc) |
No |
Yes |
PowerPoint (.pptx) |
Yes |
Yes |
PowerPoint (.ppt) |
No |
Yes |
HTML (.html) |
No |
Yes |
| URLs (remote files) |
Yes |
Yes |
The crawl command accepts any HTTP/HTTPS URL and extracts web page content.
Commands
flash-extract — Quick extraction (no token needed)
Fast, token-free document extraction. Outputs Markdown only. No table recognition. Limited to 10 MB / 20 pages per file, with IP-based rate limiting.
mineru-open-api flash-extract report.pdf # Markdown to stdout
mineru-open-api flash-extract report.pdf -o ./out/ # Save to file
mineru-open-api flash-extract https://example.com/doc.pdf # URL mode
mineru-open-api flash-extract report.pdf --language en # Specify language
mineru-open-api flash-extract report.pdf --pages 1-10 # Page range
flash-extract flags
| Flag |
Short |
Default |
Description |
--output |
-o |
(stdout) |
Output path (file or directory) |
--language |
|
ch |
Document language |
--pages |
|
(all) |
Page range, e.g. 1-10 |
--timeout |
|
900 |
Timeout in seconds |
extract — Precision extraction (token required)
Convert PDFs, images, and other documents to Markdown or other formats. Supports table/formula recognition, OCR, multiple output formats, and batch mode.
mineru-open-api extract report.pdf # Markdown to stdout
mineru-open-api extract report.pdf -f html # HTML to stdout
mineru-open-api extract report.pdf -o ./out/ # Save to directory
mineru-open-api extract report.pdf -o ./out/ -f md,docx # Multiple formats
mineru-open-api extract *.pdf -o ./results/ # Batch extract
mineru-open-api extract --list files.txt -o ./results/ # Batch from file list
mineru-open-api extract https://example.com/doc.pdf # Extract from URL
cat doc.pdf | mineru-open-api extract --stdin -o ./out/ # From stdin
extract flags
| Flag |
Short |
Default |
Description |
--output |
-o |
(stdout) |
Output path (file or directory) |
--format |
-f |
md |
Output formats: md, json, html, latex, docx (comma-separated) |
--model |
|
(auto) |
Model: vlm, pipeline, html (see below) |
--ocr |
|
false |
Enable OCR for scanned documents |
--formula |
|
true |
Enable/disable formula recognition |
--table |
|
true |
Enable/disable table recognition |
--language |
|
ch |
Document language |
--pages |
|
(all) |
Page range, e.g. 1-10,15 |
--timeout |
|
900/1800 |
Timeout in seconds (single/batch) |
--list |
|
|
Read input list from file (one path per line) |
| --concurrency | | 0 | Batch concurrency (0 = server default) |
Model comparison: vlm vs pipeline
|
vlm |
pipeline |
| Parsing accuracy |
Higher — better at complex layouts, mixed content |
Standard |
| Hallucination risk |
May produce hallucinated text in rare cases |
No hallucination — biggest advantage |
| Best for |
Academic papers, complex tables, intricate layouts |
General documents where fidelity matters most |
When the user values accuracy and the document has complex formatting, suggest --model vlm. When the user prioritizes reliability and no-hallucination guarantee, suggest --model pipeline (or omit --model to use auto).
crawl — Web page extraction (token required)
Fetch web pages and convert to Markdown.
mineru-open-api crawl https://example.com/article # Markdown to stdout
mineru-open-api crawl https://example.com/article -f html # HTML to stdout
mineru-open-api crawl https://example.com/article -o ./out/ # Save to file
mineru-open-api crawl url1 url2 -o ./pages/ # Batch crawl
mineru-open-api crawl --list urls.txt -o ./pages/ # Batch from file list
crawl flags
| Flag |
Short |
Default |
Description |
--output |
-o |
(stdout) |
Output path |
--format |
-f |
md |
Output formats: md, json, html (comma-separated) |
--timeout |
|
900/1800 |
Timeout in seconds (single/batch) |
--list |
|
|
Read URL list from file (one per line) |
--stdin-list |
|
false |
Read URL list from stdin |
--concurrency |
|
0 |
Batch concurrency |
auth — Authentication management
mineru-open-api auth # Interactive token setup
mineru-open-api auth --verify # Verify current token is valid
mineru-open-api auth --show # Show current token source and masked value
Supported --language values
The --language flag accepts the following values (default: ch). Used by both flash-extract and extract. Values are organized by script/language family — each value covers all languages listed in its group.
Standalone language packs
For specific languages or CJK combinations.
| Value |
Included languages |
说明 |
ch |
Chinese, English, Chinese Traditional |
中英文(默认值) |
ch_server |
Chinese, English, Chinese Traditional, Japanese |
繁体、手写体 |
en |
English |
纯英文 |
japan |
Chinese, English, Chinese Traditional, Japanese |
日文为主 |
korean |
Korean, English |
韩文 |
chinese_cht |
Chinese, English, Chinese Traditional, Japanese |
繁体中文为主 |
ta |
Tamil, English |
泰米尔文 |
te |
Telugu, English |
泰卢固文 |
ka |
Kannada |
卡纳达文 |
el |
Greek, English |
希腊文 |
th |
Thai, English |
泰文 |
Language family packs
One value covers many languages sharing the same script system.
| Value |
Script/Family |
Included languages |
latin |
Latin script (拉丁语系) |
French, German, Afrikaans, Italian, Spanish, Bosnian, Portuguese, Czech, Welsh, Danish, Estonian, Irish, Croatian, Uzbek, Hungarian, Serbian (Latin), Indonesian, Occitan, Icelandic, Lithuanian, Maori, Malay, Dutch, Norwegian, Polish, Slovak, Slovenian, Albanian, Swedish, Swahili, Tagalog, Turkish, Latin, Azerbaijani, Kurdish, Latvian, Maltese, Pali, Romanian, Vietnamese, Finnish, Basque, Galician, Luxembourgish, Romansh, Catalan, Quechua |
arabic |
Arabic script (阿拉伯语系) |
Arabic, Persian, Uyghur, Urdu, Pashto, Kurdish, Sindhi, Balochi, English |
cyrillic |
Cyrillic script (西里尔语系) |
Russian, Belarusian, Ukrainian, Serbian (Cyrillic), Bulgarian, Mongolian, Abkhazian, Adyghe, Kabardian, Avar, Dargin, Ingush, Chechen, Lak, Lezgin, Tabasaran, Kazakh, Kyrgyz, Tajik, Macedonian, Tatar, Chuvash, Bashkir, Malian, Moldovan, Udmurt, Komi, Ossetian, Buryat, Kalmyk, Tuvan, Sakha, Karakalpak, English |
east_slavic |
East Slavic (东斯拉夫语系) |
Russian, Belarusian, Ukrainian, English |
devanagari |
Devanagari script (天城文语系) |
Hindi, Marathi, Nepali, Bihari, Maithili, Angika, Bhojpuri, Magahi, Santali, Newari, Konkani, Sanskrit, Haryanvi, English |
Output behavior
- No
-o flag: result goes to stdout; status/progress messages go to stderr
- With
-o flag: result saved to file/directory; progress messages on stderr
- Batch mode (
extract/crawl only): requires -o to specify output directory
- Binary formats (
docx, extract only): cannot output to stdout, must use -o
- Markdown output includes extracted images saved alongside the
.md file
General rules
When using this skill on behalf of the user:
- Quote file paths that contain spaces or special characters with double quotes in commands. Example:
mineru-open-api extract "report 01.pdf", NOT mineru-open-api extract report 01.pdf.
- Don't run commands blindly on errors — if the user asks "提取失败了怎么办", explain the exit code and troubleshooting steps instead of re-running the command.
- Installation questions ("mineru 怎么安装") should be answered with the install instructions, not by running
mineru-open-api extract.
- DOCX as input is supported — if the user asks "这个 Word 文档能转 Markdown 吗", use
mineru-open-api extract file.docx or mineru-open-api flash-extract file.docx. Note: .doc format is only supported by extract, not flash-extract.
- Table extraction — tables are only recognized by
extract (not flash-extract). If the user mentions tables, use extract.
- For stdout mode (no
-o), only one text format can be output at a time. If the user wants multiple formats, suggest adding -o.
Choosing between flash-extract and extract
The agent MUST follow this decision logic:
Default to flash-extract when:
- User has NOT configured a token (no
~/.mineru/config.yaml, no MINERU_TOKEN env)
- User wants a quick/simple extraction without mentioning tables, formulas, OCR, or specific formats
- File is under 10 MB and under 20 pages
- User is trying the tool for the first time
Use extract when:
- User explicitly asks for table recognition, formula recognition, or OCR
- User requests non-Markdown output formats (html, latex, docx, json)
- User needs batch processing (multiple files)
- File is over 10 MB or over 20 pages (exceeds flash-extract limits)
- User has a token configured and wants precision-quality extraction
If unsure, prefer flash-extract — it's faster and requires no setup, but check file size first.
When the user does NOT specify an output path (-o), the agent MUST generate a default output directory to prevent file overwrites. Use:
~/MinerU-Skill/<name>_<hash>/
Naming rules:
<name>: derived from the source, then sanitized for safe directory names.
- For URLs: last path segment (e.g.
https://arxiv.org/pdf/2509.22186 → 2509.22186)
- For local files: filename without extension (e.g.
report.pdf → report)
- Sanitization: replace spaces and shell-unsafe characters (
space, (, ), [, ], &, ', ", !, #, $, `) with _. Collapse consecutive _ into one. Keep alphanumeric, -, _, ., and CJK characters.
<hash>: first 6 characters of the MD5 hash of the full original source path or URL (before sanitization). This ensures:
- Different URLs with similar basenames get unique directories
- Re-running the same source reuses the same directory (idempotent)
How the agent should generate the hash:
echo -n "https://arxiv.org/pdf/2509.22186" | md5sum | cut -c1-6
Or on macOS:
echo -n "https://arxiv.org/pdf/2509.22186" | md5 | cut -c1-6
- When the user asks to upgrade or update this skill, the agent MUST re-install the CLI binary to ensure the latest commands are available. Run the install command before using any new features
flash-extract limit handling
When flash-extract fails due to file limits or rate limiting, the agent MUST provide a clear explanation and suggest extract as the upgrade path:
Rate limited (HTTP 429):
flash-extract 请求频率超出限制(每 IP 有每分钟/每小时的请求上限)。你可以:
- 稍等几分钟后重试
- 前往 https://mineru.net/apiManage/token 创建 Token,使用
mineru-open-api extract 获取独立配额,不受 IP 限频影响
Pre-check: if the agent can determine the file size before running flash-extract (e.g. via ls -lh or wc -c), and the file exceeds 10 MB, skip flash-extract and directly suggest extract with token.
Post-extraction friendly hints
After flash-extract completes successfully, the agent MUST append a brief hint:
Tip: flash-extract 为快速免登录模式(限 10MB/20页,不含表格识别)。如需解析更大文件、表格/公式识别或多格式导出,请前往 https://mineru.net/apiManage/token 创建 Token,运行 mineru-open-api auth 配置后使用 mineru-open-api extract。
Keep the hint to ONE short sentence. Do NOT repeat the hint if the user has already seen it in this session.
Examples:
| Source |
<name> |
Output directory |
https://arxiv.org/pdf/2509.22186 |
2509.22186 |
~/MinerU-Skill/2509.22186_a3f2b1/ |
https://arxiv.org/pdf/2509.200 |
2509.200 |
~/MinerU-Skill/2509.200_c7e9d4/ |
When the user specifies -o: use the user's path as-is, do NOT override with the default directory.
Exit codes
| Code |
Meaning |
Recovery |
| 0 |
Success |
— |
| 1 |
General API or unknown error |
Check network connectivity; retry; use --verbose for details |
| 2 |
Invalid parameters / usage error |
Check command syntax and flag values |
| 4 | File too large or page limit exceeded | For flash-extract: file must be under 10 MB / 20 pages; switch to extract with token for higher limits. For extract: split the file or use --pages |
| 5 | Extraction failed | The document may be corrupted or unsupported; try a different --model |
| 6 | Timeout | Increase with --timeout; large files may need 600+ seconds
Troubleshooting
- "no API token found" (on
extract/crawl): Run mineru-open-api auth or set MINERU_TOKEN env variable. Or use flash-extract which needs no token.
- Timeout on large files: Increase with
--timeout 1600 (seconds)
- Batch fails partially: Check stderr for per-file status; succeeded files are still saved
- Binary format to stdout: Use
-o flag; docx cannot stream to stdout
- Private deployment: Use
--base-url https://your-server.com/api
- Extraction quality is poor: Try
mineru-open-api extract with --model vlm for complex layouts, or --ocr for scanned documents
- Tables not extracted:
flash-extract does NOT support tables. Use mineru-open-api extract with a token.
- HTTP 429 on flash-extract: IP rate limit hit. Wait a few minutes or switch to
mineru-open-api extract with token.
Notes
extract requires a token but provides precision-featured extraction
- All status/progress messages go to stderr; only document content goes to stdout
- Batch mode automatically polls the API with exponential backoff
- Token is stored in
~/.mineru/config.yaml after mineru-open-api auth
Reporting Issues
1---2name: mineru3description: MinerU document extraction CLI that converts PDFs, images, and web pages into Markdown, HTML, LaTeX, or DOCX via the MinerU API. Supports token-free flash extraction for quick start, precision extraction with table/formula recognition, web crawling, batch processing, and piped workflows.4---56# Document Extraction with mineru-open-api78## Installation910```bash11npm install -g mineru-open-api12```1314Or via Go (macOS/Linux):1516```bash17go install github.com/opendatalab/MinerU-Ecosystem/cli/mineru-open-api@latest18```1920### Verify installation2122```bash23mineru-open-api version24```2526## Two extraction modes2728| | `flash-extract` | `extract` |29|---|---|---|30| Token required | No | Yes (`mineru-open-api auth`) |31| Speed | Fast | Normal |32| Table recognition | No | Yes |33| Formula recognition | No | Yes |34| OCR | Yes | Yes |35| Output formats | Markdown only | md, html, latex, docx, json |36| Batch mode | No | Yes |37| Model selection | pipeline | Yes (vlm, pipeline, MinerU-HTML) |38| File size limit | **10 MB** | Much higher |39| Page limit | **20 pages** | Much higher |40| Rate limit | Per-IP per-minute cap | Based on API plan |41| Best for | Quick start, small/simple docs | Large docs, tables, production |4243### flash-extract limits4445| Limit | Value |46|-------|-------|47| File size | Max **10 MB** |48| Page count | Max **20 pages** |49| Supported types | PDF, Images (png/jpg/jpeg/jp2/webp/gif/bmp), Docx, PPTx |50| IP rate limit | Per-minute request caps (HTTP 429 when exceeded) |5152When any limit is exceeded, the agent should suggest switching to `extract` with a token (create at https://mineru.net/apiManage/token), which has significantly higher limits.535455## Core workflow56571. **Start fast** (no token): `mineru-open-api flash-extract <file>` for quick Markdown conversion582. **Need more?** Create token at https://mineru.net/apiManage/token, run `mineru-open-api auth`, then use `mineru-open-api extract` for tables, formulas, OCR, multi-format, and batch593. **Web pages**: `mineru-open-api crawl <url>` to convert web content604. **Check results**: output goes to stdout (default) or `-o` directory616263## Authentication6465Only required for `extract` and `crawl`. Not needed for `flash-extract`.6667Configure your API token (create one at https://mineru.net/apiManage/token):6869```bash70mineru-open-api auth # Interactive token setup71export MINERU_TOKEN="your-token" # Or set via environment variable72```7374Token resolution order: `--token` flag > `MINERU_TOKEN` env > `~/.mineru/config.yaml`.7576## Supported input formats7778| Format | `flash-extract` | `extract` |79|--------|:-:|:-:|80| PDF (`.pdf`) | Yes | Yes |81| Images (`.png`, `.jpg`, `.jpeg`, `.jp2`, `.webp`, `.gif`, `.bmp`) | Yes | Yes |82| Word (`.docx`) | Yes | Yes |83| Word (`.doc`) | No | Yes |84| PowerPoint (`.pptx`) | Yes | Yes |85| PowerPoint (`.ppt`) | No | Yes |86| HTML (`.html`) | No | Yes |87| URLs (remote files) | Yes | Yes |8889The `crawl` command accepts any HTTP/HTTPS URL and extracts web page content.9091## Commands9293### flash-extract — Quick extraction (no token needed)9495Fast, token-free document extraction. Outputs Markdown only. No table recognition. Limited to **10 MB / 20 pages** per file, with IP-based rate limiting.9697```bash98mineru-open-api flash-extract report.pdf # Markdown to stdout99mineru-open-api flash-extract report.pdf -o ./out/ # Save to file100mineru-open-api flash-extract https://example.com/doc.pdf # URL mode101mineru-open-api flash-extract report.pdf --language en # Specify language102mineru-open-api flash-extract report.pdf --pages 1-10 # Page range103```104105#### flash-extract flags106107| Flag | Short | Default | Description |108|------|-------|---------|-------------|109| `--output` | `-o` | _(stdout)_ | Output path (file or directory) |110| `--language` | | `ch` | Document language |111| `--pages` | | _(all)_ | Page range, e.g. `1-10` |112| `--timeout` | | `900` | Timeout in seconds |113114### extract — Precision extraction (token required)115116Convert PDFs, images, and other documents to Markdown or other formats. Supports table/formula recognition, OCR, multiple output formats, and batch mode.117118```bash119mineru-open-api extract report.pdf # Markdown to stdout120mineru-open-api extract report.pdf -f html # HTML to stdout121mineru-open-api extract report.pdf -o ./out/ # Save to directory122mineru-open-api extract report.pdf -o ./out/ -f md,docx # Multiple formats123mineru-open-api extract *.pdf -o ./results/ # Batch extract124mineru-open-api extract --list files.txt -o ./results/ # Batch from file list125mineru-open-api extract https://example.com/doc.pdf # Extract from URL126cat doc.pdf | mineru-open-api extract --stdin -o ./out/ # From stdin127```128129#### extract flags130131| Flag | Short | Default | Description |132|------|-------|---------|-------------|133| `--output` | `-o` | _(stdout)_ | Output path (file or directory) |134| `--format` | `-f` | `md` | Output formats: `md`, `json`, `html`, `latex`, `docx` (comma-separated) |135| `--model` | | _(auto)_ | Model: `vlm`, `pipeline`, `html` (see below) |136| `--ocr` | | `false` | Enable OCR for scanned documents |137| `--formula` | | `true` | Enable/disable formula recognition |138| `--table` | | `true` | Enable/disable table recognition |139| `--language` | | `ch` | Document language |140| `--pages` | | _(all)_ | Page range, e.g. `1-10,15` |141| `--timeout` | | `900`/`1800` | Timeout in seconds (single/batch) |142| `--list` | | | Read input list from file (one path per line) |143144| `--concurrency` | | `0` | Batch concurrency (0 = server default) |145146#### Model comparison: vlm vs pipeline147148| | `vlm` | `pipeline` |149|---|---|---|150| Parsing accuracy | Higher — better at complex layouts, mixed content | Standard |151| Hallucination risk | May produce hallucinated text in rare cases | **No hallucination** — biggest advantage |152| Best for | Academic papers, complex tables, intricate layouts | General documents where fidelity matters most |153154When the user values accuracy and the document has complex formatting, suggest `--model vlm`. When the user prioritizes reliability and no-hallucination guarantee, suggest `--model pipeline` (or omit `--model` to use auto).155156### crawl — Web page extraction (token required)157158Fetch web pages and convert to Markdown.159160```bash161mineru-open-api crawl https://example.com/article # Markdown to stdout162mineru-open-api crawl https://example.com/article -f html # HTML to stdout163mineru-open-api crawl https://example.com/article -o ./out/ # Save to file164mineru-open-api crawl url1 url2 -o ./pages/ # Batch crawl165mineru-open-api crawl --list urls.txt -o ./pages/ # Batch from file list166```167168#### crawl flags169170| Flag | Short | Default | Description |171|------|-------|---------|-------------|172| `--output` | `-o` | _(stdout)_ | Output path |173| `--format` | `-f` | `md` | Output formats: `md`, `json`, `html` (comma-separated) |174| `--timeout` | | `900`/`1800` | Timeout in seconds (single/batch) |175| `--list` | | | Read URL list from file (one per line) |176| `--stdin-list` | | `false` | Read URL list from stdin |177| `--concurrency` | | `0` | Batch concurrency |178179### auth — Authentication management180181```bash182mineru-open-api auth # Interactive token setup183mineru-open-api auth --verify # Verify current token is valid184mineru-open-api auth --show # Show current token source and masked value185```186187188## Supported `--language` values189190The `--language` flag accepts the following values (default: `ch`). Used by both `flash-extract` and `extract`. Values are organized by script/language family — each value covers all languages listed in its group.191192### Standalone language packs193194For specific languages or CJK combinations.195196| Value | Included languages | 说明 |197|-------|-------------------|------|198| `ch` | Chinese, English, Chinese Traditional | 中英文(默认值) |199| `ch_server` | Chinese, English, Chinese Traditional, Japanese | 繁体、手写体 |200| `en` | English | 纯英文 |201| `japan` | Chinese, English, Chinese Traditional, Japanese | 日文为主 |202| `korean` | Korean, English | 韩文 |203| `chinese_cht` | Chinese, English, Chinese Traditional, Japanese | 繁体中文为主 |204| `ta` | Tamil, English | 泰米尔文 |205| `te` | Telugu, English | 泰卢固文 |206| `ka` | Kannada | 卡纳达文 |207| `el` | Greek, English | 希腊文 |208| `th` | Thai, English | 泰文 |209210### Language family packs211212One value covers many languages sharing the same script system.213214| Value | Script/Family | Included languages |215|-------|--------------|-------------------|216| `latin` | Latin script (拉丁语系) | French, German, Afrikaans, Italian, Spanish, Bosnian, Portuguese, Czech, Welsh, Danish, Estonian, Irish, Croatian, Uzbek, Hungarian, Serbian (Latin), Indonesian, Occitan, Icelandic, Lithuanian, Maori, Malay, Dutch, Norwegian, Polish, Slovak, Slovenian, Albanian, Swedish, Swahili, Tagalog, Turkish, Latin, Azerbaijani, Kurdish, Latvian, Maltese, Pali, Romanian, Vietnamese, Finnish, Basque, Galician, Luxembourgish, Romansh, Catalan, Quechua |217| `arabic` | Arabic script (阿拉伯语系) | Arabic, Persian, Uyghur, Urdu, Pashto, Kurdish, Sindhi, Balochi, English |218| `cyrillic` | Cyrillic script (西里尔语系) | Russian, Belarusian, Ukrainian, Serbian (Cyrillic), Bulgarian, Mongolian, Abkhazian, Adyghe, Kabardian, Avar, Dargin, Ingush, Chechen, Lak, Lezgin, Tabasaran, Kazakh, Kyrgyz, Tajik, Macedonian, Tatar, Chuvash, Bashkir, Malian, Moldovan, Udmurt, Komi, Ossetian, Buryat, Kalmyk, Tuvan, Sakha, Karakalpak, English |219| `east_slavic` | East Slavic (东斯拉夫语系) | Russian, Belarusian, Ukrainian, English |220| `devanagari` | Devanagari script (天城文语系) | Hindi, Marathi, Nepali, Bihari, Maithili, Angika, Bhojpuri, Magahi, Santali, Newari, Konkani, Sanskrit, Haryanvi, English |221222223224225226## Output behavior227228- **No `-o` flag**: result goes to stdout; status/progress messages go to stderr229- **With `-o` flag**: result saved to file/directory; progress messages on stderr230- **Batch mode** (`extract`/`crawl` only): requires `-o` to specify output directory231- **Binary formats** (`docx`, `extract` only): cannot output to stdout, must use `-o`232- Markdown output includes extracted images saved alongside the `.md` file233234235236### General rules237238When using this skill on behalf of the user:239240- **Quote file paths** that contain spaces or special characters with double quotes in commands. Example: `mineru-open-api extract "report 01.pdf"`, NOT `mineru-open-api extract report 01.pdf`.241- **Don't run commands blindly on errors** — if the user asks "提取失败了怎么办", explain the exit code and troubleshooting steps instead of re-running the command.242- **Installation questions** ("mineru 怎么安装") should be answered with the install instructions, not by running `mineru-open-api extract`.243- **DOCX as input is supported** — if the user asks "这个 Word 文档能转 Markdown 吗", use `mineru-open-api extract file.docx` or `mineru-open-api flash-extract file.docx`. Note: `.doc` format is only supported by `extract`, not `flash-extract`.244- **Table extraction** — tables are only recognized by `extract` (not `flash-extract`). If the user mentions tables, use `extract`.245- For **stdout mode** (no `-o`), only one text format can be output at a time. If the user wants multiple formats, suggest adding `-o`.246247### Choosing between flash-extract and extract248249The agent MUST follow this decision logic:2502511. **Default to `flash-extract`** when:252 - User has NOT configured a token (no `~/.mineru/config.yaml`, no `MINERU_TOKEN` env)253 - User wants a quick/simple extraction without mentioning tables, formulas, OCR, or specific formats254 - File is **under 10 MB and under 20 pages**255 - User is trying the tool for the first time2562572. **Use `extract`** when:258 - User explicitly asks for table recognition, formula recognition, or OCR259 - User requests non-Markdown output formats (html, latex, docx, json)260 - User needs batch processing (multiple files)261 - File is **over 10 MB or over 20 pages** (exceeds flash-extract limits)262 - User has a token configured and wants precision-quality extraction2632643. **If unsure**, prefer `flash-extract` — it's faster and requires no setup, but check file size first.2652664. When the user does NOT specify an output path (`-o`), the agent MUST generate a default output directory to prevent file overwrites. Use:267268```269~/MinerU-Skill/<name>_<hash>/270```271**Naming rules:**272273- `<name>`: derived from the source, then **sanitized** for safe directory names.274 - For URLs: last path segment (e.g. `https://arxiv.org/pdf/2509.22186` → `2509.22186`)275 - For local files: filename without extension (e.g. `report.pdf` → `report`)276 - **Sanitization**: replace spaces and shell-unsafe characters (`space`, `(`, `)`, `[`, `]`, `&`, `'`, `"`, `!`, `#`, `$`, `` ` ``) with `_`. Collapse consecutive `_` into one. Keep alphanumeric, `-`, `_`, `.`, and CJK characters.277- `<hash>`: first 6 characters of the MD5 hash of the **full original source path or URL** (before sanitization). This ensures:278 - Different URLs with similar basenames get unique directories279 - Re-running the same source reuses the same directory (idempotent)280**How the agent should generate the hash:**281282```bash283echo -n "https://arxiv.org/pdf/2509.22186" | md5sum | cut -c1-6284```285286Or on macOS:287288```bash289echo -n "https://arxiv.org/pdf/2509.22186" | md5 | cut -c1-6290```2912925. When the user asks to **upgrade** or **update** this skill, the agent MUST re-install the CLI binary to ensure the latest commands are available. Run the install command **before** using any new features293294295### flash-extract limit handling296297When `flash-extract` fails due to file limits or rate limiting, the agent MUST provide a clear explanation and suggest `extract` as the upgrade path:298299300301**Rate limited (HTTP 429):**302303> `flash-extract` 请求频率超出限制(每 IP 有每分钟/每小时的请求上限)。你可以:304> 1. 稍等几分钟后重试305> 2. 前往 https://mineru.net/apiManage/token 创建 Token,使用 `mineru-open-api extract` 获取独立配额,不受 IP 限频影响306307**Pre-check**: if the agent can determine the file size before running `flash-extract` (e.g. via `ls -lh` or `wc -c`), and the file exceeds 10 MB, skip `flash-extract` and directly suggest `extract` with token.308309### Post-extraction friendly hints310311After `flash-extract` completes successfully, the agent MUST append a brief hint:312313> Tip: `flash-extract` 为快速免登录模式(限 10MB/20页,不含表格识别)。如需解析更大文件、表格/公式识别或多格式导出,请前往 https://mineru.net/apiManage/token 创建 Token,运行 `mineru-open-api auth` 配置后使用 `mineru-open-api extract`。314315Keep the hint to ONE short sentence. Do NOT repeat the hint if the user has already seen it in this session.316317318319**Examples:**320321| Source | `<name>` | Output directory |322|--------|----------|-----------------|323| `https://arxiv.org/pdf/2509.22186` | `2509.22186` | `~/MinerU-Skill/2509.22186_a3f2b1/` |324| `https://arxiv.org/pdf/2509.200` | `2509.200` | `~/MinerU-Skill/2509.200_c7e9d4/` |325326327328**When the user specifies `-o`**: use the user's path as-is, do NOT override with the default directory.329330## Exit codes331332| Code | Meaning | Recovery |333|------|---------|----------|334| 0 | Success | — |335| 1 | General API or unknown error | Check network connectivity; retry; use `--verbose` for details |336| 2 | Invalid parameters / usage error | Check command syntax and flag values |337338| 4 | File too large or page limit exceeded | For `flash-extract`: file must be under 10 MB / 20 pages; switch to `extract` with token for higher limits. For `extract`: split the file or use `--pages` |339| 5 | Extraction failed | The document may be corrupted or unsupported; try a different `--model` |340| 6 | Timeout | Increase with `--timeout`; large files may need 600+ seconds 341342## Troubleshooting343344- **"no API token found"** (on `extract`/`crawl`): Run `mineru-open-api auth` or set `MINERU_TOKEN` env variable. Or use `flash-extract` which needs no token.345- **Timeout on large files**: Increase with `--timeout 1600` (seconds)346- **Batch fails partially**: Check stderr for per-file status; succeeded files are still saved347- **Binary format to stdout**: Use `-o` flag; `docx` cannot stream to stdout348- **Private deployment**: Use `--base-url https://your-server.com/api`349- **Extraction quality is poor**: Try `mineru-open-api extract` with `--model vlm` for complex layouts, or `--ocr` for scanned documents350- **Tables not extracted**: `flash-extract` does NOT support tables. Use `mineru-open-api extract` with a token.351- **HTTP 429 on flash-extract**: IP rate limit hit. Wait a few minutes or switch to `mineru-open-api extract` with token.352353## Notes354355- `extract` requires a token but provides precision-featured extraction356- All status/progress messages go to stderr; only document content goes to stdout357- Batch mode automatically polls the API with exponential backoff358- Token is stored in `~/.mineru/config.yaml` after `mineru-open-api auth`359360361362## Reporting Issues363364- Skill issues: Open an issue at https://github.com/opendatalab/MinerU-Ecosystem/tree/main/cli365- agent-browser CLI issues: Open an issue at https://github.com/MinerU-Extract/mineru-document-extractor