Pillow Agent Skills & AI Rules

GitHub

Python Imaging Library (fork)

13,910 stars Python Python 101 files ยท ~126,060 tokens #c#cross-platform#image#image-processing#pil#pillow#python#python-3
RAW Rules
4 Discovered Rules โ€ข ~1,693 Estimated Tokens
Quick:
Loading skill content...

AI Agent Protocol & Instructions

AGENTS.md root-instruction ~793 tokens
Raw
# Agent Instructions for Pillow

## What this project is

Pillow is the Python Imaging Library fork โ€” a Python 3.10+ library for opening,
manipulating, and saving many image file formats. It is a mix of Python and C:
pure Python format plugins live in `src/PIL/`, and eight C extension modules
(`_imaging`, `_imagingcms`, `_imagingft`, `_imagingmath`, `_imagingmorph`,
`_imagingtk`, `_avif`, `_webp`) are compiled at install time via `setup.py`.

## Project layout

```
src/PIL/                 Python source and C extension stubs (.pyi)
src/thirdparty/          Vendored C libraries (raqm, fribidi-shim, pythoncapi_compat)
Tests/                   pytest test suite; Tests/helper.py has shared utilities
docs/                    Sphinx documentation (RST)
docs/releasenotes/       Per-release changelog entries
setup.py                 C extension build configuration
_custom_build/           Custom setuptools build backend
src/PIL/_version.py      Version number (PEP 440)
pyproject.toml           Project metadata and optional dependency groups
.pre-commit-config.yaml  All linting and formatting hooks
```

## Install

```bash
python3 -m pip install -e ".[tests]"
```

The C extensions are compiled during install. Native libraries (libjpeg,
libpng, libtiff, libwebp, freetype2, littlecms2, etc.) must already be present
on the system.

## Test

```bash
python3 selftest.py               # quick sanity check
python3 -m pytest Tests/          # full test suite
python3 -m pytest Tests/ -n auto  # parallel (requires pytest-xdist)
```

Always run `python3 selftest.py` first. New features and bug fixes must include
tests. Test files follow the naming pattern `Tests/test_*.py`.

## Lint and format

```bash
make lint        # runs tox -e lint โ†’ pre-commit (black, ruff, clang-format,
                 #   bandit, sphinx-lint, pyproject-fmt, and more)
make lint-fix    # auto-fixes black and ruff violations
```

Or run pre-commit directly:

```bash
pre-commit run --all-files
```

All hooks must pass before a PR can be merged. Separate reformatting commits
from functional commits.

## Type checking

```bash
python3 -m tox -e mypy
```

## Documentation

Docs use Sphinx/RST. Build locally with `make doc`. Release notes go in
`docs/releasenotes/<version>.rst` using the existing section structure
(Security, Backwards incompatible changes, Deprecations, API changes, API
additions, Other changes). Use the `:cve:` RST role for CVE references.
Include a release note entry for any user-visible change.

## Pillow-specific guidance

Use `python3` and `python3 -m pip install` โ€” never `python` or bare `pip`.

`Image.open()` takes a `formats=` argument (list/tuple of format IDs to
allowlist). There is no `format=` parameter.

`Image.OPEN` is an internal format registry. Do not recommend that users
mutate it as a security or configuration mechanism.

`pybind11` is a build-time-only dependency used for parallel C compilation,
not for C++/Python bindings.

Use fully qualified exception names: `Image.DecompressionBombError` and
`Image.DecompressionBombWarning`, not the bare class names.

Do not embed specific numeric values for thresholds like `MAX_IMAGE_PIXELS` โ€”
they may be changed by the user at runtime. Reference the named constant instead.