AVIF labeling: the last missing piece is fixed
← All posts

AVIF labeling: the last missing piece is fixed

We had a blind spot of our own: AI labeling reliably survived conversion to WebP — but got lost with AVIF. The fix is live now, for Free and PRO.

We recently explained why AI labeling and image optimization belong together — because otherwise the label can quietly disappear the next time an image gets re-encoded. During an internal test, we found out: we had exactly that problem ourselves, in a spot we’d overlooked.

What was missing

Img Performer writes the EU AI Act Art. 50 label directly into the image file — as an XMP metadata marker that carries over to every generated image size. For WebP, that worked reliably. For AVIF (PRO), it didn’t: the marker landed in the original, but not in the AVIF file that actually gets served to visitors. The label was invisible to the public, with no error surfacing anywhere.

The reason was purely technical: AVIF is a completely different container format than JPEG, PNG, or WebP (it’s built on the same underlying format as modern video codecs), and we simply didn’t have a write path for it yet.

The fix

We built a dedicated writer for AVIF files that inserts the marker correctly into the container structure — including all the necessary internal adjustments so the file stays a valid, error-free decodable image afterward. On top of that, a one-time background pass now runs for existing images that were already marked as AI-generated, correcting their AVIF version retroactively — no action needed on your end.

And since a label shouldn’t just be written once but also recognized again if an already-labeled image gets re-uploaded, we fixed that in the same pass: Img Performer now recognizes its own marker on re-upload — in JPEG, PNG, WebP, and AVIF.

Bottom line

The fix has been live since today, Free 0.3.4 and PRO 0.3.4. If you’re on PRO with AVIF conversion enabled, there’s nothing to do — existing AI-labeled images get corrected automatically.

This incident is exactly the principle we described in our last post: even when conversion and labeling run in the same plugin, it’s worth testing each individual output format concretely, rather than assuming “that should just work.”