Vexy PDF Werk
Transform PDFs into high-quality, accessible formats
Documentation: https://vexy.dev/vexy-pdf-werk/
Vexy PDF Werk (VPW) is a Python package that converts PDF documents into multiple high-quality formats using modern tools. Transform your PDFs into PDF/A archives, paginated Markdown, ePub books, and structured bibliographic metadata.
Features
🔧 Modern PDF Processing
- PDF/A conversion for long-term archival
- OCR enhancement using OCRmyPDF
- Quality optimization with qpdf
- In-depth PDF analysis to detect text, images, and scanned documents.
📚 Multiple Output Formats
- Paginated Markdown documents with smart naming and YAML frontmatter.
- ePub generation from Markdown content.
- Structured bibliographic YAML metadata, including estimated word count and content preview.
- Preserves original PDF alongside enhanced versions.
🔄 Advanced Conversion Options
- Marker: High-quality PDF-to-Markdown using state-of-the-art ML models
- MarkItDown: Microsoft's robust document converter for complex layouts
- Docling: IBM's advanced document understanding with structure recognition
- Basic: Reliable PyPDF-based extraction for simple documents
- Automatic fallback system - if advanced converters aren't available, falls back to basic
⚙️ Simple & Flexible
- Clean, simple CLI interface with sensible defaults
- Platform-appropriate configuration storage
- Graceful error handling with helpful messages
- Easy integration into workflows
Quick Start
Installation
# Install from PyPI
pip install vexy-pdf-werk
# Or install in development mode
git clone https://github.com/vexyart/vexy-pdf-werk
cd vexy-pdf-werk
pip install -e .
CLI Usage
The primary way to use Vexy PDF Werk is through its command-line interface, vpw.
Basic Usage
# Convert PDF to markdown (simplest usage)
vpw process document.pdf
# Convert to multiple formats
vpw process document.pdf --formats "pdfa,markdown,epub,yaml"
# Specify output directory
vpw process document.pdf --output_dir ./my-output
# Enable verbose logging for debugging
vpw process document.pdf --verbose
Advanced Converter Selection
By default, VPW automatically selects the best available converter. You can control this:
# Use automatic converter selection (default - tries Marker → Docling → MarkItDown → Basic)
vpw process document.pdf
# Force a specific converter in your config.toml:
# markdown_backend = "marker" # High-quality ML-based conversion
# markdown_backend = "docling" # IBM's document understanding
# markdown_backend = "markitdown" # Microsoft's robust converter
# markdown_backend = "basic" # Simple PyPDF extraction
Configuration Management
# Display the current configuration
vpw config --show
# Create a default configuration file if one doesn't exist
vpw config --init
Python API
You can also use VPW programmatically:
import asyncio
from pathlib import Path
from vexy_pdf_werk.config import VPWConfig
from vexy_pdf_werk.core.markdown_converter import MarkdownGenerator
async def convert_pdf():
# Simple conversion
config = VPWConfig()
converter = MarkdownGenerator(config.conversion)
result = await converter.generate_markdown(
Path("document.pdf"),
Path("./output")
)
if result.success:
print(f"✓ Converted {len(result.pages)} pages")
else:
print(f"✗ Error: {result.error}")
# Run conversion
asyncio.run(convert_pdf())
Output Structure
VPW creates organized output with consistent naming:
output/
├── document_enhanced.pdf # PDF/A version
├── 000--introduction.md # Paginated Markdown files
├── 001--chapter-one.md
├── 002--conclusions.md
├── document.epub # Generated ePub
└── metadata.yaml # Bibliographic data
System Requirements
Required Dependencies
- Python 3.10+
- ocrmypdf (needed by every
vpw processrun) - tesseract-ocr
- qpdf
- ghostscript
Optional Dependencies for Advanced Converters
Install all advanced converters:
pip install vexy-pdf-werk[all]
Or install specific converters:
# High-quality ML-based conversion
pip install marker-pdf
# Microsoft's document converter
pip install markitdown
# IBM's document understanding
pip install docling
# ePub generation support
pip install ebooklib
# Pandoc for additional ePub features
# (install via system package manager as shown below)
Installation Commands
Ubuntu/Debian:
sudo apt-get update
sudo apt-get install tesseract-ocr tesseract-ocr-eng qpdf ghostscript pandoc
macOS:
brew install tesseract tesseract-lang qpdf ghostscript pandoc
Windows:
choco install tesseract qpdf ghostscript pandoc
Configuration
VPW stores configuration in platform-appropriate directories:
- Linux/macOS:
~/.config/vexy-pdf-werk/config.toml - Windows:
%APPDATA%\vexy-pdf-werk\config.toml
You can initialize a default configuration file by running vpw config --init.
Example Configuration
[processing]
ocr_language = "eng"
pdf_quality = "high" # high, medium, low
force_ocr = false
deskew = true
rotate_pages = true
[conversion]
markdown_backend = "auto" # auto, marker, markitdown, docling, basic
paginate_markdown = true
include_images = true
extract_tables = true
[ai]
enabled = false
provider = "claude" # claude, gemini, custom
correction_enabled = false
enhancement_enabled = false
max_tokens = 4000
[output]
formats = ["pdfa", "markdown", "epub", "yaml"]
preserve_original = true
output_directory = "./output"
filename_template = "{stem}_{format}.{ext}"
Architecture
VPW follows a modular pipeline architecture:
PDF Input → Analysis → OCR Enhancement → Content Extraction → Format Generation → Multi-Format Output
↓
Multiple Converter Backends
(Marker/Docling/MarkItDown/Basic)
Core Components
-
PDFProcessor: Handles OCR, PDF/A conversion, and analysis of PDF files usingocrmypdfandqpdf. -
MarkdownGenerator: Intelligent PDF-to-Markdown conversion with multiple backends:MarkerConverter: High-quality conversion using marker-pdf's ML modelsDoclingConverter: Advanced document understanding using IBM's doclingMarkItDownConverter: Robust conversion using Microsoft's markitdownBasicConverter: Reliable fallback using PyPDF extraction- Automatic backend selection and graceful fallbacks
-
EpubCreator: Generates ePub files from Markdown content with proper chapter structure. -
MetadataExtractor: Extracts comprehensive metadata including file info, PDF properties, and content summaries. -
CLI: Clean command-line interface with simple defaults and helpful error messages. -
Config: Simple configuration management with sensible defaults.
Development
This project uses modern Python tooling:
- Package Management: uv + hatch (use
uv runto run but for other operations usehatchlikehatch test) - Code Quality: ruff + mypy
- Testing: pytest
- Version Control: git-tag-based semver with hatch-vcs
Development Setup
# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Clone and setup
git clone https://github.com/vexyart/vexy-pdf-werk
cd vexy-pdf-werk
uv venv --python 3.12
uv sync --all-extras
# Run tests
hatch run test
# Run linting
hatch run lint:fmt
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes following the code quality standards
- Run tests and linting
- Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Authors
- Fontlab Ltd - Initial work - Vexy Art
Acknowledgments
- Built on proven tools: qpdf, OCRmyPDF, tesseract
- Integration with advanced document conversion libraries (Marker, Docling, MarkItDown)
- Inspired by the need for better PDF accessibility and archival
Project Status: Under active development
Metadata
Release files for vexy-pdf-werk 1.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| vexy_pdf_werk-1.2.2.tar.gz | 73.9 kB | Without provenance | Details for vexy_pdf_werk-1.2.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| vexy_pdf_werk-1.2.2-py3-none-any.whl | Python 3 | none | any | Details for vexy_pdf_werk-1.2.2-py3-none-any.whl |
Total release size: 120.3 kB
Release files / vexy_pdf_werk-1.2.2.tar.gz
| Download URL | vexy_pdf_werk-1.2.2.tar.gz |
|---|---|
| Size | 73.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2102f587abc609cbab2daa3545210416b3f53569d134d47e66bd6af3b0965667
|
|
BLAKE2b-256 checksum How to use checksums |
48b73391ebeff8892a2c6f8ca6a87cfa3ea7663428f68c8f4c37b745b061a457
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / vexy_pdf_werk-1.2.2-py3-none-any.whl
| Download URL | vexy_pdf_werk-1.2.2-py3-none-any.whl |
|---|---|
| Size | 46.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
66d26d3cd3e45b4182930a9ef4d59c0e2f773939ec96d68845543f54b735d821
|
|
BLAKE2b-256 checksum How to use checksums |
b442e3fc1490a822f64a5b0e60dcd4a5e4ecb42531c8594464b05e6cf87dc66e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for vexy-pdf-werk 1.2.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.