DocVortex
A fast, multi-format document parsing and conversion engine.
DocVortex provides a complete, standalone document pipeline:
Document -> ModelJson + Assets -> MiddleJson + Assets -> Render / Export
Native inputs include text PDFs, DOC/DOCX, PPT/PPTX, XLS/XLSX, RTF, ODT/ODS/ODP, EPUB, HTML, OFD and CSV. Output formats include Markdown, HTML, LaTeX, DOCX, EPUB, PDF and structured content. Content List V1/V2 are provided by MinerU.
Native parsing runs without OCR or VLM inference services. PDF classification is an explicit document operation; native analysis does not silently classify the document or select another inference backend.
Install
pip install docvortex
docvortex convert report.pdf --format markdown --output output/report.md
docvortex classify report.pdf
Python 3.10–3.14 is supported. Native parsing does not require OCR/VLM inference
services. PDF access uses pypdfium2>=5.10.1,<6; the
compatibility matrix also exercises 5.13.0.
Parse once, export many times
import docvortex
result = docvortex.parse("report.pdf", keep_model_json=True)
result.export("output/report.md", output_format="markdown")
result.export("output/report.docx", output_format="docx")
result.export("output/report.epub", output_format="epub")
result.save_bundle("output/report.bundle")
# This works after the source document and its parsing process are gone.
restored = docvortex.load_bundle("output/report.bundle")
restored.export("output/report.pdf", output_format="pdf")
Bundles contain manifest.json, middle.json, optional model.json, and image
assets. The loader verifies asset hashes. Missing external assets must be supplied
before saving a portable bundle. Existing files are protected unless the caller
explicitly sets overwrite=True.
Stage APIs
from docvortex.api import analyze, postprocess, render
analysis = analyze("report.pdf", page_range="1-5")
result = postprocess(analysis)
artifact = render(result.middle_json, "docx", assets=result.assets)
artifact.write("output/report.docx")
The stage API lives in docvortex.api. Root-level conveniences include parse,
analyze, convert, postprocess_document, and render_artifact. The
docvortex.render package also exposes the low-level renderers and their original
string, bytes, dictionary, or list return values.
PDF page selections use 1-5, r1 and all; other native formats are parsed as
whole documents. A caller-owned PDFDocument can be passed to analyze or parse
and remains open afterward.
Explicit PDF classification
from docvortex.document.pdf import PDFDocument
with PDFDocument("report.pdf") as document:
mode = document.classify() # "txt" or "ocr"; no inference is started
if mode == "txt":
result = docvortex.parse(document)
Native analysis trusts the caller's choice and does not classify automatically. Applications can use the classification result to select their own OCR or inference service when a document requires it.
DocVortex JSON uses schema identity docvortex.model or docvortex.middle, schema
version 2.0, and required metadata.file_suffix / metadata.producer. Definitions are in schemas/.
Application-specific metadata belongs in extensions. See the
shared JSON protocol and migration guide and the
compatibility guide for existing application integrations
and historical data formats. The HTML protocol describes
DocVortex markers and semantic round trips.
Scope and development
PDF output is a semantic reflow of the document, not a lossless reproduction of the original page drawing instructions. Input support for PPTX/XLSX does not imply PPTX/XLSX output support. Rust implementation work is a future stage behind these public data and processing boundaries.
uv venv
uv pip install -e ".[test,dev]"
uv run --no-project python -m pytest -q
uv run --no-project ruff check src
uv run --no-project ruff format --check src
uv build
DocVortex project code is licensed under the MIT License.
Dependencies include pydantic>=2.12.5,<3 and numpy>=1.21.6; the
installer selects versions compatible with the active Python interpreter.
On Apple Silicon, Python 3.14 installation requires macOS 14 or newer because
of the ONNX Runtime dependency used by file-type detection.
See the standalone example for native parsing and portable result bundles, and the validation record for test coverage.
PDFium uses a bundled, pinned CJK fallback font for non-embedded CJK fonts; no system font installation is required. See PDF font policy for initialization, diagnostics and replacement boundaries.
PDF output normalizes fullwidth Latin letters, digits and selected technical symbols in natural-language text and table cells, preserving Chinese punctuation, formulas, code and link targets. See PDF text normalization for scope and API usage.
See the DocVortex upgrade guide for package, protocol, PDF text rules and publishing configuration changes.
See rendering ownership for the seven engine targets, MinerU Content List integration and public fragment helpers.
See refactor validation for the staged internal refactoring, compatibility checks, corpus comparisons and measured performance.
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 docvortex-0.2.2.tar.gz.
File metadata
- Download URL: docvortex-0.2.2.tar.gz
- Upload date:
- Size: 27.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e32e4d605109f5f44891615b6bb90bd4b43dc15e108bb87bd70a66b8f0845e58
|
|
| MD5 |
ed05ab5edb17284a82eb010d077928d4
|
|
| BLAKE2b-256 |
5026ba102e42084cd72071ea215488183018e548edad4645c5486eb7a91d62bc
|
Provenance
The following attestation bundles were made for docvortex-0.2.2.tar.gz:
Publisher:
publish.yml on myhloli/DocVortex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
docvortex-0.2.2.tar.gz -
Subject digest:
e32e4d605109f5f44891615b6bb90bd4b43dc15e108bb87bd70a66b8f0845e58 - Sigstore transparency entry: 2750169236
- Sigstore integration time:
-
Permalink:
myhloli/DocVortex@796bf11a061c54a58ebb0f8ef0a336288f5c7b3a -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/myhloli
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@796bf11a061c54a58ebb0f8ef0a336288f5c7b3a -
Trigger Event:
release
-
Statement type:
File details
Details for the file docvortex-0.2.2-py3-none-any.whl.
File metadata
- Download URL: docvortex-0.2.2-py3-none-any.whl
- Upload date:
- Size: 4.3 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e73cdbaed03cc29c8907815cea9fa4c78d6cd59e38d1eaeeee372ba19338beb
|
|
| MD5 |
82863fed0bd9aab573ff26983dfac752
|
|
| BLAKE2b-256 |
8824c4e8eb995862dc6c3002a5bbe067318c6130812394ccf2bfc88ddb07370f
|
Provenance
The following attestation bundles were made for docvortex-0.2.2-py3-none-any.whl:
Publisher:
publish.yml on myhloli/DocVortex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
docvortex-0.2.2-py3-none-any.whl -
Subject digest:
2e73cdbaed03cc29c8907815cea9fa4c78d6cd59e38d1eaeeee372ba19338beb - Sigstore transparency entry: 2750169260
- Sigstore integration time:
-
Permalink:
myhloli/DocVortex@796bf11a061c54a58ebb0f8ef0a336288f5c7b3a -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/myhloli
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@796bf11a061c54a58ebb0f8ef0a336288f5c7b3a -
Trigger Event:
release
-
Statement type: