NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2876 most downloaded on PyPI
A pillow plugin that adds avif support via libavif
Last release 2 months ago
22 Jul 2026
Ships fairly regularly
a new release about every 6 months
Nearly every release is documented
notes for 21 of 21 stable releases
1 version withdrawn
withdrawn after publishing
6 years old
22 releases · first in 2021
One column per quarter.
Added: Native grayscale (mode L) support when built against libavif 1.3.0 or greater: images with 4:0:0 subsampling now load in L mode instead of RGB,
Added: Native grayscale (mode L) support when built against libavif 1.3.0 or greater: images with 4:0:0 subsampling now load in L mode instead of RGB, and grayscale images are encoded with AVIF_RGB_FORMAT_GRAY, defaulting to 4:0:0 subsampling. Ported from Pillow #9471.
Added: AvifImagePlugin.get_codec_version() helper and _avif.codec_versions (alias of _avif.AvifCodecVersions), matching Pillow.
Fixed: Conversion of the AVIF rotation property (irot) to EXIF orientation swapped 90° and 270° rotations (Pillow #8866).
Fixed: When saving, an EXIF Orientation tag is now removed from the EXIF payload and stored as irot/imir transformations instead of being written in both places.
Fixed: AvifEncoder and AvifDecoder objects were never freed, leaking memory with every encode/decode (Pillow #9501).
Fixed: Incorrect error check after creating an image frame while encoding an animation (Pillow #9442), missing NULL dereference checks and a pixel buffer leak on an error path (Pillow #9489).
Fixed: Compilation against libavif 0.8.x and 0.9.0/0.9.1 (avifImageMirror member name handling).
CI: Update libavif to 1.4.2. See the table below for all AVIF codec versions in this release.
CI: Pin the manylinux2014 image used for Python 3.8 wheels to the last tag that still includes CPython 3.8, and pin cmake==4.0.3 for musllinux_1_1 builds (the last release with musllinux_1_1 wheels).
CI: Fix the manylinux2010 build, where libavif 1.4.x's src/io.c uses the C11 static_assert macro that el6's glibc (2.12) does not define in <assert.h>, by mapping it to the compiler's _Static_assert keyword for C sources.
CI: Skip installing test dependencies for free-threaded Python 3.13 wheels on macOS and Windows, since Pillow no longer publishes cp313t wheels.
libavif |
1.4.2 |
libaom |
3.14.1 |
dav1d |
1.5.3 |
SVT-AV1 |
4.1.0 |
rav1e |
0.8.1 |
Fixed: incompatible-pointer-type compiler error. fixes #82_.
Fixed: incompatible-pointer-type compiler error. fixes #82.
@serafdev! * CI: Build Python 3.14 wheels. fixes #80. * CI: Update libavif to af6935 (2026-01-19), which is part way through the release after 1.3.0. See the table below for all AVIF codec versions in this release. * CI: Stop building python 2.7 wheels on macOS arm.
libavif |
1.3.0 (af6935) |
libaom |
3.13.1 |
dav1d |
1.5.3 |
SVT-AV1 |
3.1.2 |
rav1e |
0.8.1 |
Yanked from PyPI because of corrupted wheels.
Yanked from PyPI because of corrupted wheels.
Fixed : incompatible-pointer-type compiler error. fixes #82 .
incompatible-pointer-type compiler error. fixes #82.| libavif | 1.3.0 (af6935) |
| libaom | 3.13.1 |
| dav1d | 1.5.3 |
| SVT-AV1 | 3.1.2 |
| rav1e | 0.8.1 |
Full Changelog: v1.5.2...v1.5.3
Fixed : Make compatible with Pillow 11.2.1, by @radarhere ( #74 ).
| libavif | 1.2.1 (2d02044) |
| libaom | 3.12.1 |
| dav1d | 1.5.1 |
| SVT-AV1 | 3.0.0 |
| rav1e | 0.7.1 |
Full Changelog: v1.5.1...v1.5.2
Fixed: Make compatible with Pillow 11.2.1, by @radarhere (#74).
CI: Modify wheel building compile flags to produce smaller binaries.
CI: Update libavif to 2d02044 (2025-04-22). This updates libaom to 3.12.1. See the table below for all AVIF codec versions in this release.
libavif |
1.2.1 |
libaom |
3.12.1 |
dav1d |
1.5.1 |
SVT-AV1 |
3.0.1 |
rav1e |
0.7.1 |
CI: Update libavif to 1.2.1. The only library version change since 1.5.0 is SVT-AV1, which was upgraded from 3.0.0 to 3.0.1. See the table below for a
CI: Update libavif to 1.2.1. The only library version change since 1.5.0 is SVT-AV1, which was upgraded from 3.0.0 to 3.0.1. See the table below for all AVIF codec versions in this release.
libavif |
1.2.1 |
libaom |
3.12.0 |
dav1d |
1.5.1 |
SVT-AV1 |
3.0.1 |
rav1e |
0.7.1 |
Fixed : Convert AVIF irot and imir into EXIF orientation when decoding an image, in #70 . EXIF orientation has been preserved by the encoder since 1.4
pillow_avif.AvifImagePlugin.CHROMA_UPSAMPLING is now actually used when decoding an image, in #70.TypeError when saving images with float frame durations, by @BlackSmith in #68) (merged from #71)| libavif | 1.2.0 (4eb0a40) |
| libaom | 3.12.0 |
| dav1d | 1.5.1 |
| SVT-AV1 | 3.0.0 |
| rav1e | 0.7.1 |
fix: use old linker to fix illegal instruction segfault on macos arm64 in #61 . fixes #59
Nothing published for this version
chore(ci): bump libavif to e10e6d9-2024-07-01; fix CI build issues by @fdintino in #53 . See table below for new versions (all versions are upgrades f
chore(ci): bump libavif to e10e6d9-2024-07-01; fix CI build issues by @fdintino in #53. See table below for new versions (all versions are upgrades from the 1.4.3 release).
| libavif | 1.0.3 (e10e6d9) |
| libaom | 3.9.1 |
| dav1d | 1.4.3 |
| SVT-AV1 | 2.1.1 |
| rav1e | 0.7.1 |
feat: Allow users to pass max_threads to the avif encoder via Image.save by @yit-b in #54, originally in #49
feat: Let users pass max_threads as an argument to _avif.AvifDecoder by @yit-b in #50
chore(ci): build SVT-AV1 for aarch64 or arm64 by @RaphaelVRossi in #38
fix: keep alpha channel for images with mode P and custom transparency by @fdintino in #56; fixes #48
fix: disable decoder strictness for clap and pixi properties by @fdintino in #57. fixes #13, fixes #28
fix(ci): lint secrets permission error and macOS GHA runner homebrew PATH bug by @fdintino in #55
Full Changelog: v1.4.3...v1.4.4
CI: bump libavif to e10e6d9 (2024-07-01); fix CI build issues in #53. See table below for new versions (all versions are upgrades from the 1.4.3 release).
libavif |
1.0.3 (e10e6d9) |
libaom |
3.9.1 |
dav1d |
1.4.3 |
SVT-AV1 |
2.1.1 |
rav1e |
0.7.1 |
Feature: Allow users to pass max_threads to the avif encoder via Image.save by `@yit-b`_ in #54, originally in #49.
Feature: Let users pass max_threads as an argument to _avif.AvifDecoder by `@yit-b`_ in #50.
CI: build SVT-AV1 for aarch64 or arm64 by @RaphaelVRossi in #38.
Fixed: keep alpha channel for images with mode P and custom transparency in #56; fixes #48.
Fixed: disable decoder strictness for clap and pixi properties in #57. fixes #13 and #28.
CI: lint secrets permission error and macOS GHA runner homebrew PATH bug in #55.
fix: pytest deprecation warning by @fdintino
| libavif | 1.0.3 |
| libaom | 3.8.1 |
| dav1d | 1.3.0 |
| SVT-AV1 | 1.7.0 |
| rav1e | 0.7.0 |
Full Changelog: https://github.com/fdintino/pillow-avif-plugin/compare/v1.4.2...v1.4.3
Fixed: Limit maxThreads to 64 for aom encodes by @yit-b (#41). Fixes #23.
Tests: fix pytest deprecation warning (#42).
CI: update libavif to v1.0.3 and update transitive dependencies (#43). See table below; changes from previous release in bold.
libavif |
1.0.3 |
libaom |
3.8.1 |
dav1d |
1.3.0 |
SVT-AV1 |
1.7.0 |
rav1e |
0.7.0 |
fix: Convert EXIF orientation to AVIF irot and imir in https://github.com/fdintino/pillow-avif-plugin/pull/40
irot and imir in https://github.com/fdintino/pillow-avif-plugin/pull/40Full Changelog: https://github.com/fdintino/pillow-avif-plugin/compare/v1.4.1...v1.4.2
fix: issue #32 cannot access local variable 'quality' ... in https://github.com/fdintino/pillow-avif-plugin/pull/33
Full Changelog: https://github.com/fdintino/pillow-avif-plugin/compare/v1.4.0...v1.4.1
Feature: Support new libavif quality encoder option. This replaces the (now deprecated) qmin and qmax options in libavif 1.x
| libavif | 1.0.1 |
| libaom | 3.7.0 |
| dav1d | 1.2.1 |
| SVT-AV1 | 1.7.0 |
| rav1e | 0.6.6 |
Full Changelog: https://github.com/fdintino/pillow-avif-plugin/compare/v1.3.1...f046fa2
Fixed: Distributed OS X wheels now include patch for libaom segmentation fault (see https://github.com/AOMediaCodec/libavif/issues/1190 and aom@165281
Fixed: Distributed OS X wheels now include patch for libaom segmentation fault (see AOMediaCodec/libavif#1190 and aom@165281). The bundled static libaom was patched for all other wheels, but because of a build issue it was missing from the 1.3.0 mac wheels.
CI: Python 3.6 wheels are no longer being packaged and distributed, ahead of support being dropped in the next major release.
Changed: Default quality changed to 75 (was previously 90)
quality changed to 75 (was previously 90)speed changed to 6 (was previously 8)True if tile_rows and tile_cols are unset, can be disabled with autotiling=False passed to save()).tile_cols encoder setting (the save() method was using the value passed to tile_rows instead)UnidentifiedImageError, not ValueError. Fixes #19.| libavif | 0.11.0 |
| libaom | 3.5.0 |
| dav1d | 1.0.0 |
| SVT-AV1 | 1.3.0 |
| rav1e | 0.5.1 |
Update libraries bundled with wheels:
CI: Build musllinux wheels
CI: Update bundled libraries (see table below, changes from previous release in bold)
libavif |
0.10.1 |
libaom |
3.3.0 |
dav1d |
1.0.0 |
SVT-AV1 |
0.9.1 |
rav1e |
0.5.1 |
Accept all AVIF compatible brands in the FileTypeBox. fixes #5
Fixed: Accept all AVIF compatible brands in the FileTypeBox. Fixes #5.
CI: Add Python 3.10 wheels
CI: Add OS X ARM64 wheels
CI: Update bundled libraries (see table below, changes from previous release in bold)
libavif |
0.9.2 |
libaom |
2.0.2 |
dav1d |
0.9.2 |
SVT-AV1 |
0.8.7 |
rav1e |
0.4.0 |
Added: tile_rows encoder setting
Added: tile_rows encoder setting
Added: alpha_premultiplied encoder setting
Added: advanced encoder setting to pass codec-specific key-value options
CI: Update bundled libraries (see table below, changes from previous release in bold)
libavif |
0.9.2 |
libaom |
2.0.2 |
dav1d |
0.9.0 |
SVT-AV1 |
0.8.7 |
rav1e |
0.4.0 |
Added: quality kwarg for save that maps to min and max quantizer values.
Added: quality kwarg for save that maps to min and max quantizer values.
Changed: yuv_format kwarg renamed subsampling.
CI: Update bundled libraries (see table below, changes from previous release in bold)
libavif |
0.9.0 |
libaom |
2.0.2 |
dav1d |
0.8.2 |
SVT-AV1 |
0.8.6 |
rav1e |
0.4.0 |
Fix: Allow saving of a single image from a sequence. Fixes #1_.
Fix: Allow saving of a single image from a sequence. Fixes #1.
Initial release
Initial release
Your coding agent can read these notes before it upgrades. Set up the MCP server →