Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pdfimgextract-1.5.0.tar.gz (24.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pdfimgextract-1.5.0-py3-none-any.whl (17.3 kB view details)

Uploaded Python 3

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

Hashes for pdfimgextract-1.5.0.tar.gz
Algorithm Hash digest
SHA256 b8bb18068acbf6249d1ebd5fc7ca2020bd905ccd132c17d7b80bc7d9fac55f46
MD5 5d3c87a654cce96c5ce64d2bd0084a4e
BLAKE2b-256 e4abdc6efe04b9b84166fc48886d9d1edaf731bc4d8aea4afbec66896126c6e0

See more details on using hashes here.

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

Hashes for pdfimgextract-1.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fa8fbf25722c0db3388d695991a429e5af34bc786eb2b01596cb387f6dddf469
MD5 c07924db357a43cefe3de93088f63b05
BLAKE2b-256 15ad5cf12001d9b2fc85165ab95856e6f627be7984f29542cb51924a44d47ab1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page