Fast parallel PDF image extractor
Project description
python-pdfimgextract
🚀 Overview
python-pdfimgextract is a high-performance PDF image extraction tool designed to maximize throughput through multiprocessing.
The project focuses on speed, reliability, and efficient parallel processing, enabling large PDFs with hundreds of high-resolution images to be processed significantly faster than traditional single-threaded approaches.
✨ Features
| Feature | Description |
|---|---|
| ⚡ Parallel Extraction | Utilizes multiprocessing to decode images across multiple CPU cores |
| 🛡️ Atomic Writes | Prevents partially written files during crashes |
| 🧹 Deduplication | Optional removal of identical images |
| 📊 Progress Tracking | Real-time progress bar during extraction |
| 🛑 Graceful Interrupts | Safe handling of SIGINT and termination signals |
| 💻 Clean CLI | Simple command-line interface |
📥 Installation
pip install pdfimgextract
🛠️ Usage
Basic usage:
pdfimgextract INPUT_PDF OUTPUT_DIR NUMBER_OF_PROCESSES
Example:
pdfimgextract manga.pdf output 16
Optional usage (flags):
pdfimgextract -i input.pdf -o output_dir -p 8
pdfimgextract -i input.pdf -o output_dir -d hash
pdfimgextract -i input.pdf -o output_dir --overwrite
Arguments
-i / --input Path to input PDF
-o / --output Output directory
-p / --parallelism Number of worker processes (default: 8)
-d / --dedup Deduplication method: xref (default) or hash (precise but slower)
--overwrite Overwrite existing files
If not specified, the tool defaults to:
- 8 workers
- xref deduplication
📊 Performance & Benchmark
🖥️ Test Environment
• OS: Windows 11
• CPU: 28 cores
• Input File: 491 MB PDF
• Extracted Images: 230
• Image Size Range: ~2MB – 10MB
📈 Results
| Proc | Time (s) | Speedup | Efficiency | RAM (MB) |
|---|---|---|---|---|
| 1 | 111.88 | 1.00x | 100% | 349 |
| 2 | 56.98 | 1.96x | 98% | 626 |
| 4 | 32.41 | 3.45x | 86% | 1159 |
| 8 | 20.16 | 5.55x | 69% | 2254 |
| 16 | 14.24 | 7.86x | 49% | 4423 |
| 32 | 11.41 | 9.81x | 31% | 7309 |
| 64 | 11.67 | 9.59x | 15% | 9306 |
🧠 Analysis
Scaling
- Near-linear scaling up to ~4 processes
- Strong gains up to ~16
- Performance plateaus around ~32
CPU Efficiency
- Very high at low parallelism (~98% at 2 workers)
- Gradual drop due to scheduling and contention
- Diminishing returns at 64 and beyond workers
Memory Usage
- RAM scales almost linearly with process count
- Each worker holds its own decoding state
- Large images amplify memory consumption
Examples:
- 8 workers → ~2.2 GB
- 32 workers → ~7.3 GB
- 64 workers → ~9.3 GB
I/O Bottleneck
- Parallel writes saturate disk bandwidth
- Causes worker stalls at high process counts
- Main limiter beyond ~32 workers
🏁 Optimal Range
Recommended configuration:
8 – 16 workers
Best balance between:
- Speed
- Efficiency
- Memory usage
- I/O pressure
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 pdfimgextract-1.5.0.tar.gz.
File metadata
- Download URL: pdfimgextract-1.5.0.tar.gz
- Upload date:
- Size: 24.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8bb18068acbf6249d1ebd5fc7ca2020bd905ccd132c17d7b80bc7d9fac55f46
|
|
| MD5 |
5d3c87a654cce96c5ce64d2bd0084a4e
|
|
| BLAKE2b-256 |
e4abdc6efe04b9b84166fc48886d9d1edaf731bc4d8aea4afbec66896126c6e0
|
File details
Details for the file pdfimgextract-1.5.0-py3-none-any.whl.
File metadata
- Download URL: pdfimgextract-1.5.0-py3-none-any.whl
- Upload date:
- Size: 17.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa8fbf25722c0db3388d695991a429e5af34bc786eb2b01596cb387f6dddf469
|
|
| MD5 |
c07924db357a43cefe3de93088f63b05
|
|
| BLAKE2b-256 |
15ad5cf12001d9b2fc85165ab95856e6f627be7984f29542cb51924a44d47ab1
|