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.2.tar.gz (3.9 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.2-py3-none-any.whl (4.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: bluepil-0.1.2.tar.gz
  • Upload date:
  • Size: 3.9 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.2.tar.gz
Algorithm Hash digest
SHA256 2f875f8b8ef3300a3fef42aed6818df1867a85e6a452449daf6336c9bbcde6ac
MD5 ad4e4c8b19bf9f8d98ef8487355a3fb1
BLAKE2b-256 0188fb4dddbf002374158ab141db7a6cccc0bae05ab96ff69911c6ca3c6d593f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: bluepil-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 4.0 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d14e06c6666af0a0bd45f06baa197050b66df4d298e1066256082177356b2a3b
MD5 3edacf8846b6a5389f9254f0f1cbc1e7
BLAKE2b-256 c26486d9ae816f390f0d9ebd299371d24031fdfaabf3fbe3656d1c4ad4148922

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