Skip to main content

Python bindings for libheif - HEIC/AVIF/JPEG2000 image codec

Project description

pylibheif

PyPI version Build and Publish License: LGPL v3 Python 3.11+

Python bindings for libheif using pybind11.

Features

  • HEIC/HEIF Support: Read and write HEIC images (HEVC/H.265 encoded)
  • AVIF Support: Read and write AVIF images (AV1 encoded)
  • JPEG2000 Support: Read and write JPEG2000 images in HEIF container
  • NumPy Integration: Zero-copy access to image data via Python Buffer Protocol
  • Metadata Support: Read and write EXIF, XMP, and custom metadata
  • RAII Resource Management: Automatic resource cleanup with context managers

Supported Formats

Format Decoding Encoding Codec
HEIC (HEVC/H.265) libde265 / x265
AVIF (AV1) DAV1D + AOM
JPEG2000 OpenJPEG

Requirements

  • Python >= 3.12
  • NumPy >= 1.26.0
  • CMake >= 3.15
  • C++17 compatible compiler

System Dependencies

# macOS
brew install openjpeg

# Ubuntu/Debian
sudo apt install libopenjp2-7-dev

Installation

pip install pylibheif

Or with uv:

uv pip install pylibheif

Building from Source

# Clone with submodules
git clone --recursive https://github.com/twn39/pylibheif.git
cd pylibheif

# Install
uv pip install -e .

Usage

Reading HEIC/AVIF Images

Using context manager (recommended):

import pylibheif
import numpy as np

# Open HEIC file with context manager
with pylibheif.HeifContext() as ctx:
    ctx.read_from_file('image.heic')
    
    # Get primary image handle
    handle = ctx.get_primary_image_handle()
    print(f'Image size: {handle.width}x{handle.height}')
    print(f'Has alpha: {handle.has_alpha}')
    
    # Decode to RGB
    img = handle.decode(pylibheif.HeifColorspace.RGB, 
                        pylibheif.HeifChroma.InterleavedRGB)
    
    # Get as NumPy array (zero-copy)
    plane = img.get_plane(pylibheif.HeifChannel.Interleaved, False)
    arr = np.asarray(plane)  # shape: (height, width, 3)

Explicit creation (for more control):

import pylibheif
import numpy as np

# Create context explicitly
ctx = pylibheif.HeifContext()
ctx.read_from_file('image.heic')

handle = ctx.get_primary_image_handle()
img = handle.decode(pylibheif.HeifColorspace.RGB, 
                    pylibheif.HeifChroma.InterleavedRGB)
plane = img.get_plane(pylibheif.HeifChannel.Interleaved, False)
arr = np.asarray(plane)

# Resources are automatically freed when objects go out of scope

Writing HEIC Images (H.265)

import pylibheif
import numpy as np

# Create image from NumPy array
width, height = 1920, 1080
img = pylibheif.HeifImage(width, height, 
                          pylibheif.HeifColorspace.RGB,
                          pylibheif.HeifChroma.InterleavedRGB)
img.add_plane(pylibheif.HeifChannel.Interleaved, width, height, 8)

# Fill with data
plane = img.get_plane(pylibheif.HeifChannel.Interleaved, True)
arr = np.asarray(plane)
arr[:] = your_image_data  # your RGB data

# Encode and save as HEIC
ctx = pylibheif.HeifContext()
encoder = pylibheif.HeifEncoder(pylibheif.HeifCompressionFormat.HEVC)
encoder.set_lossy_quality(85)
encoder.encode_image(ctx, img)

ctx.write_to_file('output.heic')

Writing AVIF Images (AV1)

import pylibheif
import numpy as np

# Prepare image (same as above)
width, height = 1920, 1080
img = pylibheif.HeifImage(width, height, 
                          pylibheif.HeifColorspace.RGB,
                          pylibheif.HeifChroma.InterleavedRGB)
img.add_plane(pylibheif.HeifChannel.Interleaved, width, height, 8)

# Encode and save as AVIF
ctx = pylibheif.HeifContext()

# Use AV1 format for AVIF
encoder = pylibheif.HeifEncoder(pylibheif.HeifCompressionFormat.AV1)
encoder.set_lossy_quality(85)
encoder.set_parameter("speed", "6") # Optional: Tune speed (0-9)

encoder.encode_image(ctx, img)

# Save with .avif extension
ctx.write_to_file('output.avif')

Writing JPEG Images

import pylibheif
import numpy as np

# Prepare image (same as above)
width, height = 1920, 1080
img = pylibheif.HeifImage(width, height, 
                          pylibheif.HeifColorspace.RGB,
                          pylibheif.HeifChroma.InterleavedRGB)
img.add_plane(pylibheif.HeifChannel.Interleaved, width, height, 8)

# Encode and save as JPEG
ctx = pylibheif.HeifContext()

# Use JPEG format
encoder = pylibheif.HeifEncoder(pylibheif.HeifCompressionFormat.JPEG)
encoder.set_lossy_quality(90) # Quality 0-100

encoder.encode_image(ctx, img)

# Save with .jpg extension
ctx.write_to_file('output.jpg')

Writing JPEG2000 Images

import pylibheif
import numpy as np

# Prepare image (same as above)
width, height = 1920, 1080
img = pylibheif.HeifImage(width, height, 
                          pylibheif.HeifColorspace.RGB,
                          pylibheif.HeifChroma.InterleavedRGB)
img.add_plane(pylibheif.HeifChannel.Interleaved, width, height, 8)

# Encode and save as JPEG2000 in HEIF container
ctx = pylibheif.HeifContext()

# Use JPEG2000 format
encoder = pylibheif.HeifEncoder(pylibheif.HeifCompressionFormat.JPEG2000)
encoder.set_lossy_quality(85) # Quality 0-100

encoder.encode_image(ctx, img)

# Save with .jp2 or .heif extension
# Note: libheif typically saves JPEG2000 in a HEIF container
ctx.write_to_file('output.heif')

Encoder Selection

By default, pylibheif selects the best available encoder for the requested format (e.g. x265 for HEVC). You can also explicitly select a specific encoder (e.g. Kvazaar) if available.

import pylibheif

# 1. Get all available HEVC encoders
descriptors = pylibheif.get_encoder_descriptors(pylibheif.HeifCompressionFormat.HEVC)

# Print available encoders
for d in descriptors:
    print(f"ID: {d.id_name}, Name: {d.name}")

# 2. Find specific encoder (e.g. Kvazaar)
kvazaar_desc = next((d for d in descriptors if "kvazaar" in d.id_name), None)

if kvazaar_desc:
    # 3. Create encoder explicitly using the descriptor
    encoder = pylibheif.HeifEncoder(kvazaar_desc)
    
    # Verify which encoder is used
    print(f"Using encoder: {encoder.name}")
    
    encoder.set_lossy_quality(85)
    # encoder.encode_image(...)
    # encoder.encode_image(...)

Reading Metadata

import pylibheif

ctx = pylibheif.HeifContext()
ctx.read_from_file('image.heic')
handle = ctx.get_primary_image_handle()

# Get metadata block IDs
exif_ids = handle.get_metadata_block_ids('Exif')
for id in exif_ids:
    metadata_type = handle.get_metadata_block_type(id)
    metadata_bytes = handle.get_metadata_block(id)
    print(f'Metadata type: {metadata_type}, size: {len(metadata_bytes)}')

Writing Metadata

import pylibheif
import numpy as np

# Create and encode an image
width, height = 64, 64
img = pylibheif.HeifImage(width, height,
                          pylibheif.HeifColorspace.RGB,
                          pylibheif.HeifChroma.InterleavedRGB)
img.add_plane(pylibheif.HeifChannel.Interleaved, width, height, 8)
plane = img.get_plane(pylibheif.HeifChannel.Interleaved, True)
arr = np.asarray(plane)
arr[:] = 128  # fill with gray

ctx = pylibheif.HeifContext()
encoder = pylibheif.HeifEncoder(pylibheif.HeifCompressionFormat.HEVC)
encoder.set_lossy_quality(85)
handle = encoder.encode_image(ctx, img)

# Add EXIF metadata (with 4-byte offset prefix for TIFF header)
exif_data = b'\x00\x00\x00\x00' + b'Exif\x00\x00' + b'II*\x00...'  # your EXIF data
ctx.add_exif_metadata(handle, exif_data)

# Add XMP metadata
xmp_data = b'''<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/">
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
      <dc:creator>My App</dc:creator>
    </rdf:Description>
  </rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>'''
ctx.add_xmp_metadata(handle, xmp_data)

# Add custom/generic metadata
custom_data = b'{"app": "myapp", "version": "1.0"}'
ctx.add_generic_metadata(handle, custom_data, "json", "application/json")

# Save
ctx.write_to_file('output_with_metadata.heic')

API Reference

class pylibheif.HeifContext

Manages the valid lifetime of libheif context. It is the main entry point (root object) for high-level API.

Methods

__init__() Creates a new empty context.

read_from_file(filename: str) -> None Reads a HEIF file from the given filename.

  • filename: Path to the HEIF file.

read_from_memory(data: bytes) -> None Reads a HEIF file from a bytes object.

  • data: Bytes containing the file content.

write_to_file(filename: str) -> None Writes the current context to a file.

  • filename: Destination path.

write_to_bytes() -> bytes Writes the current context to a bytes object.

  • Returns: bytes object containing the encoded file data.

get_primary_image_handle() -> HeifImageHandle Gets the handle for the primary image in the file.

  • Returns: HeifImageHandle for the primary image.

get_image_handle(id: int) -> HeifImageHandle Gets the handle for a specific image ID.

  • id: The ID of the image (see get_list_of_top_level_image_IDs).
  • Returns: HeifImageHandle.

get_list_of_top_level_image_IDs() -> List[int] Gets a list of IDs of all top-level images in the file.

  • Returns: List of integer IDs.

add_exif_metadata(handle: HeifImageHandle, data: bytes) -> None Adds EXIF metadata to the specified image.

  • handle: Image handle from encoding.
  • data: Raw EXIF bytes (with 4-byte offset prefix for TIFF header).

add_xmp_metadata(handle: HeifImageHandle, data: bytes) -> None Adds XMP metadata to the specified image.

  • handle: Image handle from encoding.
  • data: XMP XML as bytes.

add_generic_metadata(handle: HeifImageHandle, data: bytes, item_type: str, content_type: str = "") -> None Adds generic/custom metadata to the specified image.

  • handle: Image handle from encoding.
  • data: Raw metadata bytes.
  • item_type: Metadata item type (e.g. "json", "iptc").
  • content_type: Optional MIME content type (e.g. "application/json").

class pylibheif.HeifImageHandle

Represents a compressed image within the HEIF file.

Properties

  • width (int): The width of the image.
  • height (int): The height of the image.
  • has_alpha (bool): True if the image has an alpha channel.

Methods

decode(colorspace: HeifColorspace = HeifColorspace.RGB, chroma: HeifChroma = HeifChroma.InterleavedRGB) -> HeifImage Decodes the image handle into an uncompressed HeifImage.

  • colorspace: Target colorspace (default: RGB).
  • chroma: Target chroma format (default: InterleavedRGB).
  • Returns: Decoded HeifImage.

get_metadata_block_ids(type_filter: str = "") -> List[str] Gets a list of metadata block IDs attached to this image.

  • type_filter: Optional filter string (e.g. "Exif", "XMP").
  • Returns: List of metadata ID strings.

get_metadata_block_type(id: str) -> str Gets the type string of a specific metadata block.

  • id: Metadata ID.
  • Returns: Type string (e.g. "Exif").

get_metadata_block(id: str) -> bytes Gets the raw data of a metadata block.

  • id: Metadata ID.
  • Returns: bytes object containing the metadata.

class pylibheif.HeifImage

Represents an uncompressed image containing pixel data. Supports the Python Buffer Protocol for zero-copy access with NumPy.

Properties

  • width (int): The width of the image.
  • height (int): The height of the image.

Methods

__init__(width: int, height: int, colorspace: HeifColorspace, chroma: HeifChroma) Creates a new empty image.

  • width: Image width.
  • height: Image height.
  • colorspace: Image colorspace.
  • chroma: Image chroma format.

add_plane(channel: HeifChannel, width: int, height: int, bit_depth: int) -> None Adds a new plane to the image.

  • channel: The channel type (e.g. HeifChannel.Interleaved).
  • width: Width of the plane.
  • height: Height of the plane.
  • bit_depth: Bit depth (e.g. 8).

get_plane(channel: HeifChannel, writeable: bool = False) -> HeifPlane Gets a plane object that supports the buffer protocol.

  • channel: The channel to retrieve.
  • writeable: Whether the buffer should be writable.
  • Returns: HeifPlane object (wrappable with np.asarray()).

class pylibheif.HeifEncoder

Controls the encoding process.

Methods

__init__(format: HeifCompressionFormat) Creates a new encoder for the specified format.

  • format: Compression format (e.g. HeifCompressionFormat.HEVC).

set_lossy_quality(quality: int) -> None Sets the quality for lossy compression.

  • quality: Integer between 0 (lowest) and 100 (highest).

set_parameter(name: str, value: str) -> None Sets a low-level encoder parameter.

  • name: Parameter name (e.g. "speed" for AV1).
  • value: Parameter value.

encode_image(context: HeifContext, image: HeifImage, preset: str = "") -> HeifImageHandle Encodes the given image and appends it to the context.

  • context: The destination HeifContext.
  • image: The source HeifImage to encode.
  • preset: Optional encoder preset (e.g. "ultrafast", "slow"). Default is empty (balanced/default). Note: This maps to the 'preset' parameter in libheif. It works for x265 (check version), but AOM and others may use different parameters (e.g. 'speed') which should be set via set_parameter instead.
  • Returns: HeifImageHandle for the encoded image. Can be used to add metadata.

Enums

pylibheif.HeifColorspace

  • RGB, YCbCr, Monochrome, Undefined

pylibheif.HeifChroma

  • InterleavedRGB: Interleaved R, G, B bytes.
  • InterleavedRGBA: Interleaved R, G, B, A bytes.
  • C420: YUV 4:2:0 planar.
  • C422: YUV 4:2:2 planar.
  • C444: YUV 4:4:4 planar.
  • Monochrome.

pylibheif.HeifChannel

  • Interleaved: For interleaved RGB/RGBA.
  • Y, Cb, Cr: For YUV planar.
  • R, G, B: For RGB planar.
  • Alpha: For Alpha channel.

pylibheif.HeifCompressionFormat

  • HEVC: H.265 (libx265).
  • AV1: AV1 (AOM/RAV1E/SVT).
  • JPEG: JPEG.
  • JPEG2000: JPEG 2000 (OpenJPEG).

Building from Source

# Clone with submodules
git clone --recursive https://github.com/your-username/pylibheif.git
cd pylibheif

# Build
uv pip install -e .

Performance

Performance

Benchmarks on 1280x720 RGB image (Apple Silicon), comparing encoders at Iso-Quality (approx. 29.2 dB PSNR) to ensure fair speed comparison.

Baseline: x265 (HEVC) at Quality 80 (Medium Preset).

Encoder Quality Setting Time (Mean) vs x265 Note
AOM AV1 Q86 (Speed 6) ~115 ms 1.8x Faster 🚀 Fastest & Best Efficiency
Kvazaar (HEVC) Q80 ~125 ms 1.6x Faster Best HEVC option
x265 (HEVC) Q80 ~206 ms Baseline

Key Findings:

  1. AOM AV1 Efficiency: Surprisingly, libaom (at speed 6) is the fastest encoder in this test, outperforming even the highly optimized Kvazaar HEVC encoder while maintaining excellent compression efficiency (smallest file size).
  2. HEVC Choice: If you need HEVC, Kvazaar is significantly faster than x265 for similar quality.
Raw Benchmark Output (Iso-Quality Run)
----------------------------------------------------------------------------------
Test: 1280x720 RGB Image, 10 Rounds
----------------------------------------------------------------------------------
Name (time in ms)                     Mean            OPS
----------------------------------------------------------------------------------
test_benchmark_encode_aom_av1       115.64           8.65  (Q86)
test_benchmark_encode_kvazaar       125.19           7.96  (Q80)
test_benchmark_encode_x265          206.03           4.65  (Q80 / Limit)
----------------------------------------------------------------------------------

Run benchmarks yourself:

uv pip install pillow-heif pytest-benchmark
uv run pytest tests/test_benchmark.py --benchmark-only --benchmark-min-rounds=20

License

This project is licensed under the LGPL-3.0 License - see the LICENSE file for details.

Acknowledgments

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

pylibheif-1.21.2.post9.tar.gz (4.4 MB view details)

Uploaded Source

Built Distributions

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

pylibheif-1.21.2.post9-cp314-cp314-win_amd64.whl (6.4 MB view details)

Uploaded CPython 3.14Windows x86-64

pylibheif-1.21.2.post9-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (5.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pylibheif-1.21.2.post9-cp314-cp314-macosx_14_0_arm64.whl (4.7 MB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

pylibheif-1.21.2.post9-cp313-cp313-win_amd64.whl (6.3 MB view details)

Uploaded CPython 3.13Windows x86-64

pylibheif-1.21.2.post9-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (5.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pylibheif-1.21.2.post9-cp313-cp313-macosx_14_0_arm64.whl (4.7 MB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

pylibheif-1.21.2.post9-cp312-cp312-win_amd64.whl (6.3 MB view details)

Uploaded CPython 3.12Windows x86-64

pylibheif-1.21.2.post9-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (5.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pylibheif-1.21.2.post9-cp312-cp312-macosx_14_0_arm64.whl (4.7 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

pylibheif-1.21.2.post9-cp311-cp311-win_amd64.whl (6.3 MB view details)

Uploaded CPython 3.11Windows x86-64

pylibheif-1.21.2.post9-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (5.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pylibheif-1.21.2.post9-cp311-cp311-macosx_14_0_arm64.whl (4.7 MB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

File details

Details for the file pylibheif-1.21.2.post9.tar.gz.

File metadata

  • Download URL: pylibheif-1.21.2.post9.tar.gz
  • Upload date:
  • Size: 4.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pylibheif-1.21.2.post9.tar.gz
Algorithm Hash digest
SHA256 eeefe511f64dca8021958d54f89c021faa1db72771efc64d92ec5259a532d01f
MD5 99bd6a4459f36d8dbca41ef8e089d534
BLAKE2b-256 b2cd2a7c81cecb8fd67fb24fd3b9788a96c4fe51b66b66a7ef2bcf2414d2f321

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibheif-1.21.2.post9.tar.gz:

Publisher: build.yml on twn39/pylibheif

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibheif-1.21.2.post9-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for pylibheif-1.21.2.post9-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 2963fe1d7ddd8e277f730e62b525b8aeaeee3fe645118dfc7bb0cbe3172f5ed0
MD5 47af84341a750699f3dc932e7d45c81e
BLAKE2b-256 9300de6975213b4c5cd67c57dcc3215902d0d0000c41a8418490dffa9da05e93

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibheif-1.21.2.post9-cp314-cp314-win_amd64.whl:

Publisher: build.yml on twn39/pylibheif

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibheif-1.21.2.post9-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pylibheif-1.21.2.post9-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2f46a245363a5a5ee9a5d072f1b6d9f4208e3aebbd14c2adedc6679a9450913c
MD5 7f9e74dedbc3944b2d606d1dd5396c90
BLAKE2b-256 86aa5c464ddc4cd36cfbead4fa414dc2a7aa13ffd6423ef1cb25afbd6b9e0b93

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibheif-1.21.2.post9-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on twn39/pylibheif

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibheif-1.21.2.post9-cp314-cp314-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pylibheif-1.21.2.post9-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 8892ee83bb7f00ff4be1216ab1fbd89dd9e9f77c0f6858371ce5167703d8a71b
MD5 9540711e324726e3caa36b3b71911380
BLAKE2b-256 862ccc092db9b6acde57a4b18f6e479f105c0a6b64a7bbe000286521ebd8cde2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibheif-1.21.2.post9-cp314-cp314-macosx_14_0_arm64.whl:

Publisher: build.yml on twn39/pylibheif

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibheif-1.21.2.post9-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for pylibheif-1.21.2.post9-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 0c84d48b595be5913807092fcba189ff081711e1ac0af88fd7ec81f03b6e98e9
MD5 03753e4d937c92b8246360fb9b4be8d2
BLAKE2b-256 c5fbb8042c0b5081ac918e9d5dd038577a9d0de009cd4f5b195e80109af1ef88

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibheif-1.21.2.post9-cp313-cp313-win_amd64.whl:

Publisher: build.yml on twn39/pylibheif

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibheif-1.21.2.post9-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pylibheif-1.21.2.post9-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e6fa20a2eec0347e7d728b63e1ab6a3c66e4f423104550796db87f9afa13ea8e
MD5 f290bf29ef343507de23029174eb28ff
BLAKE2b-256 4a96344b232f06cc5aa4984d10441876d19be9ebd3d7bb6aaec23cedd014d5da

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibheif-1.21.2.post9-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on twn39/pylibheif

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibheif-1.21.2.post9-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pylibheif-1.21.2.post9-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 404727264d6f5b8c05108aa1551b6aa76107ef0f95b44151f216bc30d0878730
MD5 972e26c0651de20f3d77da6e983c3118
BLAKE2b-256 58a01f7d4c40817ea3d841f2dfb68e73f75d5504eba10916cb9b7661f88e915a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibheif-1.21.2.post9-cp313-cp313-macosx_14_0_arm64.whl:

Publisher: build.yml on twn39/pylibheif

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibheif-1.21.2.post9-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for pylibheif-1.21.2.post9-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4b8275fefaec0b93abc4949bde680f27359b39350c9834d985d1117b88906ba4
MD5 998686f674971146ee3c1fcf9677bdc0
BLAKE2b-256 46aad938a4e7611209b0d1ef3affaccb8b82b8980c1da450a49a27eb2b502e0d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibheif-1.21.2.post9-cp312-cp312-win_amd64.whl:

Publisher: build.yml on twn39/pylibheif

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibheif-1.21.2.post9-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pylibheif-1.21.2.post9-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 67abacf94d2c8415bc73a1de3d38fbab45cd8d37a34f32c8e524e4d7dab15273
MD5 b486430420a4243a57ecda919dc93945
BLAKE2b-256 c0b433bd0b649c8ced5c941524b2743adc7f74b1d4139c4be7755b64585a61a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibheif-1.21.2.post9-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on twn39/pylibheif

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibheif-1.21.2.post9-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pylibheif-1.21.2.post9-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 5076368892e98650bb943d5afa57bd8bc5bd92fe7e69a4d16215910634eb70ca
MD5 00840224a561292c5c2ba8c3ffd66993
BLAKE2b-256 b66c66de4a50833183c159e1e5afb3d2750fa2ea6fc8e055d4783d6e8300efe9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibheif-1.21.2.post9-cp312-cp312-macosx_14_0_arm64.whl:

Publisher: build.yml on twn39/pylibheif

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibheif-1.21.2.post9-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for pylibheif-1.21.2.post9-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ac07d754565a2e73c94aaebba954baf4c497677fb53ffc798701b513948d5a7f
MD5 4e242a2259bca414986343cf9b845f1d
BLAKE2b-256 492bf314cce005685a1a8fb68ae4a64ac12a1100b3b73a06ae5c97ec501268e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibheif-1.21.2.post9-cp311-cp311-win_amd64.whl:

Publisher: build.yml on twn39/pylibheif

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibheif-1.21.2.post9-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pylibheif-1.21.2.post9-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e694cd4549877670f7d1e05f58b2a73e411c095c72fc7d91b8e3aaa552e5f563
MD5 0fdbac98d70cc4e1560f7bc32d23a3a7
BLAKE2b-256 e74a9f6f61b34e1d864aaf28b88a55b01cd1130c1bec4b16eb1b795a87657301

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibheif-1.21.2.post9-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on twn39/pylibheif

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibheif-1.21.2.post9-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pylibheif-1.21.2.post9-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 24667e5cc7fa94f8fe1ad007d35d7acb0f84cdd9562da38ea03c921c91e0060f
MD5 5689e3589513b8d4406fc806ccd3de56
BLAKE2b-256 43dedbd8f2746329a937e27d7d6a93a44221d894d12f3cc946f7ea0c266732d3

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibheif-1.21.2.post9-cp311-cp311-macosx_14_0_arm64.whl:

Publisher: build.yml on twn39/pylibheif

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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