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.6.3.tar.gz (15.3 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.6.3-py3-none-any.whl (18.7 kB view details)

Uploaded Python 3

File details

Details for the file pdfimgextract-1.6.3.tar.gz.

File metadata

  • Download URL: pdfimgextract-1.6.3.tar.gz
  • Upload date:
  • Size: 15.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for pdfimgextract-1.6.3.tar.gz
Algorithm Hash digest
SHA256 afddfb20f83b2806eb8892d3b4452adb434f0842c416a10cb6a57385fda34988
MD5 471ea403827ca8d1d150cd2113278942
BLAKE2b-256 b430642cb32dac02db46407dbfec46843dc47524a00dbc8c8f0a24cba88ff1ce

See more details on using hashes here.

File details

Details for the file pdfimgextract-1.6.3-py3-none-any.whl.

File metadata

  • Download URL: pdfimgextract-1.6.3-py3-none-any.whl
  • Upload date:
  • Size: 18.7 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.6.3-py3-none-any.whl
Algorithm Hash digest
SHA256 443be0b49c90c68d58dc68743070bd5919b96bb2cdc563412910041a9b499c7a
MD5 c59ea6549d856eeefe602b0993e8d44d
BLAKE2b-256 25ded79871b878d01ac12e92002887bebd28e6e8003bf6c60393d2f5c3e1d37d

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