Skip to main content

Automatic memory management for Pillow - take the blue pill

Project description

BluePIL 💊

Take the blue pill. Your memory stays safe.

Stop fighting Pillow's memory leaks. BluePIL is a drop-in replacement that automatically handles cleanup so you don't have to.

The Problem

from PIL import Image

# Process 1000 images
for i in range(1000):
    img = Image.open(f'image_{i}.jpg')
    img = img.resize((800, 600))
    img.save(f'output_{i}.jpg')
    # img.close()  # Forgot this? RAM goes brrr 📈

Memory usage: 2GB+ and climbing 🔥

Here's the dirty secret: Pillow's Python objects get garbage collected just fine, but the underlying C image buffers don't get freed unless you explicitly call .close(). Python's GC has no idea those massive C allocations even exist.

The result? Your Python process looks lean to the GC while your actual RAM usage spirals out of control. You're forced to either:

  • Manually call .close() everywhere like it's 1995
  • Wrap everything in context managers
  • Just accept the leak and provision 40GB of RAM (the HuggingFace strategy)

The Solution

from bluepil import Image

# Same code, zero leaks
for i in range(1000):
    img = Image.open(f'image_{i}.jpg')
    img = img.resize((800, 600))
    img.save(f'output_{i}.jpg')
    # Automatic cleanup ✨

Memory usage: Stable at 50MB

Installation

pip install bluepil

Usage

Replace your Pillow import:

# Before
from PIL import Image

# After
from BluePIL import Image

That's it. Everything else works exactly the same.

How It Works

BluePIL wraps Pillow's Image class with automatic cleanup using weakref.finalize(). When an image goes out of scope, .close() is called automatically, releasing the C buffers immediately instead of leaking them forever.

Features

  • ✅ Drop-in replacement for PIL.Image
  • ✅ Zero API changes
  • ✅ Automatic memory cleanup
  • ✅ Context manager support
  • ✅ Works with existing Pillow code

Why "BluePIL"?

"You take the blue pill, the story ends. You wake up in your bed and believe whatever you want to believe."

Take the blue pill. Stop worrying about memory leaks. Just process your images.

License

MIT

Contributing

Issues and PRs welcome at github.com/ewan-m/bluepil

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

bluepil-0.1.1.tar.gz (4.0 kB view details)

Uploaded Source

Built Distribution

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

bluepil-0.1.1-py3-none-any.whl (4.1 kB view details)

Uploaded Python 3

File details

Details for the file bluepil-0.1.1.tar.gz.

File metadata

  • Download URL: bluepil-0.1.1.tar.gz
  • Upload date:
  • Size: 4.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.4

File hashes

Hashes for bluepil-0.1.1.tar.gz
Algorithm Hash digest
SHA256 aa53bfa4bbd282f359c05b4d2513028dd0fc1e6c94f2038a80ea313ceebc7d7c
MD5 bbcdd5d8eb34b5d1638c224c41e607e1
BLAKE2b-256 e03573a4aea6d862c91241f7ccf56f9026bed0cdf0e6ddb19463c06bc34bc371

See more details on using hashes here.

File details

Details for the file bluepil-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: bluepil-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 4.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.4

File hashes

Hashes for bluepil-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e9aadb673d7414a143039878a008175a11d21c0c6c8d058c4a120ed338b3d97c
MD5 e28c94d69900d98ea7fb4c89ab53b63f
BLAKE2b-256 7d9f769b3a40749268c305977c4195c5edc9182b0148a01a9ec1ae24ef4bb715

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