Changelog

What shipped.

The release history of AIM Transparency, kept in plain words. Dates are a filing habit we’re still developing. Versions, however, are exact.

2.2.2Latest
  • The Pro add-on was finding fewer images than the free plugin could mark, which is the wrong way round. Its library scanner kept its own list of which formats can carry the mark, written before the free plugin learned WebP, GIF, TIFF, AVIF and HEIC. On a server without exiftool the scanner walked past those images as unwritable while the free plugin was marking them without difficulty.
  • The fix is not a longer list. It is one fewer list. Pro now asks the free plugin what it can write, so the answer lives with the code that provides it and the two cannot drift apart again. This is the fourth time a duplicated list has caused the same class of bug here, and the rule we have taken from it is to stop keeping the second one.
  • Pro 1.2.8 goes with it, and needs the free plugin at 2.2.2 or newer. Its JSON report also now carries what the free plugin's export gained: the guidance the report was prepared against, a hash of the contents, and whether the mark is actually reaching visitors.
2.2.1
  • We shipped 2.2.0 with a hole in it. On any server that already had exiftool installed, the plugin handed the writing over to it, and that handover happened before every safety check we had just spent the release building. So on those servers an iPhone photo containing more than one image got rewritten instead of left alone, a HEIC we cannot safely rewrite got modified instead of declined, and marking something twice left two contradictory records in one file. Our own writer now does the writing everywhere. Nothing needs repairing: mark a doubled image once more and it replaces both.
  • The reason we did not catch it is worth saying out loud. Our test container does not have exiftool and our web container does, so every test we had ever run took the safe path while the actual site took the other one. The same test file read 72 passes in one container and six failures in the other. We now run it in both.
  • The delivery check we announced last release was never actually started by anything. It existed, it worked, and nothing called it, so it sat there reporting that it had not run. It runs once a day now and says what it found on the Metadata screen.
  • And the screen meant to tell you what your server can do was telling servers without exiftool that four formats could not be marked, while marking them. That list had not been updated when we taught the plugin those formats. Those were exactly the servers the work was for.
2.2.0
  • Writing the mark into a WebP, a GIF, a TIFF or an AVIF used to need a command-line tool called exiftool sitting on your server. Plenty of shared hosts do not have it and will not install it. We were honest about that, which is not the same as it being fine: it meant a library full of WebP carried the visible badge and nothing inside the files. We have written our own PHP writer for every one of those formats, so it does not matter any more what your host has. HEIC too, which is what an iPhone hands you by default.
  • Something else was quietly undoing our work. A CDN or an image optimiser will re-compress a picture after we have written to it, and re-compression throws the mark away on the way to the reader. From the server everything looked correct, so we reported it as correct. That was wrong, and it was the kind of wrong we exist to argue against. The plugin now fetches one of your own images the way a visitor would, reads what actually arrives, and tells you when the answer is different. Where it recognises what did it, such as Cloudflare Polish, it says so.
  • The optimisers that strip the mark are also the ones that announce when they have finished. We listen for ShortPixel, Imagify, Smush and EWWW now and write the mark straight back, instead of leaving it missing until something happened to look.
  • Two ways an incomplete request to our own API could quietly wipe something you had set: badge wording for types the request did not mention, and your Article 4 record. Nothing that shipped could reach either, because our own screens always send the whole thing. That is luck, not design, and we have replaced the luck.
  • The tabs are in a different order. Readiness is a form you fill in by hand, and having it second made the manual paperwork look like the first thing anyone had to do. Media goes there now: the part that just works, first.
2.1.8
  • On some hosts the plugin could not mark an image at all, and took the page down with it. Since 2.1.5 we named each temporary file partly after the process writing it, which is what stops two uploads arriving at the same second from landing on each other. A host is allowed to switch that off, and some do, Kinsta among them. There we reached for something that was not there and the whole thing stopped. The name no longer depends on it. Nothing needs repairing afterwards, because on an affected site nothing was ever written in the first place. A user told us. That is the only reason we knew.
2.1.7
  • If you used the official EU icon and had also set a border width for the custom badge, the icon got the border too: a white rectangle drawn around a black pill. On a shop page that meant every badge wearing one. The EU artwork is fixed by the standard and is not ours to restyle, so it now renders untouched. If you use the custom badge, your border is exactly where you left it.
2.1.6
  • The custom badge draws a small dot before its words. You can turn it off now, in Badge Studio under Design, if you want something plainer. The AIM badge and the official EU icons never had one, so nothing moves there.
  • If you put your own logo in the badge, the dot goes away by itself. A logo is already a mark. Two of them side by side stop reading as a label and start reading as clutter.
  • The preview was lying to you. In the Media viewer and in Badge Studio it always drew the dot and never drew your logo, whatever you had actually set. A preview that shows something your visitors will not see is worse than no preview at all, so that is fixed.
Pro 1.2.7
  • Every Pro report format left out the AI-written text disclosures. JSON, Markdown, plain text and the print-ready one all skipped the Article 50(4) section, so a site that discloses AI-written text handed an auditor a record showing none of it. The free CSV had carried it all along. Three of the four printed a count of posts and then listed no posts, which is worse than saying nothing.
  • The JSON report now carries posts and a post count, and its schema moves to aim-transparency/report/3. If you read that file with a script, pin to the schema string rather than guessing from the shape.
  • Two smaller things in the written reports: a heading that sat a level too deep, and a note about long addresses that turned up sixteen lines after it was needed.
Pro 1.2.6
  • After updating, the add-on kept insisting an update was available. It was comparing against the version loaded when the request began, which PHP will not let you change halfway through.
  • A stale notice left behind by an older version now clears itself. It could not be fixed from inside the version that wrote it, because that version came first.
  • “Check again” on the Updates screen now actually checks again, instead of answering from a cache up to six hours old and looking broken.
2.1.5
  • Writing the AI mark into a picture used to wipe out other things already written in it. Only on servers without exiftool, and only in one metadata block — but that block is where a photographer’s name, copyright, credit line and licence terms live. We were quietly deleting the very thing the plugin exists to protect: the record attached to someone’s work. The mark is now merged into what is already there instead of replacing it.
  • Upload a big photo and WordPress keeps your untouched original next to the smaller copy it serves. We were only marking the copy. Anyone could reach the original by deleting -scaled from the address, which meant the biggest, most shareable version of the picture was the one with nothing in it. It gets the mark now.
  • Marking no longer loads the whole file into memory. A 40 MB photo now costs about what a small one costs. On cheaper hosting, marking a large picture used to just fail, without saying so.
  • Photos that contain more than one image inside them — iPhone gain maps, and the multi-picture files Samsung, Fujifilm and GoPro cameras make — are skipped and reported as skipped, rather than written into and quietly broken.
  • The Media screen opens a picture properly now. Click a thumbnail and you get the image at full size with everything we know about it beside it, instead of judging a photograph from a sixty-pixel square.
  • TIFF images stopped looking broken. No browser can draw a TIFF, so where a server cannot make JPEG copies our screen showed a torn-image icon and an empty panel — as if the file had been lost. It had not. The list names the format now, and the viewer says so plainly.
  • On a multilingual site, a translated post could disclose nothing at all while the original disclosed correctly. Translations now inherit the record from the post they came from, which is what images have done since 2.1.0.
Pro 1.2.5
  • This one also carries 1.2.1 through 1.2.4, which were built and never actually published to the update channel. Licensed sites go straight from 1.2.0 to 1.2.5. That gap was ours, and it is the sort of thing that only shows up when someone tries to update and nothing happens.
  • Updates are now accepted only from our own update service. The download address in a reply is checked against the service it came from before WordPress is allowed to install anything.
  • The add-on could not be translated at all. It declared a translations folder that was never created, so all eighteen of its phrases stayed in English no matter what language a site was set to.
  • Licence records stored on a site are signed now, so a record edited by hand or copied to another site does not validate there.
2.1.4
  • Cropping or rotating an image used to take the AI disclosure off it. WordPress has two image editors and they lose it in different ways. Edit a picture from a post and you get a new picture, which was never marked at all. Edit one from the Media screen and the files get rewritten without the mark, while the plugin carries on saying the mark is in there. The second one bothered us more: a tool that tells you a disclosure exists when it does not is worse than one that admits it lost it. Both now carry the disclosure through the edit, and the file status is honest afterwards.
  • We rewrote the plugin’s own description, in all 21 languages. It still described an image-only plugin, from before we could label written text or a chatbot, and it name-checked one particular theme for no good reason.
2.1.3
  • Ready for WordPress 7.1. 7.1 can hand image resizing to the browser instead of the server, and when it does, WordPress stops announcing an image as finished once. It announces it twice, when the upload lands and again once the resized copies have each been sent up. We tested against the release candidate before it shipped: the mark reaches the original and every resized copy, and nothing needed changing for that to hold.
  • We checked Pro on the same afternoon. Automatic flagging listens on exactly the same signal, so a file that arrives already carrying its own provenance is still recognised when the browser does the resizing, and the second announcement does not get the picture flagged twice.
  • The AI image source panel stopped appearing where there is no image to describe. It was showing on Pages and on any other post type that cannot have a featured image. There is a filter now, aicl_featured_post_types, for anyone who wants to decide that themselves.
  • The admin menu icon kept losing the cut between its two plates whenever WordPress recoloured it for the current admin scheme, which left one solid blob. It holds its shape in every scheme now.
  • The options in the AI text disclosure panel no longer sit flush against each other.
2.1.2
  • The dashboard reads shorter. Every screen was cut from 10,700 words to 7,500, and nothing is left over 31 words. Where a description only repeated the label next to it, we deleted it. Where it explained a standard rather than a setting, it moved to the documentation, which is what the documentation is for.
  • The media list stopped moving under your cursor. Recording a source type used to add a line to the row you had just changed, which grew it and pushed everything below it down. The confirmation now floats above the page and clears itself.
  • On a multisite network, uninstalling could leave WordPress pointing at the wrong site for the rest of that request. Each site is cleaned now without disturbing which one WordPress thinks it is on.
  • The wording you set for the click-to-disclose box is filtered again as the page is built, not only when you save it. A value that arrived by some other route can no longer put raw markup on your pages.
2.1.1
  • The featured-image control was English in every language. Ten strings were hardcoded and the script had no translation handle at all, so wrapping them would have changed nothing on its own. They read from the same catalogues as everything else now.
  • That panel is called AI image source, so it stops being confused with the AI content disclosure panel sitting next to it in the editor.
2.1.0
  • New: it discloses AI-written text now, not just AI images. The law asks for this only where the text is published to inform the public on matters of public interest — news, journalism, public affairs, health or safety. A shop or a personal blog is not that, so the plugin asks you once and then leaves you alone about it.
  • New: if it does apply to you, each post gets a control in the editor — block or classic — for whether the text was written by AI, rewritten by AI, or neither. A short line then appears for readers.
  • New: the exemption is worked out rather than taken on trust. Text that a person reviewed, with somebody named as holding editorial responsibility, does not need a disclosure. Both halves are required, so ticking the review box and naming nobody still discloses, and the dashboard says which half is missing.
  • New: a disclosed post carries schema.org data describing the article, next to the data already written for pictures. There is a shortcode, [aicl_text_disclosure], if you would rather place the line yourself.
  • Note: text and images are judged separately, because the law judges them separately. Reviewing an article does not exempt an AI-generated image inside it, and the badge stays put.
2.0.3
  • Security: the rules that decide whether you have Pro no longer live in the free plugin. The free plugin is published source, so those rules were published with it, and the way around them was too. They sit in the Pro add-on now, and the record it keeps is signed and tied to the site it was activated on. Nothing changes if you run the free plugin.
2.0.2
  • Fix: Algorithmic can be set in bulk now. Six of the seven source types were in the Media Library bulk menu. Algorithmic, the one for procedural work like fractal or formula art, was not, so you had to set it an image at a time. Translated in all 21 languages like the rest.
2.0.1
  • Improvement: the Media screen leads with your library now. The eight explanations of what each answer means used to sit above it, so the work started below the fold. They moved under the list, they fold away, and whether you leave them open or shut is remembered.
  • New: filter your library by With AI or Without AI. Before, you could only ask for everything you had recorded, which is not the question anyone actually has.
  • Improvement: the screen you were on survives a reload. Refreshing used to drop you back at the start. You can also link someone straight to a screen now.
  • Fix: AVIF and TIFF images were missing from the Metadata screen entirely. The plugin has always written them wherever the server has exiftool; the screen simply did not know those formats existed. Now they appear, and on a server that cannot write them they say so instead of showing a zero with no explanation.
  • Fix: AI (basic) wore the same icon as AI Generated, so in a list you could not tell them apart without reading the label.
  • Improvement: the picture beside a disclosure is called a symbol everywhere now. We had been calling it a glyph, while also calling the thing written inside your image files a mark, which put two different things under one idea on the same screen.
2.0.0
  • New: the plugin now speaks 22 languages, every official EU language WordPress supports. Not only the settings screens. The badge on the image, the disclosure box, the chatbot notice and the whole dashboard. Each language takes its legal wording from that country’s own text of the AI Act rather than a translation of ours. A disclosure that a visitor cannot read is not a disclosure.
  • New: the dashboard now looks like WordPress. A compliance tool should read as part of your admin rather than as a guest that brought its own furniture, so the default is a new WordPress-native layout built from the same container, heading and tab strip every core settings screen uses. The Neo and Classic themes are still there, and if you have already picked one, updating does not change it under you.
  • New: the Overview screen fixes things instead of only reporting them. Every finding now carries the action that resolves it, so a missing mark, an undisclosed chat widget or an unrecorded Article 4 statement is one click from done instead of a trip to another tab. Every change it makes is dated in a list underneath, with an undo next to each line.
  • Fix: the plugin used to treat every chat tool it found as an AI. Tawk.to, Olark, Intercom and Crisp are live chat answered by people, and following our advice would have told your visitors they were talking to an AI while a colleague was typing. Every chat tool is now filed by who actually replies, and the plugin says one of three things: this one replies with AI, this one can be either depending on how you set it up, or this one is answered by your team and the rule does not apply.
  • Improvement: detection reads your shop and product pages too, and keeps only the part of each page it needs, so it looks at more and stores less.
  • New: multilingual sites work the way you would expect. Tested with Polylang, a label you set on an image carries to its translated copies, so the badge stops vanishing on a translated page. WPML is built for but not tested yet, and we would rather say that than pretend.
  • New: in any language other than English, the dashboard tells you the translation was made with AI help and not read by a native speaker, and asks you to report anything that reads wrong. A disclosure tool that is not honest about its own limits is the wrong tool.
1.3.1
  • Fix: “We could not check your pages” was appearing on sites that were perfectly fine. A server cannot always reach itself at its own public address, which is normal on local installs and behind a proxy. The scan now asks the server directly instead, and only reports a failure when there really is one.
1.3.0
  • New: German, French and Spanish, covering everything a visitor sees.
  • New: detection finds chat widgets that were never installed as plugins, by recognising what the widget leaves behind in the browser. Pasted into a theme, added through a tag manager, served from your own CDN: found either way.
  • Improvement: the dashboard admits when it could not check. If your pages cannot be read you get a plain explanation instead of a confident “all clear”. Not looking is not the same as finding nothing, and the plugin no longer pretends otherwise.
  • Security: the compliance export no longer lets a filename behave like a spreadsheet formula.
1.2.9
  • Fix: on a WooCommerce variable product, switching variation swapped the picture but left the last image’s label behind. A photograph could end up wearing an “AI Generated” badge. The label now follows the image.
  • Fix: the dashboard under-counted large libraries, so a big site saw fewer flagged images than it had. If your numbers went up after this one, the new ones are the true ones.
1.2.8
  • Fix: the official EU mark on a disclosure notice was rendering squashed. The Commission’s set has one square mark and two wider lockups that already spell out their own label; a notice now uses the square one, undistorted, because the sentence next to it is already saying the same thing.
1.2.7
  • New: a Shortcodes panel in the dashboard, under Disclosure. Pick the type, the style, your own wording, colours and mark, watch it render, and copy the finished shortcode. The shortcodes were in the plugin already; now you can find them.
  • New: [aicl_disclosure] takes bg and color, so a notice can match your theme instead of always being the default near‑black pill. If the pair falls below the readability minimum the plugin ignores it and renders the default, because a label nobody can read isn’t a label.
  • New: mark picks the glyph, the built‑in one, the official European Commission AI‑content icon for that source type, or none at all. A logo attribute puts your own image beside the mark, never instead of it.
  • Each source type now has its own icon in the dashboard lists, a camera for photographs, a pen for human work, rather than one cog standing in for everything that isn’t AI.
  • Fix: the toggle control centres its knob properly on both themes.
1.2.6
  • The dashboard has been redesigned. Every screen is one sheet divided by hairlines rather than a grid of separate cards, so the Overview reads top to bottom: your readiness score, the figures behind it, what’s running on your site, then your library.
  • Detection now recognises 671 AI systems, and separates chatbots and assistants from image and content generators, so you can see which duty applies to what.
  • New: reusable disclosure shortcodes for labelling AI in written content, not just images.
  • Detection also reads your own front page, so AI widgets that load in the browser get found, not just plugins on disk. It stays on your server.
  • Clearer wording throughout, and a refreshed getting-started screen in both themes.
1.2.5
  • The getting-started screen has fresh artwork matched to your Neo or Classic dashboard theme, in a cleaner layout.
  • The “AI on your site” card is more reliable: re-scanning clears resolved warnings right away, it respects images you’ve marked as human-made instead of re-flagging them, and it lists AI-capable plugins by their real names.
  • Clearer, more natural wording across the dashboard and the getting-started screen.
  • Fix: your chosen theme (Neo or Classic) now stays consistent everywhere, including the getting-started screen.
1.2.4
  • New: an “AI on your site” dashboard card that surfaces AI you haven’t disclosed yet: unflagged images whose files read as AI-generated (by a declared source type or a known generator name), and active plugins that can make AI images. All computed locally, no external calls.
1.2.3
  • A friendly one‑screen welcome after activation walks you to your first labelled image: pick one, choose how it was made, watch it get disclosed. Reopen it any time from Transparency › Getting started.
  • Minor internal hardening and housekeeping.
1.2.2
  • The Pro library scan now runs to completion from one click (batched, with a live progress bar and a cancel button), and the result reports what discovery adopted, not just what the strip-guard fixed.
  • The disclosure modal footer, its close button and the badge screen-reader fallback join the translatable strings.
Pro 1.2.0
  • Discovery scan: the library scanner now reads the unflagged library too: images whose files already declare a DigitalSourceType (PIM-stamped masters, C2PA-signed camera files, AI-tool output) are flagged automatically, so a library that existed before the plugin heals retroactively. One click, or daily on schedule.
  • Strip-guard covers AVIF on hosts with exiftool; auto-flagging validates tokens against the running free plugin before writing.
1.2.1
  • Human-provenance source types: flag images as Camera Photo (digitalCapture), Human Created (digitalCreation: 3D renders and digital art made without generative AI) or Composite (composite: a non-AI mix such as photos + renders). Each embeds the current IPTC Digital Source Type into the file and the page JSON-LD, with no badge by default. Honest provenance for human-made work, not just AI labels.
  • Embedding is now idempotent: files already carrying the exact Digital Source Type value (C2PA-signed camera captures, PIM-stamped masters) are left byte-for-byte untouched.
  • Pro auto-flagging now adopts the human-provenance types too, so files stamped upstream arrive labelled.
  • Fixed: badge-hidden types now correctly emit their machine-readable JSON-LD, as the settings always described.
  • All source-type names and the visitor-facing disclosure texts are now translatable.
1.2.0
  • A fresh default dashboard style (“Neo”), with a one-click toggle back to the original monochrome look, in Settings > Appearance or the palette button in the top bar. Both styles support light and dark mode.
  • Fonts are bundled locally (Inter + Bricolage Grotesque, SIL OFL), with no external font loading.
  • The badge live preview now demonstrates the badge on bundled sample images (our own AI-generated artwork, labelled as such) with a small slider to switch scenes. Docs and Support links added to the dashboard sidebar.
1.1.0
  • AI-assistant (chatbot) disclosure for EU AI Act Article 50(1): tell visitors when they are interacting with an AI rather than a human. Drop the [aicl_ai_notice] shortcode into any page with a chat UI, or enable the optional floating notice that appears when a known chat widget is detected. Configurable disclosure text and position.
Read the release note
1.0.0
  • Initial release: media flag with bulk actions, a visible badge across Enfold, standard and block themes, optional universal badge coverage, IPTC/XMP embedding (exiftool + pure-PHP JPEG/PNG), schema.org JSON-LD, a free CSV compliance export, the React dashboard, and the opt-in transparency directory.

Get the current version.

The free plugin is complete. Nothing in it is locked. Download it, flag your AI images, and the badge, metadata and markup switch on together.

Get the plugin