Windows CPU Setup#
This page records the Windows CPU-only MinerU profiling setup that has been validated for Tabulus.
Use this path when you want to run tabulus profile on Windows without Docker, Conda, or an NVIDIA GPU. The CPU-compatible MinerU backend is pipeline.
The command examples on this page use Windows Command Prompt (cmd.exe) unless PowerShell is shown explicitly.
Validated Environment#
The validated setup was:
Windows 11
Python 3.12.10
standard Python virtual environment
Tabulus installed from the local repository
MinerU 3.4.5 with the
pipelineextraPyTorch 2.10.0+cpu
CUDA unavailable, as expected for CPU-only testing
Expected verification state:
Python 3.12.10
MinerU 3.4.5
PyTorch 2.10.0+cpu
CUDA available: False
Clean Reinstall / Start From Scratch#
This section is optional. A first-time installation does not need it.
If you are resetting a local development checkout, run these commands from Windows Command Prompt in the repository root:
deactivate
rmdir /s /q .venv
rmdir /s /q .pytest_cache
rmdir /s /q src\tabulus.egg-info
for /d /r %d in (__pycache__) do @if exist "%d" rmdir /s /q "%d"
deactivate is only needed if a virtual environment is active. “Directory not found” messages for cleanup targets are harmless.
These commands remove local Python and development artifacts only. They do not delete source code or previously generated tabulus-output profiling results.
Create The Environment#
From the repository root, create the virtual environment explicitly with Python 3.12:
py -3.12 -m venv .venv
If the py launcher is ambiguous or points to the wrong interpreter, use the absolute Python 3.12 executable instead.
Command Prompt:
"C:\Path\To\Python312\python.exe" -m venv .venv
PowerShell:
& "C:\Path\To\Python312\python.exe" -m venv .venv
Activate the environment:
.venv\Scripts\activate
Verify Python:
python --version
Install Tabulus#
Upgrade pip:
python -m pip install --upgrade pip
For normal library use, install Tabulus from the local checkout:
python -m pip install -e .
For development and testing, install the development extra instead:
python -m pip install -e ".[dev]"
You do not need to run python -m pip install -e . first if you use python -m pip install -e ".[dev]".
Verify the CLI:
tabulus --version
Install CPU-Only PyTorch#
Install the validated CPU-only PyTorch pins:
python -m pip install "torch==2.10.0+cpu" "torchvision==0.25.0+cpu" --extra-index-url https://download.pytorch.org/whl/cpu
Install MinerU Pipeline#
Install MinerU 3.4.5 with the CPU-compatible pipeline extra while retaining the CPU PyTorch pins:
python -m pip install six "mineru[pipeline]==3.4.5" "torch==2.10.0+cpu" "torchvision==0.25.0+cpu" --extra-index-url https://download.pytorch.org/whl/cpu
six is included here as a compatibility workaround for the tested MinerU 3.4.5 Windows CPU setup. MinerU 3.4.5’s bundled OCR implementation imports six, but that package is not declared in its pipeline dependency set. This is not a Tabulus dependency, and it should not be generalized to later MinerU releases unless those versions are verified.
For the MinerU options and output artifacts used by Tabulus, see MinerU.
Verify The Installation#
Check the versions and CUDA state:
python --version
mineru --version
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
The expected state is:
Python 3.12.10
MinerU 3.4.5
2.10.0+cpu
False
Complete Command Prompt Sequence#
From a clean checkout, the complete validated Windows CPU setup and profiling sequence is:
"C:\Path\To\Python312\python.exe" -m venv .venv
.venv\Scripts\activate
python --version
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
tabulus --version
python -m pip install "torch==2.10.0+cpu" "torchvision==0.25.0+cpu" --extra-index-url https://download.pytorch.org/whl/cpu
python -m pip install six "mineru[pipeline]==3.4.5" "torch==2.10.0+cpu" "torchvision==0.25.0+cpu" --extra-index-url https://download.pytorch.org/whl/cpu
python --version
mineru --version
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
python -m pytest -v
tabulus profile --pdf "C:\path\to\paper.pdf" --backend pipeline
Run CPU Profiling#
Run MinerU through the Tabulus CLI with the CPU-compatible backend:
tabulus profile --pdf "C:\path\to\paper.pdf" --backend pipeline
tabulus profile writes MinerU stdout, stderr, and Tabulus run metadata logs into the profiling output tree.
After a successful MinerU run, tabulus profile also exports canonical MinerU table crops into a normalized Tabulus handoff by default.
If --out is omitted, Tabulus writes to:
<PDF directory>\tabulus-output\<profiler>\<backend>\
For MinerU pipeline profiling, that means:
<PDF directory>\tabulus-output\mineru\pipeline\
mineru is the profiler. pipeline and hybrid-engine are MinerU backends.
The tabulus-output\mineru\pipeline\ directory is the profiler/backend output root passed to MinerU. MinerU then keeps its own native document/run hierarchy underneath that root:
<PDF directory>\
tabulus-output\
mineru\
pipeline\
<PDF stem>\
<MinerU-native run directory>\
For the validated MinerU 3.4.5 Windows CPU run with pipeline + auto, MinerU produced the native run directory auto:
<papers-folder>\
tabulus-output\
mineru\
pipeline\
<document>\
auto\
images\
<document>_content_list.json
<document>_content_list_v2.json
<document>_layout.pdf
<document>_middle.json
<document>_model.json
mineru_stdout.log
mineru_stderr.log
tabulus_run.txt
The levels are:
mineru: profilerpipeline: backend<document>: document directoryauto: MinerU-native run directory observed for this validatedpipeline+autorun
auto is meaningful MinerU output behavior, not a generic Tabulus directory. Native run-directory naming belongs to MinerU and can differ by backend; the validated hybrid-engine + auto GPU workflow produced hybrid_auto.
Do not flatten or rename MinerU-native output files. Tabulus discovers the nested *_content_list.json and referenced images from that output tree.
The default normalized table-crop handoff is separate from the native MinerU output:
<PDF directory>\tabulus-output\table-crops\<PDF stem>\
tables_index.json
images\
Use --table-crops-out PATH to override that handoff directory, or --no-export-table-crops to skip automatic crop export.
Use --out only when you want to override the profiler output root. It is not the final directory for one document. For example:
tabulus profile --pdf "C:\papers\paper.pdf" --out "D:\results\mineru\pipeline" --backend pipeline
causes MinerU to create approximately:
D:\results\mineru\pipeline\paper\auto\
If you omit --backend, Tabulus opens an interactive backend selector:
1. pipeline CPU-compatible [default]
2. hybrid-engine GPU-accelerated
Choose pipeline for CPU-only Windows runs. hybrid-engine requires a suitable CUDA GPU.
If hybrid-engine is requested but GPU requirements are not satisfied, Tabulus reports the reason and falls back to pipeline. Common fallback reasons include PyTorch not being installed, CUDA not being available, no visible CUDA GPU, insufficient GPU architecture, or insufficient VRAM. When Tabulus generates the output directory automatically, it uses the resolved backend name, so a fallback run writes under tabulus-output\mineru\pipeline\.
Validated Windows Run#
MinerU 3.4.5 pipeline completed a real 53-page PDF profiling run on Windows CPU with:
Python 3.12.10
PyTorch 2.10.0+cpu
CUDA available: False
MinerU 3.4.5
The Windows test suite was run with:
pytest is provided by the Tabulus dev extra. If Tabulus was installed only with python -m pip install -e ., install python -m pip install -e ".[dev]" before running the test suite.
python -m pytest -v
and passed in this environment:
21 passed
with pytest 9.1.1.
Inspect Tables After Profiling#
After MinerU writes its output directory, the library can discover table regions:
python -c "from pathlib import Path; from tabulus.mineru import discover_tables; tables, refs = discover_tables(Path('C:/path/to/papers/tabulus-output/mineru/pipeline/<document>/auto')); print(len(tables)); print(refs)"
tabulus profile prepares the table-crop handoff automatically by default. To regenerate that handoff from an existing MinerU run without rerunning MinerU:
tabulus export-table-crops --mineru-root "C:\path\to\papers\tabulus-output\mineru\pipeline\<document>\auto" --out "work\table_crops"
This writes:
work\table_crops\
tables_index.json
images\
Table reconstruction adapters operate on canonical MinerU table crops. If the PaddleOCR dependencies are installed in the active environment, the batch table-reconstruction CLI can process the crop handoff with PaddleOCR-VL:
tabulus reconstruct-tables --crops "C:\path\to\papers\tabulus-output\table-crops\<document>" --adapter paddleocr-vl --device cpu
The command writes adapter outputs under:
<crop-root>\reconstructions\paddleocr-vl\
native\
parsed\
predictions\
batch_summary.json
Step 5 reference matching writes references/reference_matches.json without modifying reconstruction prediction CSVs. Step 6 scholarly reference resolution writes a paper-level references/reference_resolution.json registry from the union of linked bibliography indices. Step 7 resolved CSV export is deterministic and offline; optional continuation merging is available at export time while physical resolved CSVs remain retained. Full end-to-end tabulus run orchestration remains unimplemented in this repository.