Skip to main content

PDF Vision Processor

A FastAPI service that converts PDFs into page images, sends them to an OpenAI-compatible Vision LLM, and exposes the parsed layout/markdown through both REST APIs and a built-in UI. The project now ships as an installable package named pdf-vision-processor so it can be deployed with a single CLI command.

Installation (PyPI)

python -m venv venv && source venv/bin/activate
pip install pdf-vision-processor
pdf-vision-processor --host 0.0.0.0 --port 8080

The CLI loads a .env file from your current working directory (if present), applies overrides from environment variables prefixed with PDF_VISION_PROCESSOR_, and falls back to sensible defaults. Static assets and Jinja templates are bundled inside the wheel.

Note: PyMuPDF (fitz) is expected to be available in the runtime environment (e.g., preinstalled in the platform image). The PyPI package does not vendor it; install pymupdf manually if your deployment does not already include it.

Configuration

Setting CLI Flag Environment Variable Default
Host interface --host PDF_VISION_PROCESSOR_HOST 127.0.0.1
Port --port PDF_VISION_PROCESSOR_PORT 8000
Reload --reload/--no-reload PDF_VISION_PROCESSOR_RELOAD False
Log level --log-level PDF_VISION_PROCESSOR_LOG_LEVEL info
Data directory --data-dir PDF_VISION_PROCESSOR_DATA_DIR ~/.pdf-vision-processor/data
Logs directory --logs-dir PDF_VISION_PROCESSOR_LOG_DIR ~/.pdf-vision-processor/logs
Database URL --database-url PDF_VISION_PROCESSOR_DATABASE_URL sqlite:///<home>/db.sqlite3

Additional LLM specific variables (e.g., LLM_API_KEY, LLM_BASE_URL, LLM_MODEL, LLM_MAX_TOKENS) continue to be read from the environment; see docs/env_config.md for the full catalog. When no overrides are provided, uploads, derived images, and logs are stored under ~/.pdf-vision-processor/ so the package works even when installed system-wide.

Optional project-level configuration can also be provided through a config.toml file with sections named [server], [paths], and [database]. The CLI resolves settings in the following order: CLI flags → environment variables → config.toml → defaults.

Running from Source

Developers contributing to the repository can still use run.py, which now delegates directly to the packaged CLI to ensure consistent behavior:

python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python run.py --host 127.0.0.1 --port 8000 --reload

Ensure your virtual environment already has pymupdf installed (or install it manually) before running the processor locally.

Assets, templates, and compatibility shims remain under the legacy app/ namespace for existing imports, but all active code now lives inside the pdf_vision_processor/ package (matching what ships to PyPI).

Usage

  1. Upload – Visit / and upload a PDF.
  2. Process – Click Process next to the document to kick off background ingestion.
  3. Inspect – Open the document view to see rendered pages, bounding box overlays, and extracted Markdown side-by-side.

API Examples

# Upload a PDF
curl -X POST -F "file=@/path/to/document.pdf" http://localhost:8000/upload

# Start processing (replace {id} with the returned document id)
curl -X POST http://localhost:8000/process/{id}

# Retrieve page analysis
curl http://localhost:8000/pages/{page_id}/analysis

Packaging & Release Workflow

Use the helper script to build and validate distribution artifacts:

python scripts/build_dist.py --bump patch
# optional: publish to TestPyPI / PyPI with twine upload dist/*

The script bumps the version (optional), cleans previous artifacts, runs setup.py sdist bdist_wheel, and executes twine check so we catch metadata issues before publication. See docs/plans/publishing_checklist.md for the full release checklist.

Metadata

Release files for pdf-vision-processor 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pdf-vision-processor 0.1.1
File Size Uploaded
pdf_vision_processor-0.1.1.tar.gz 31.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pdf-vision-processor 0.1.1
File Interpreter ABI Platform
pdf_vision_processor-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 65.4 kB

Release files / pdf_vision_processor-0.1.1.tar.gz

Download URL pdf_vision_processor-0.1.1.tar.gz
Size 31.4 kB
Tags Source
SHA-256 checksum
How to use checksums
be307c79bcd53e234e2491527354110534606e7cfbb6b977f3536511c8730fe9
BLAKE2b-256 checksum
How to use checksums
a395aabe4c301426e283920710e4ae8a13d47ffce25c30e5723e4b197def8de4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / pdf_vision_processor-0.1.1-py3-none-any.whl

Download URL pdf_vision_processor-0.1.1-py3-none-any.whl
Size 34.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ac79da4d585a40f8b5120ad94f499a56e431cbbf26c3a159f35576e613d72cd7
BLAKE2b-256 checksum
How to use checksums
8dce39c7099e2252a8794e0109f7a3b94a005cda55d9f506cf99d576cd94e7ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page