Article 50 of the EU AI Act requires visible disclosure when an image is AI-generated or AI-edited. A CSS overlay does not survive a right-click download, a hotlink, an RSS feed or a theme change — so this plugin composites a badge PNG into the image file itself, overwriting the file at its existing path so no URL, link or post content ever changes.
Labelling is always a deliberate, manual action: you select the images, choose the label type and badge corner, and confirm. Nothing is ever labelled automatically, in bulk, or behind your back.
How it works
Two kinds of label — image or text
Every label type can either composite a badge PNG, or render its own text label on the server: wording, text and background colour, opacity, corner radius and border, with separate colours for light and dark backgrounds. Text labels need no design work and no image file at all, so you can start disclosing immediately and swap in a designed badge later. They are rendered at high resolution and scaled down onto the image, so they stay crisp, and they get their own scale setting because a wide text strip needs more width than a square seal to stay readable.
Ready-made badges included
The plugin ships with two label types, AI-generated and AI-modified, each with a ready-made badge in a light and a dark version, so you can label images straight after activation. Upload your own PNG for either variant at any time to replace the default.
Re-labelling never stacks badges
Changing a label — different type, different corner, edited text, new badge file — always restores the original from the backup first and applies the new label to those original bytes. The plugin will not composite onto a file it knows is already labelled: if the backup is missing it refuses and says so rather than baking a second badge into the image.
Reversible by design
Restore original copies the untouched backup back over the live file, rebuilds the image sizes and removes the alt-text suffix. Backups are never deleted automatically — not on restore, not on deactivation, not even on uninstall. Only the explicit Delete unused backups tool removes them, and it refuses to touch a backup whose image is still labelled.
Features
<picture> element. Off by default; the primary file always keeps its own format and MIME type.ai_label_manage), granted to administrators, so an agency can hand labelling to an editor without full admin rights.wp ai-label apply|restore|reapply|status|run-queue.This plugin does not contact any external service by default.
If — and only if — you enter a Cloudflare zone ID and API token on the settings screen, the plugin calls the Cloudflare cache-purge API (https://api.cloudflare.com/client/v4/zones/{zone}/purge_cache) after an image is labelled or restored, so the CDN stops serving the previous version of that file. The only data sent is the public URLs of the image files that changed, together with your API token for authentication. No personal data and no image content is transmitted. The token is stored encrypted and is never displayed again.
Cloudflare terms of service: https://www.cloudflare.com/terms/
Cloudflare privacy policy: https://www.cloudflare.com/privacypolicy/
Remove the token from the settings screen (type delete into the field) to stop all outgoing requests.