import pillow_avif
import PIL
import io
# just some encoded avif
image = b'\x00\x00\x00 ftypavif\x00\x00\x00\x00avifmif1miafMA1B\x00\x00\x01\x8dmeta\x00\x00\x00\x00\x00\x00\x00(hdlr\x00\x00\x00\x00\x00\x00\x00\x00pict\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00libavif\x00\x00\x00\x00\x0epitm\x00\x00\x00\x00\x00\x01\x00\x00\x00,iloc\x00\x00\x00\x00D\x00\x00\x02\x00\x01\x00\x00\x00\x01\x00\x00\x01\xc9\x00\x00\x00\x16\x00\x02\x00\x00\x00\x01\x00\x00\x01\xb5\x00\x00\x00\x14\x00\x00\x00Biinf\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1ainfe\x02\x00\x00\x00\x00\x01\x00\x00av01Color\x00\x00\x00\x00\x1ainfe\x02\x00\x00\x00\x00\x02\x00\x00av01Alpha\x00\x00\x00\x00\x1airef\x00\x00\x00\x00\x00\x00\x00\x0eauxl\x00\x02\x00\x01\x00\x01\x00\x00\x00\xc3iprp\x00\x00\x00\x9dipco\x00\x00\x00\x14ispe\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x05\x00\x00\x00\x10pixi\x00\x00\x00\x00\x03\x08\x08\x08\x00\x00\x00\x0cav1C\x81\x00\x0c\x00\x00\x00\x00\x13colrnclx\x00\x02\x00\x02\x00\x06\x80\x00\x00\x00\x0epixi\x00\x00\x00\x00\x01\x08\x00\x00\x00\x0cav1C\x81\x00\x1c\x00\x00\x00\x008auxC\x00\x00\x00\x00urn:mpeg:mpegB:cicp:systems:auxiliary:alpha\x00\x00\x00\x00\x1eipma\x00\x00\x00\x00\x00\x00\x00\x02\x00\x01\x04\x01\x02\x83\x04\x00\x02\x04\x01\x05\x86\x07\x00\x00\x002mdat\x12\x00\n\x05\x18\x08\xa4\xe5P2\t\x1f\xf0\x00\x01\x00\x14d\xd4\x90\x12\x00\n\x08\x18\x08\xa4\xe4\x81\x01\x03B2\x08\x1f\xf0\x00\x00@\x00\x11j'
im = PIL.Image.open(io.BytesIO(image))
im.save("test.avif", format="avif", qmin=10, qmax=50)
# error: ... (cannot access local variable 'quality' where it is not associated with a value)
Minimal example:
I think the issue is that
quality
is only set inside of theif
here: https://github.com/fdintino/pillow-avif-plugin/blob/f046fa299c48ac1559ae3965641e6d0620967b9f/src/pillow_avif/AvifImagePlugin.py#L132-L145