Fast local PDF to Markdown converter — powered by pymupdf4llm & uv
Project description
pdf2md-uv
Fast local PDF to Markdown converter — powered by pymupdf4llm and distributed via uv.
pdf2md paper.pdf → paper.md
pdf2md slides/ → convert all PDFs in directory
Why pdf2md-uv?
There are many tools named pdf2md, but most are:
- ❌ Browser-based apps (no CLI)
- ❌ Cloud APIs (data privacy risk)
- ❌ Heavy ML models (need GPU)
pdf2md-uv is different:
- ✅ Modern: Packaged with
uv— the new standard for Python tooling - ✅ Fast: Seconds for typical documents
- ✅ Private: 100% local, no cloud API calls
- ✅ Smart: Auto-detects scanned pages and uses built-in RapidOCR
Install
Requires uv:
uv tool install pdf2md-uv
That's it. No pip install, no virtualenv setup, no dependency conflicts.
Usage
# Single file
pdf2md input.pdf
# Custom output path
pdf2md input.pdf -o custom.md
# Batch convert directory
pdf2md papers/
# Quiet mode (for scripting)
pdf2md input.pdf -q
How it works
pdf2md-uv wraps pymupdf4llm to provide a zero-config CLI:
- Text-based PDFs: Direct text extraction (100% accurate)
- Scanned PDFs: Automatic OCR using RapidOCR (PP-OCRv4 model)
Everything runs locally on your CPU.
Comparison
| Tool | Tech | Offline? | Notes |
|---|---|---|---|
| pdf2md-uv (this) | pymupdf4llm + RapidOCR | ✅ | Fast, local, uv-packaged |
| mrmps/pdf2md | Next.js browser app | ✅ | Frontend only |
| link2004/pdf2md | Mistral AI API | ❌ | Cloud dependency |
| mathinml/pdf2md | Qwen2.5-VL (3B) | ✅ | Needs GPU |
License
MIT
Project details
Release history Release notifications | RSS feed
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 pdf2md_uv-0.1.0.tar.gz.
File metadata
- Download URL: pdf2md_uv-0.1.0.tar.gz
- Upload date:
- Size: 14.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e0cd6f117fa8ffcd4e6e89db2e64b5ec0fbca857b665e7d9ea9f82e9b33e4b8
|
|
| MD5 |
103b608a7813c7a1602655d2215807f4
|
|
| BLAKE2b-256 |
f71fa32869ed22aeb7f560d7749e389a315c54eae8e83e84f174bb22b321c63b
|
File details
Details for the file pdf2md_uv-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pdf2md_uv-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2f35591be2d94cba1384ff5b6c96769616f79cabef93d251e3e922bbcbc15bb
|
|
| MD5 |
e131b50706767a3dee1f3b2a909e9e99
|
|
| BLAKE2b-256 |
ef509a8682e5069dfdcd89efc135b3fdb7fbdcc8d67be48f6126afeb3694e1eb
|