Skip to main content

libheif_binary

Prebuilt libheif and its codec libraries for Python packages that read and write HEIF and AVIF images. The package bundles native libraries and the heif-enc, heif-dec and heif-info commands, with a small Python API for loading libheif. It does not provide Python image objects or bindings to the full libheif API.

Supported platforms and Python versions

Requires Python 3.6 or newer and a wheel matching your operating system and architecture.

Platform Minimum system requirement Architectures Python
Linux, glibc (manylinux_2_28) glibc 2.28 x86_64, aarch64 3.6+
Linux, musl (musllinux_1_2) musl 1.2, including compatible Alpine Linux releases x86_64, aarch64 3.6+
macOS macOS 11 x86_64, arm64; combined universal2 wheel 3.6+

Windows is not supported.

Compatibility and test coverage are distinct:

Build Python versions checked by CI
Linux, glibc CPython 3.9, 3.14 and 3.14 free-threaded; PyPy interpreters included in the build image
Linux, musl CPython 3.9, 3.14 and 3.14 free-threaded
macOS, including both universal2 architectures CPython 3.12

Installation

Install the package:

pip install libheif_binary

The native libraries and CLI tools are bundled in the wheel. You do not need to install libheif or its codecs separately.

Python API

On Linux and macOS, preload the bundled library before importing a Python extension linked against libheif:

from libheif_binary import load_library

_libheif_handle = load_library()
from your_package import _libheif_cffi

Replace your_package._libheif_cffi with your extension module. Keep the returned ctypes.CDLL object alive until the extension has finished importing. The library is loaded with RTLD_GLOBAL so its symbols are available to linked extensions.

Command-line tools

Installation adds these commands to the Python environment:

Command Purpose
heif-enc Encode images as HEIF or AVIF
heif-dec Decode HEIF or AVIF images, including PNG and JPEG output
heif-info Inspect image metadata and container information

Use --help for the options supported by the bundled libheif version:

heif-enc --help
heif-dec --help
heif-info --help

By default, these commands start a Python wrapper that executes the native tool. To run them directly without starting Python, replace the wrappers in the installed environment with relative symlinks:

libheif-link-cli

This is optional and requires write access to the environment's scripts directory. Run it again after reinstalling or upgrading the package.

Building wheels

Run the following commands from the repository root. Wheels are saved in dist/. Dependency versions and source checksums are pinned in versions/*.env. The package version is <libheif version>.<packaging revision>.

Linux

With Docker running, build for glibc or musl:

make -C linux manylinux
make -C linux musllinux

To select an architecture, add ARCH=amd64 or ARCH=arm64:

make -C linux manylinux ARCH=arm64

Each build tests the installed wheel before exporting it.

macOS

Build with Python (3.12 tested) and the Xcode command-line tools:

make -C macos

The wheel targets the current architecture.

Testing

Run the unit tests from the repository root:

pytest tests -v

To test an installed wheel, run the smoke test:

python tests/smoke.py /path/to/example.heic

Use examples/example.heic from the pinned libheif source release.

Bundled libraries and licenses

The package includes libheif, x264, x265, libde265, libaom, libsharpyuv, libpng and libjpeg-turbo.

License and patent notices for bundled dependencies are included in the installed package's libheif_binary/licenses/ directory.

Metadata

Release files for libheif-binary 1.22.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for libheif-binary 1.22.2.1
File
libheif_binary-1.22.2.1-py3-none-musllinux_1_2_x86_64.whl Python 3 none Linux musl 1.2+ x86-64 Details
libheif_binary-1.22.2.1-py3-none-musllinux_1_2_aarch64.whl Python 3 none Linux musl 1.2+ ARM64 Details
libheif_binary-1.22.2.1-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl Python 3 none Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
libheif_binary-1.22.2.1-py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl Python 3 none Linux glibc 2.27+ ARM64, Linux glibc 2.28+ ARM64 Details
libheif_binary-1.22.2.1-py3-none-macosx_11_0_universal2.whl Python 3 none macOS 11.0+ universal2 (ARM64, x86-64) Details

Total release size: 47.0 MB

Release files / libheif_binary-1.22.2.1-py3-none-musllinux_1_2_x86_64.whl

Download URL libheif_binary-1.22.2.1-py3-none-musllinux_1_2_x86_64.whl
Size 8.6 MB
Tags Linux musl 1.2+ x86-64 Python 3
SHA-256 checksum
How to use checksums
85d14e8dc842ca564df0dc6784fa73b46ed7951e6c7ed9e78cadf0f4200cfe42
BLAKE2b-256 checksum
How to use checksums
306ccbffa059061c871a6d79e7d1fe7b40aee85a54bc620c3744440f31f8a758
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release files / libheif_binary-1.22.2.1-py3-none-musllinux_1_2_aarch64.whl

Download URL libheif_binary-1.22.2.1-py3-none-musllinux_1_2_aarch64.whl
Size 9.5 MB
Tags Linux musl 1.2+ ARM64 Python 3
SHA-256 checksum
How to use checksums
1f2563d54c8a4bf09661bdd360b421f637c92873e3dd1a2071ae475a8f6daa44
BLAKE2b-256 checksum
How to use checksums
c03cae41f69cba31893bda6bc00dc357bbe7173e33d74655ac3a1d0c5d20fceb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release files / libheif_binary-1.22.2.1-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL libheif_binary-1.22.2.1-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 7.6 MB
Tags Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 Python 3
SHA-256 checksum
How to use checksums
6d81c508e3fce4e6464c5ef744795f52109c59b3a4581d0c387b33f754864cfa
BLAKE2b-256 checksum
How to use checksums
cf4847e9c3810df07f08b581e9379ce2acc3df881dbb7b45164848364f15933a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release files / libheif_binary-1.22.2.1-py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL libheif_binary-1.22.2.1-py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 8.4 MB
Tags Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64 Python 3
SHA-256 checksum
How to use checksums
8e5486ed48c590422531982dc734a1a2d5eaade0b068df8b8b4c5c0b4878e352
BLAKE2b-256 checksum
How to use checksums
88d9f6c69a1a61c7747b614fd46afb54a694780c4be0643e5789d020cabe6bf6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release files / libheif_binary-1.22.2.1-py3-none-macosx_11_0_universal2.whl

Download URL libheif_binary-1.22.2.1-py3-none-macosx_11_0_universal2.whl
Size 12.9 MB
Tags Python 3 macOS 11.0+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
8d5e1d0481ac6d279936dcf45bc15332d0c10a5edbad271a340591cbe22d90a1
BLAKE2b-256 checksum
How to use checksums
ba4fba1d3b5a12190a07da9d54061f9715a39be82d8dbefb5c7eea7b4b387cc1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page