{"passport":{"unfragile":{"@version":"1.0","version":"2026-05","artifact":{"id":"pypi_pypi-pillow","slug":"pypi-pillow","name":"pillow","type":"repo","url":"https://pypi.org/project/pillow/","page_url":"https://unfragile.ai/pypi-pillow","categories":["image-generation"],"tags":["Imaging"],"pricing":{"model":"open_source","free":true,"starting_price":null},"status":"active","verified":false},"capabilities":[{"id":"pypi_pypi-pillow__cap_0","uri":"capability://image.visual.multi.format.image.decoding.with.plugin.architecture","name":"multi-format image decoding with plugin architecture","description":"Pillow decodes images across 30+ formats (JPEG, PNG, GIF, WebP, TIFF, AVIF, JPEG2000, BMP, PSD, etc.) through a plugin-based architecture where each format has a dedicated ImagePlugin subclass that registers itself with the Image module. The system uses lazy loading—plugins are only instantiated when their format is encountered—and delegates actual codec work to external C libraries (libjpeg, libpng, libwebp, etc.) via ctypes bindings, enabling format support without bloating the core library.","intents":["Load images from disk or memory in any standard format without manual codec selection","Automatically detect image format from file headers and instantiate the correct decoder","Stream large image files without loading entire file into memory","Preserve format-specific metadata (EXIF, XMP, ICC profiles) during decode"],"best_for":["Python developers building image processing pipelines","Data scientists working with diverse image datasets","Web developers handling user-uploaded images in multiple formats"],"limitations":["Format support depends on external C libraries being available at build time; missing dependencies silently disable formats rather than raising errors","Some formats (PSD, TIFF with certain compression) have limited feature support compared to native tools","Streaming decode is format-specific; not all formats support incremental reading"],"requires":["Python 3.8+","libjpeg, libpng, libwebp, libz (system libraries, typically pre-installed)","Optional: libtiff, libfreetype, libharfbuzz for advanced features"],"input_types":["file paths (str or Path)","file-like objects (BytesIO, open file handles)","raw bytes","numpy arrays (via PIL.Image.fromarray)"],"output_types":["PIL.Image.Image object (in-memory representation)","image metadata dict (format, size, mode, info)"],"categories":["image-visual","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-pillow__cap_1","uri":"capability://image.visual.image.transformation.and.geometric.operations","name":"image transformation and geometric operations","description":"Pillow provides resize, crop, rotate, flip, and transpose operations through a combination of Python-level coordinate transformation logic and C-accelerated resampling kernels. Resize operations support multiple resampling filters (NEAREST, BILINEAR, BICUBIC, LANCZOS) implemented in C for performance; rotation uses affine transformation matrices computed in Python but applied via C code. All operations return new Image objects, preserving immutability semantics.","intents":["Resize images to specific dimensions with quality control via resampling filter selection","Rotate images by arbitrary angles with automatic canvas expansion","Crop regions of interest from images using bounding box coordinates","Flip or transpose images for orientation correction (e.g., EXIF rotation)"],"best_for":["Image preprocessing pipelines for machine learning","Thumbnail generation for web galleries","Batch image normalization workflows"],"limitations":["Rotation creates new canvas; rotated images may have different dimensions than originals, requiring explicit size specification","Resampling filters trade quality for speed; LANCZOS is slowest but highest quality, NEAREST is fastest but produces artifacts","No GPU acceleration; all operations are CPU-bound and scale linearly with image size"],"requires":["Python 3.8+","Pillow core library with C extensions compiled"],"input_types":["PIL.Image.Image objects","integer dimensions (width, height)","bounding box tuples (left, top, right, bottom)","rotation angle in degrees (float)"],"output_types":["PIL.Image.Image object (new instance)"],"categories":["image-visual","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-pillow__cap_10","uri":"capability://image.visual.image.file.i.o.with.streaming.and.memory.mapped.access","name":"image file i/o with streaming and memory-mapped access","description":"Pillow provides flexible file I/O through Image.open() (supporting file paths, file-like objects, and raw bytes), Image.save() (with format-specific parameters), and ImageFile.Parser for streaming decode. The architecture uses lazy loading—image headers are parsed immediately but pixel data is loaded on-demand—enabling efficient handling of large files. Memory-mapped file access is supported for certain formats (TIFF), reducing memory overhead for large images. The ImageFile module handles format detection, error recovery, and incremental loading.","intents":["Load images from disk, network streams, or memory buffers","Save images to disk with format-specific compression and quality settings","Process large images without loading entire file into memory","Handle corrupted or incomplete image files gracefully"],"best_for":["Web servers handling image uploads and downloads","Batch image processing pipelines","Memory-constrained environments (embedded systems, serverless)"],"limitations":["Lazy loading requires seeking in file; not all file-like objects support seeking (e.g., network streams)","Memory-mapped access is format-specific; only TIFF and certain other formats support it","Error recovery is limited; corrupted files may raise exceptions rather than attempting partial recovery","Streaming decode is not available for all formats; some formats require full file to be loaded before decoding"],"requires":["Python 3.8+","File paths (str or Path) or file-like objects with read() method"],"input_types":["file paths (str or Path)","file-like objects (BytesIO, open file handles, network streams)","raw bytes","format string (optional, for format detection)"],"output_types":["PIL.Image.Image object","file bytes (via Image.save() to BytesIO)"],"categories":["image-visual","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-pillow__cap_11","uri":"capability://image.visual.image.format.encoding.with.compression.and.quality.control","name":"image format encoding with compression and quality control","description":"Pillow encodes images to various formats via Image.save() with format-specific parameters controlling compression, quality, and metadata preservation. Each format plugin (JpegImagePlugin, PngImagePlugin, etc.) implements format-specific encoding logic, delegating to external C libraries (libjpeg, libpng, etc.) for actual compression. The architecture allows fine-grained control over encoding parameters (JPEG quality, PNG compression level, WebP method) without exposing low-level codec details. Metadata (EXIF, ICC profiles) can be embedded during encoding if specified.","intents":["Save images to disk in various formats with quality/compression tradeoffs","Optimize image file sizes for web distribution via quality/compression tuning","Convert images between formats while preserving quality","Embed metadata (EXIF, ICC profiles) in saved images"],"best_for":["Image optimization and web asset pipelines","Batch image format conversion","Photo management and archival workflows"],"limitations":["Format-specific parameters vary widely; developers must know format-specific options (e.g., 'quality' for JPEG, 'compress_level' for PNG)","Encoding is CPU-bound; large images or many save operations are slow","Some formats (JPEG) are lossy; quality loss is irreversible","Metadata embedding is format-specific; not all formats support all metadata types"],"requires":["Python 3.8+","External C libraries for target format (libjpeg for JPEG, libpng for PNG, etc.)"],"input_types":["PIL.Image.Image objects","file path or file-like object (for output)","format string (e.g., 'JPEG', 'PNG')","format-specific parameters (dict)"],"output_types":["encoded image bytes (written to file or BytesIO)"],"categories":["image-visual","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-pillow__cap_12","uri":"capability://code.generation.editing.c.extension.layer.with.ctypes.bindings.for.external.libraries","name":"c extension layer with ctypes bindings for external libraries","description":"Pillow's performance-critical operations are implemented in C (via _imaging.c and libImaging), while external codec libraries (libjpeg, libpng, libwebp, etc.) are wrapped via ctypes bindings rather than static linking. This architecture enables format support to degrade gracefully when libraries are unavailable and reduces binary size by avoiding static linking. The C extension layer handles low-level operations (pixel access, resampling, convolution) while Python code provides high-level APIs and orchestration.","intents":["Achieve performance comparable to native C libraries while maintaining Python API","Support optional external libraries without hard dependencies","Enable format support to degrade gracefully when codecs are unavailable"],"best_for":["Developers requiring high-performance image processing","Environments with limited library availability (embedded systems, containers)","Projects requiring flexible dependency management"],"limitations":["C extension compilation requires build tools and external libraries; binary wheels are provided but source builds are complex","ctypes bindings add overhead compared to static linking; performance is slightly lower than fully native implementations","Debugging C extensions requires C debugger (gdb) and symbol files; more difficult than pure Python debugging","Platform-specific issues (e.g., library versions, ABI compatibility) can cause runtime failures"],"requires":["Python 3.8+","C compiler (gcc, clang, MSVC) for source builds","External C libraries (libjpeg, libpng, etc.) for full format support"],"input_types":["Python objects (Image, arrays, etc.)"],"output_types":["Python objects (Image, arrays, etc.)"],"categories":["code-generation-editing","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-pillow__cap_2","uri":"capability://image.visual.color.space.conversion.and.icc.profile.management","name":"color space conversion and icc profile management","description":"Pillow converts images between color spaces (RGB, CMYK, LAB, HSV, etc.) through a combination of Python-level mode tracking and C-accelerated conversion routines. ICC profile support is provided via LittleCMS2 integration, enabling color-managed workflows where profiles are embedded in images, read during decode, and applied during conversion. The Image.convert() method handles both simple mode conversions and profile-aware transformations.","intents":["Convert images between RGB, CMYK, LAB, HSV, and other color spaces for processing or output","Apply ICC color profiles to ensure accurate color reproduction across devices","Extract and embed color profiles in image files for print workflows","Perform color-managed conversions that account for source and destination device profiles"],"best_for":["Print production workflows requiring CMYK output","Color-critical applications (photography, design)","Scientific image analysis requiring LAB or HSV color spaces"],"limitations":["ICC profile support requires LittleCMS2 library; without it, only basic mode conversions work","Profile-aware conversions are slower than simple mode conversions due to LittleCMS2 overhead","Some color spaces (LAB, HSV) are computed via approximation formulas rather than full ICC transforms"],"requires":["Python 3.8+","Optional: liblcms2 for ICC profile support"],"input_types":["PIL.Image.Image objects","target color mode string (e.g., 'RGB', 'CMYK', 'LAB')","optional ICC profile data (bytes or file path)"],"output_types":["PIL.Image.Image object in target color space","ICC profile data (bytes)"],"categories":["image-visual","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-pillow__cap_3","uri":"capability://image.visual.drawing.and.text.rendering.with.truetype.font.support","name":"drawing and text rendering with truetype font support","description":"Pillow's ImageDraw module provides vector drawing primitives (rectangles, ellipses, polygons, lines, arcs) and text rendering via FreeType2 integration. Text rendering supports TrueType and OpenType fonts with optional complex text layout via Raqm library, enabling proper shaping for scripts like Arabic and Devanagari. Drawing operations are implemented in C for performance and support anti-aliasing, stroke width control, and fill/outline combinations.","intents":["Draw geometric shapes (rectangles, circles, polygons) on images with customizable colors and strokes","Render text with TrueType fonts at arbitrary sizes and angles","Create annotated images with text overlays for data visualization or debugging","Support complex text layout for non-Latin scripts (Arabic, Devanagari, etc.)"],"best_for":["Data visualization and chart annotation","Image annotation for machine learning datasets","Watermarking and branding workflows","Multilingual text rendering applications"],"limitations":["Complex text layout (via Raqm) is optional and requires additional library; without it, text shaping is limited","Text rotation is supported but computationally expensive; large batches of rotated text should be pre-rendered","Anti-aliasing is applied at draw time; no post-processing anti-aliasing available","No built-in text layout engine; line breaking and paragraph formatting must be implemented by caller"],"requires":["Python 3.8+","libfreetype2 (system library)","Optional: libraqm for complex text layout"],"input_types":["PIL.Image.Image objects","shape coordinates (tuples of x,y pairs)","font file paths (TTF/OTF)","text strings (unicode)","color tuples (RGB or RGBA)"],"output_types":["PIL.Image.Image object (modified in-place via ImageDraw context)"],"categories":["image-visual"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-pillow__cap_4","uri":"capability://image.visual.image.filtering.and.convolution.operations","name":"image filtering and convolution operations","description":"Pillow provides a comprehensive filter module (ImageFilter) with built-in filters (BLUR, SHARPEN, EDGE_ENHANCE, SMOOTH, etc.) and support for custom convolution kernels via the filter() method. Filters are implemented in C using efficient convolution algorithms; the module also supports separable filters (applied as two 1D convolutions) for performance optimization. Filters can be applied to entire images or specific regions via ImageDraw masking.","intents":["Apply standard filters (blur, sharpen, edge detection) to images for preprocessing","Create custom convolution kernels for specialized image processing tasks","Enhance image quality through sharpening or smoothing","Detect edges or features in images for computer vision pipelines"],"best_for":["Image preprocessing for machine learning","Photo enhancement and retouching","Computer vision feature detection","Real-time image processing applications"],"limitations":["Custom kernels are limited to small sizes (typically 5x5 or smaller) due to performance constraints","Filters operate on entire image or rectangular regions; no arbitrary shape masking","No GPU acceleration; filter application scales linearly with image size and kernel size","Some advanced filters (e.g., bilateral filtering) are not built-in and require custom kernel implementation"],"requires":["Python 3.8+","Pillow core library with C extensions"],"input_types":["PIL.Image.Image objects","ImageFilter.Kernel objects (custom convolution kernels)","filter type constants (BLUR, SHARPEN, etc.)"],"output_types":["PIL.Image.Image object (filtered image)"],"categories":["image-visual","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-pillow__cap_5","uri":"capability://image.visual.numpy.array.interoperability.and.pixel.level.access","name":"numpy array interoperability and pixel-level access","description":"Pillow provides bidirectional conversion between PIL.Image.Image objects and NumPy arrays via Image.fromarray() and numpy() methods, enabling seamless integration with NumPy-based image processing pipelines. The Image.load() method returns a pixel access object supporting direct indexing (img.load()[x, y]) for per-pixel operations, though this is slower than array conversion. The architecture maintains separate in-memory representations (PIL's internal format and NumPy arrays) to avoid unnecessary copies.","intents":["Convert PIL images to NumPy arrays for processing with NumPy/SciPy functions","Convert NumPy arrays back to PIL images for saving or further Pillow operations","Access and modify individual pixels programmatically","Integrate Pillow with machine learning pipelines that expect NumPy arrays"],"best_for":["Data scientists combining Pillow with NumPy/SciPy workflows","Machine learning pipelines requiring image preprocessing","Pixel-level image manipulation and analysis"],"limitations":["Array conversion creates a copy of image data; large images incur memory overhead","Pixel access via Image.load() is slow (O(1) per pixel but with high constant overhead); batch operations should use array conversion","NumPy array dtype must match PIL image mode (e.g., uint8 for RGB, float32 for 32-bit images); mismatches raise errors","Changes to NumPy arrays are not reflected in original PIL image; conversion is one-way unless explicitly converted back"],"requires":["Python 3.8+","NumPy (optional but required for array conversion)","Pillow core library"],"input_types":["PIL.Image.Image objects","NumPy arrays (uint8, uint16, uint32, float32, float64)","integer tuples (x, y) for pixel access"],"output_types":["NumPy arrays (dtype matches image mode)","PIL.Image.Image objects","pixel values (tuples or scalars)"],"categories":["image-visual","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-pillow__cap_6","uri":"capability://image.visual.image.sequence.and.animated.gif.apng.handling","name":"image sequence and animated gif/apng handling","description":"Pillow handles multi-frame image sequences (GIF, APNG, TIFF) through the Image.seek() method, which navigates between frames, and Image.n_frames property, which reports frame count. The library maintains frame metadata (duration, disposal method) in the Image.info dictionary and supports writing animated sequences via Image.save() with format-specific parameters. Frame data is lazy-loaded; seeking to a frame only loads that frame into memory, enabling efficient handling of large animations.","intents":["Load and navigate through frames in animated GIFs or APNG files","Extract individual frames from multi-frame images","Create animated GIFs or APNG files from sequences of images","Access frame-specific metadata (duration, disposal method) for animation control"],"best_for":["Web developers creating animated image assets","Data visualization tools generating animated plots","Image processing pipelines handling multi-frame formats"],"limitations":["Frame seeking is sequential; seeking to frame N requires reading frames 0 to N-1, making random access slow for large animations","Animated sequence creation requires explicit loop over frames and Image.save() with append_images parameter; no high-level animation builder","APNG support is newer and less widely tested than GIF; some edge cases may not be handled correctly","Frame duration and disposal metadata are format-specific and may not round-trip perfectly across formats"],"requires":["Python 3.8+","Pillow with GIF/APNG support (requires libgif and libpng)"],"input_types":["PIL.Image.Image objects (multi-frame)","frame index (integer)","list of PIL.Image.Image objects (for creating sequences)"],"output_types":["PIL.Image.Image object (current frame)","frame metadata dict (duration, disposal)","GIF or APNG file (bytes or file path)"],"categories":["image-visual","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-pillow__cap_7","uri":"capability://image.visual.image.metadata.extraction.and.preservation.exif.xmp.icc","name":"image metadata extraction and preservation (exif, xmp, icc)","description":"Pillow extracts and preserves image metadata through the Image.info dictionary, which contains format-specific metadata (EXIF, XMP, ICC profiles, etc.). EXIF data is parsed via the Exif class (Pillow 9.2+), providing structured access to EXIF tags. Metadata is preserved during image operations (e.g., resize) if explicitly requested via Image.copy() or Image.convert(), and can be written back to files via Image.save() with metadata parameters. The architecture maintains metadata separately from pixel data, enabling efficient metadata-only operations.","intents":["Extract EXIF data from photos (camera model, GPS, timestamp, orientation)","Preserve metadata when processing images (e.g., retain EXIF during resize)","Embed or update metadata in images before saving","Access ICC color profiles embedded in images"],"best_for":["Photo management and organization tools","Image processing pipelines requiring metadata preservation","Geolocation and timestamp extraction from photos"],"limitations":["EXIF parsing is format-specific; not all formats support EXIF (e.g., PNG uses different metadata formats)","Metadata modification is limited; Pillow can read and preserve metadata but not easily modify individual EXIF tags","XMP support is read-only in most cases; writing XMP requires manual XML manipulation","Metadata is lost if image is converted between formats without explicit preservation"],"requires":["Python 3.8+","Pillow 9.2+ for structured EXIF access via Exif class"],"input_types":["PIL.Image.Image objects","EXIF tag names or IDs (strings or integers)"],"output_types":["Image.info dictionary (format-specific metadata)","Exif object (structured EXIF data)","ICC profile bytes","XMP XML string"],"categories":["image-visual","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-pillow__cap_8","uri":"capability://image.visual.image.palette.and.quantization.operations","name":"image palette and quantization operations","description":"Pillow supports palette-based images (mode 'P') through quantization (converting RGB to indexed color) and palette manipulation. The Image.quantize() method reduces image colors to a specified palette size using various algorithms (median cut, k-means via libimagequant if available). Palettes can be extracted, modified, and applied to images via Image.palette property. The architecture maintains separate palette data (color lookup table) from pixel data (indices into palette), enabling efficient storage of indexed images.","intents":["Convert RGB images to indexed color (palette mode) for smaller file sizes","Reduce image colors to a specific palette for retro or stylized effects","Extract and analyze color palettes from images","Create GIFs with optimized palettes for web distribution"],"best_for":["Web optimization workflows requiring small image sizes","Retro or pixel art style image processing","GIF creation with optimized color palettes"],"limitations":["Quantization quality depends on algorithm; median cut is faster but lower quality than k-means (libimagequant)","Quantization is lossy; converting RGB→indexed→RGB will not recover original colors","Palette size is limited to 256 colors (standard for GIF); larger palettes require different approaches","Quantization is computationally expensive for large images; no GPU acceleration available"],"requires":["Python 3.8+","Optional: libimagequant for higher-quality quantization"],"input_types":["PIL.Image.Image objects (RGB or RGBA)","integer palette size (1-256)","quantization method ('median_cut', 'fastoctree', 'libimagequant')"],"output_types":["PIL.Image.Image object (mode 'P')","PIL.ImagePalette.ImagePalette object"],"categories":["image-visual","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-pillow__cap_9","uri":"capability://image.visual.image.alpha.compositing.and.transparency.operations","name":"image alpha compositing and transparency operations","description":"Pillow handles image transparency through alpha channels (RGBA mode) and provides alpha compositing via Image.paste() with alpha parameter and Image.alpha_composite() method. The paste() method supports alpha blending, where the alpha channel of the source image controls transparency during composition. The architecture maintains alpha as a separate channel in RGBA mode, enabling efficient alpha operations without affecting RGB data. Transparency can be converted between modes (e.g., RGBA→RGB with background color) via Image.convert().","intents":["Composite images with transparency (e.g., overlay PNG with alpha on background)","Extract or manipulate alpha channels independently","Convert between transparent and opaque representations","Create images with partial transparency for blending effects"],"best_for":["Web graphics and UI design workflows","Image composition and layering","Watermarking and overlay operations"],"limitations":["Alpha compositing is CPU-bound; large images or many composition operations are slow","Compositing always uses simple alpha blending; advanced blend modes (multiply, screen, etc.) are not built-in","Alpha channel is limited to 8-bit (0-255); 16-bit or floating-point alpha is not supported","Transparency information is lost when converting RGBA to RGB without specifying background color"],"requires":["Python 3.8+","Pillow core library"],"input_types":["PIL.Image.Image objects (RGBA or RGB)","integer coordinates (x, y) for paste location","optional mask image (for selective transparency)"],"output_types":["PIL.Image.Image object (composited image)"],"categories":["image-visual"],"confidence":0.5,"matches":0,"success_rate":0}],"trust":{"score":27,"verified":false,"data_access_risk":"high","permissions":["Python 3.8+","libjpeg, libpng, libwebp, libz (system libraries, typically pre-installed)","Optional: libtiff, libfreetype, libharfbuzz for advanced features","Pillow core library with C extensions compiled","File paths (str or Path) or file-like objects with read() method","External C libraries for target format (libjpeg for JPEG, libpng for PNG, etc.)","C compiler (gcc, clang, MSVC) for source builds","External C libraries (libjpeg, libpng, etc.) for full format support","Optional: liblcms2 for ICC profile support","libfreetype2 (system library)"],"failure_modes":["Format support depends on external C libraries being available at build time; missing dependencies silently disable formats rather than raising errors","Some formats (PSD, TIFF with certain compression) have limited feature support compared to native tools","Streaming decode is format-specific; not all formats support incremental reading","Rotation creates new canvas; rotated images may have different dimensions than originals, requiring explicit size specification","Resampling filters trade quality for speed; LANCZOS is slowest but highest quality, NEAREST is fastest but produces artifacts","No GPU acceleration; all operations are CPU-bound and scale linearly with image size","Lazy loading requires seeking in file; not all file-like objects support seeking (e.g., network streams)","Memory-mapped access is format-specific; only TIFF and certain other formats support it","Error recovery is limited; corrupted files may raise exceptions rather than attempting partial recovery","Streaming decode is not available for all formats; some formats require full file to be loaded before decoding","builder identity is not verified yet","no observed match outcomes yet"],"rank_breakdown":{"adoption":0.05,"quality":0.35,"ecosystem":0.43,"match_graph":0.25,"freshness":0.9,"weights":{"adoption":0.3,"quality":0.2,"ecosystem":0.15,"match_graph":0.3,"freshness":0.05}},"observed_outcomes":{"matches":0,"success_rate":0,"avg_confidence":0,"top_intents":[],"last_matched_at":null},"maintenance":{"status":"active","updated_at":"2026-05-24T12:16:25.060Z","last_scraped_at":"2026-05-03T15:20:20.420Z","last_commit":null},"community":{"stars":null,"forks":null,"weekly_downloads":null,"model_downloads":null,"model_likes":null}},"distribution":{"claim_url":"https://unfragile.ai/submit?claim=pypi-pillow","compare_url":"https://unfragile.ai/compare?artifact=pypi-pillow"}},"signature":"FW3zFNZif5BiObj6x+XTzGH7kBYE5+zrZccIlolQ9qns3rEHIoevDRA4WpySnulFejIKDM54ARqO50QpduJ1Ag==","signedAt":"2026-06-16T01:40:11.275Z","signedBy":"unfragile.ai","version":1},"_links":{"self":"https://unfragile.ai/api/v1/passport/pypi-pillow","artifact":"https://unfragile.ai/pypi-pillow","verify":"https://unfragile.ai/api/v1/verify?slug=pypi-pillow","publicKey":"https://unfragile.ai/api/v1/trust-passport-public-key","spec":"https://unfragile.ai/trust","schema":"https://unfragile.ai/schema.json","docs":"https://unfragile.ai/docs"}}