{"library":"pilgram","title":"pilgram: Instagram-like Image Filters","description":"pilgram is a Python library that applies Instagram-like photo filters, CSS filters, and blend modes to images. It leverages the Pillow library for image manipulation. The current version, 2.0.0, requires Python 3.10+ and Pillow 10.3.0+. The library maintains an active development and release schedule.","language":"python","status":"active","last_verified":"Mon May 18","install":{"commands":["pip install \"Pillow>=10.3.0\" numpy pilgram","pip install \"Pillow<10.3.0\" numpy \"pilgram<2.0.0\""],"cli":null},"imports":["from PIL import Image","import pilgram","import pilgram.css","import pilgram.css.blending"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"from PIL import Image\nimport pilgram\nimport os\n\n# Create a dummy image if 'sample.jpg' does not exist\nif not os.path.exists('sample.jpg'):\n    print(\"Creating dummy 'sample.jpg' for demonstration.\")\n    img = Image.new('RGB', (600, 400), color = 'red')\n    img.save('sample.jpg')\n\n# Load an image\nim = Image.open('sample.jpg')\n\n# Apply an Instagram-like filter (e.g., Aden)\npilgram.aden(im).save('sample-aden.jpg')\nprint(\"Applied 'aden' filter, saved as 'sample-aden.jpg'\")\n\n# Apply a CSS filter (e.g., sepia)\nimport pilgram.css\npilgram.css.sepia(im).save('sample-sepia.jpg')\nprint(\"Applied CSS 'sepia' filter, saved as 'sample-sepia.jpg'\")\n\n# Apply a blend mode (requires two images)\nif not os.path.exists('backdrop.jpg'):\n    print(\"Creating dummy 'backdrop.jpg' for demonstration.\")\n    backdrop = Image.new('RGB', (600, 400), color = 'blue')\n    backdrop.save('backdrop.jpg')\nelse:\n    backdrop = Image.open('backdrop.jpg')\n\nif not os.path.exists('source.jpg'):\n    print(\"Creating dummy 'source.jpg' for demonstration.\")\n    source = Image.new('RGB', (600, 400), color = 'green')\n    source.save('source.jpg')\nelse:\n    source = Image.open('source.jpg')\n\nimport pilgram.css.blending\npilgram.css.blending.color(backdrop, source).save('blending.jpg')\nprint(\"Applied 'color' blend mode, saved as 'blending.jpg'\")","lang":"python","description":"This example demonstrates how to load an image, apply an Instagram-like filter, a CSS filter, and a blend mode. It creates dummy images if input files are not found, ensuring the code is runnable out-of-the-box.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-18","installed_version":"1.2.1","pypi_latest":"2.0.0","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":90,"avg_install_s":4.3,"avg_import_s":0.07,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"\"Pillow<10.3.0\"","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.06,"mem_mb":2.7,"disk_size":"105.8M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"\"Pillow>=10.3.0\"","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.05,"mem_mb":2.3,"disk_size":"109.6M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"\"Pillow<10.3.0\"","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.3,"import_time_s":0.04,"mem_mb":2.7,"disk_size":"101M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"\"Pillow>=10.3.0\"","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.2,"import_time_s":0.03,"mem_mb":2.3,"disk_size":"106M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"\"Pillow<10.3.0\"","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.13,"mem_mb":3.1,"disk_size":"113.9M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"\"Pillow>=10.3.0\"","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.11,"mem_mb":2.6,"disk_size":"117.7M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"\"Pillow<10.3.0\"","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4,"import_time_s":0.12,"mem_mb":3.1,"disk_size":"108M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"\"Pillow>=10.3.0\"","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.1,"import_time_s":0.1,"mem_mb":2.6,"disk_size":"114M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"\"Pillow<10.3.0\"","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.09,"mem_mb":3.1,"disk_size":"102.3M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"\"Pillow>=10.3.0\"","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.07,"mem_mb":2.6,"disk_size":"106.0M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"\"Pillow<10.3.0\"","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.7,"import_time_s":0.09,"mem_mb":3.1,"disk_size":"97M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"\"Pillow>=10.3.0\"","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.8,"import_time_s":0.07,"mem_mb":2.6,"disk_size":"102M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"\"Pillow<10.3.0\"","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"\"Pillow>=10.3.0\"","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.07,"mem_mb":2.7,"disk_size":"105.5M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"\"Pillow<10.3.0\"","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":3.7,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"\"Pillow>=10.3.0\"","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.1,"import_time_s":0.07,"mem_mb":2.5,"disk_size":"102M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"\"Pillow<10.3.0\"","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.05,"mem_mb":2.7,"disk_size":"113.6M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"\"Pillow>=10.3.0\"","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.05,"mem_mb":2.3,"disk_size":"115.1M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"\"Pillow<10.3.0\"","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5.4,"import_time_s":0.04,"mem_mb":2.7,"disk_size":"111M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"\"Pillow>=10.3.0\"","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5,"import_time_s":0.05,"mem_mb":2.3,"disk_size":"114M"}]}}