{"id":338956,"date":"2026-07-14T15:49:17","date_gmt":"2026-07-14T15:49:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/aim-transparency\/"},"modified":"2026-08-28T08:32:41","modified_gmt":"2026-08-28T08:32:41","slug":"aim-transparency","status":"publish","type":"plugin","link":"https:\/\/sk.wordpress.org\/plugins\/aim-transparency\/","author":23530858,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.2.2","stable_tag":"2.2.2","tested":"7.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"AIM Transparency","header_author":"itisnothuman","header_description":"Label AI-generated images for EU AI Act Article 50 \u2014 a visible badge (the official EU AI-content icons) across any theme (Enfold, block\/FSE, page builders), machine-readable IPTC\/XMP DigitalSourceType embedded in the file, and JSON-LD on the page. Part of the AIM (AI Modules) suite.","assets_banners_color":"6f8f86","last_updated":"2026-08-28 08:32:41","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/aimtransparency.com\/","header_author_uri":"https:\/\/itisnothuman.com","rating":0,"author_block_rating":0,"active_installs":40,"downloads":1440,"num_ratings":0,"support_threads":1,"support_threads_resolved":1,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.0":{"tag":"1.2.0","author":"itsnothuman","date":"2026-07-14 15:48:41","revision":3607751},"1.2.1":{"tag":"1.2.1","author":"itsnothuman","date":"2026-07-17 06:30:00","revision":3611053},"1.2.2":{"tag":"1.2.2","author":"itsnothuman","date":"2026-07-17 13:18:58","revision":3611534},"1.2.3":{"tag":"1.2.3","author":"itsnothuman","date":"2026-07-22 01:39:17","revision":3617823},"1.2.4":{"tag":"1.2.4","author":"itsnothuman","date":"2026-07-22 05:05:55","revision":3617964},"1.2.5":{"tag":"1.2.5","author":"itsnothuman","date":"2026-07-24 06:37:13","revision":3620859},"1.2.6":{"tag":"1.2.6","author":"itsnothuman","date":"2026-07-30 01:19:51","revision":3627799},"1.2.7":{"tag":"1.2.7","author":"itsnothuman","date":"2026-07-30 08:11:01","revision":3628152},"1.2.8":{"tag":"1.2.8","author":"itsnothuman","date":"2026-07-30 09:59:44","revision":3628346},"1.2.9":{"tag":"1.2.9","author":"itsnothuman","date":"2026-08-03 02:20:06","revision":3632245},"1.3.0":{"tag":"1.3.0","author":"itsnothuman","date":"2026-08-04 14:29:52","revision":3634280},"1.3.1":{"tag":"1.3.1","author":"itsnothuman","date":"2026-08-04 14:37:53","revision":3634298},"2.0.0":{"tag":"2.0.0","author":"itsnothuman","date":"2026-08-07 13:04:20","revision":3637881},"2.0.1":{"tag":"2.0.1","author":"itsnothuman","date":"2026-08-07 14:18:39","revision":3637959},"2.0.2":{"tag":"2.0.2","author":"itsnothuman","date":"2026-08-08 01:34:12","revision":3638383},"2.0.3":{"tag":"2.0.3","author":"itsnothuman","date":"2026-08-10 13:30:15","revision":3640639},"2.1.0":{"tag":"2.1.0","author":"itsnothuman","date":"2026-08-11 07:40:29","revision":3641491},"2.1.1":{"tag":"2.1.1","author":"itsnothuman","date":"2026-08-11 15:10:12","revision":3642187},"2.1.2":{"tag":"2.1.2","author":"itsnothuman","date":"2026-08-12 06:40:15","revision":3642930},"2.1.3":{"tag":"2.1.3","author":"itsnothuman","date":"2026-08-14 11:01:23","revision":3647176},"2.1.4":{"tag":"2.1.4","author":"itsnothuman","date":"2026-08-14 13:27:00","revision":3647436},"2.1.5":{"tag":"2.1.5","author":"itsnothuman","date":"2026-08-18 05:18:58","revision":3652038},"2.1.6":{"tag":"2.1.6","author":"itsnothuman","date":"2026-08-20 06:41:41","revision":3656014},"2.1.7":{"tag":"2.1.7","author":"itsnothuman","date":"2026-08-20 08:52:58","revision":3656283},"2.1.8":{"tag":"2.1.8","author":"itsnothuman","date":"2026-08-21 15:22:34","revision":3659279},"2.2.0":{"tag":"2.2.0","author":"itsnothuman","date":"2026-08-27 04:38:59","revision":3668051},"2.2.1":{"tag":"2.2.1","author":"itsnothuman","date":"2026-08-28 05:48:03","revision":3669852},"2.2.2":{"tag":"2.2.2","author":"itsnothuman","date":"2026-08-28 08:32:41","revision":3670037}},"upgrade_notice":{"2.2.2":"<p>Only matters if you run the Pro add-on. Its library scanner kept its own list of markable formats and was skipping WebP, GIF, TIFF, AVIF and HEIC on servers where this plugin marks them. Pro now asks this plugin instead. Update Pro to 1.2.8 as well.<\/p>","2.2.1":"<p>Important if your host has exiftool: the safeguards added in 2.2.0 were being skipped there, so iPhone photos containing more than one image could be rewritten and marking twice left two records. The built-in writer now handles every server. The delivery check also runs for the first time.<\/p>","2.2.0":"<p>Every image format is now marked without exiftool, so WebP, GIF, TIFF, AVIF and HEIC work on a plain shared host. Images re-compressed by an optimiser plugin are marked again automatically. Also fixes two ways an incomplete API request could reset saved settings or your Article 4 record.<\/p>","2.1.8":"<p>On some managed hosts, including Kinsta, marking an image failed with a fatal error, because the plugin used a PHP function those hosts do not provide. Nothing could be disclosed there at all since 2.1.5. Marking works on those hosts again, and nothing you have already disclosed is affected.<\/p>","2.1.7":"<p>The official EU icon could be drawn with a border around it, because a border set for the custom badge was applied to the EU icon too. That artwork is fixed by the standard and now renders untouched. Your custom badge&#039;s border is unchanged.<\/p>","2.1.6":"<p>The custom badge&#039;s small dot can now be turned off, and setting your own logo hides it. The badge preview in the Media viewer and Badge Studio was showing a badge you had not asked for; it now matches your site. Nothing you have disclosed is affected.<\/p>","2.1.5":"<p>Recommended. Without exiftool, writing the AI mark replaced any existing XMP, losing the creator, copyright, credit and licence terms held in the file. It is now merged into what is already there. Also marks the full-size original and skips multi-picture photos instead of damaging them.<\/p>","2.1.2":"<p>The dashboard reads shorter: every screen trimmed from 10,700 words to 7,500, with explanations of standards moved to the docs. Also fixes a multisite uninstall bug and re-filters the click-to-disclose wording as the page is built. Nothing you have disclosed is affected.<\/p>","2.0.3":"<p>Hardens how the Pro add-on is licensed. No change to the free plugin&#039;s features.<\/p>","2.0.2":"<p>Adds the missing Algorithmic entry to the Media Library bulk menu, so all seven source types can be set on a selection at once.<\/p>","2.0.1":"<p>The Media screen now leads with your library, you can filter by With AI or Without AI, a reload keeps the screen you were on, and AVIF and TIFF finally show up on the Metadata screen.<\/p>","2.0.0":"<p>22 EU languages, a dashboard rebuilt to look like WordPress itself, an Overview that fixes findings in place with an Undo behind every change, and a fix so live chat answered by people is no longer labelled as AI.<\/p>","1.3.1":"<p>Fixes a false &quot;We could not check your pages&quot; warning on local installs, proxied origins and sites whose server cannot reach its own public address.<\/p>","1.3.0":"<p>German, French and Spanish translations, detection of chat widgets installed outside WordPress, and a dashboard that says when it could not check rather than claiming you are clear.<\/p>","1.2.9":"<p>Fixes a wrong badge on WooCommerce variation images, and corrects under-reported dashboard figures on large libraries.<\/p>","1.2.8":"<p>Fixes the EU mark rendering squashed on a disclosure notice.<\/p>","1.2.7":"<p>A Shortcodes panel in the dashboard, plus colour and mark options for [aicl_disclosure] with a contrast floor so a disclosure stays readable.<\/p>","1.2.6":"<p>A redesigned dashboard, Detection across 671 AI systems with chatbots told apart from image generators, and new [aicl_disclosure] shortcodes for labelling AI content anywhere on your site.<\/p>","1.2.5":"<p>Refreshed getting-started screen, a more reliable Detection card, and clearer wording throughout.<\/p>","1.2.4":"<p>Adds a dashboard Detection card that finds AI images and AI-capable plugins you have not disclosed yet, computed locally with no external calls.<\/p>","1.2.3":"<p>Adds a friendly first-run welcome that gets you to your first labelled image in about a minute.<\/p>","1.2.2":"<p>The Pro library scan now completes a whole library from one click, with a live progress bar, and reports what it discovered, not just what it guarded.<\/p>","1.2.1":"<p>Adds human-provenance source types (Camera Photo, Human Created, Composite) so you can honestly label non-AI work too, and fixes JSON-LD output for badge-hidden types.<\/p>","1.2.0":"<p>A new default dashboard style, with a toggle back to the classic look in Settings &gt; Appearance.<\/p>","1.1.0":"<p>Adds an AI-assistant (chatbot) disclosure for EU AI Act Article 50(1): the [aicl_ai_notice] shortcode and an optional floating notice telling visitors when they are talking to an AI, not a human.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3644552,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3644552,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3644552,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3644735,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3644735,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.0","1.2.1","1.2.2","1.2.3","1.2.4","1.2.5","1.2.6","1.2.7","1.2.8","1.2.9","1.3.0","1.3.1","2.0.0","2.0.1","2.0.2","2.0.3","2.1.0","2.1.1","2.1.2","2.1.3","2.1.4","2.1.5","2.1.6","2.1.7","2.1.8","2.2.0","2.2.1","2.2.2"],"block_files":[],"assets_screenshots":{"screenshot-1.jpeg":{"filename":"screenshot-1.jpeg","revision":3637693,"resolution":"1","location":"assets","locale":"","width":2880,"height":2000},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3669798,"resolution":"10","location":"assets","locale":"","width":2880,"height":2000},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3669798,"resolution":"11","location":"assets","locale":"","width":2880,"height":2000},"screenshot-12.png":{"filename":"screenshot-12.png","revision":3669798,"resolution":"12","location":"assets","locale":"","width":2880,"height":2000},"screenshot-13.png":{"filename":"screenshot-13.png","revision":3669798,"resolution":"13","location":"assets","locale":"","width":2880,"height":2000},"screenshot-2.gif":{"filename":"screenshot-2.gif","revision":3641491,"resolution":"2","location":"assets","locale":"","width":2880,"height":2000},"screenshot-3.jpeg":{"filename":"screenshot-3.jpeg","revision":3637693,"resolution":"3","location":"assets","locale":"","width":2880,"height":2000},"screenshot-4.jpg":{"filename":"screenshot-4.jpg","revision":3669921,"resolution":"4","location":"assets","locale":"","width":2880,"height":2000},"screenshot-5.jpg":{"filename":"screenshot-5.jpg","revision":3669921,"resolution":"5","location":"assets","locale":"","width":2880,"height":2000},"screenshot-6.jpg":{"filename":"screenshot-6.jpg","revision":3669921,"resolution":"6","location":"assets","locale":"","width":2880,"height":2000},"screenshot-7.jpg":{"filename":"screenshot-7.jpg","revision":3669798,"resolution":"7","location":"assets","locale":"","width":2880,"height":2000},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3669798,"resolution":"8","location":"assets","locale":"","width":2880,"height":2000},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3669798,"resolution":"9","location":"assets","locale":"","width":2880,"height":2000}},"screenshots":{"1":"A real photograph and its AI counterpart, side by side. Only the AI one carries a badge.","2":"Both disclosures in one post: the badge on the AI image, and the line that says the text was written by AI.","3":"Your shop, covered: badges on the WooCommerce product grid, in the free plugin.","4":"Overview: a readiness score, then findings sorted into what needs attention, what is already working and what is optional. Every finding carries the action that resolves it, and every change is dated with an Undo.","5":"The same screen in the Neo theme.","6":"And in the Classic theme. Your choice is remembered and never changed by an update.","7":"Media: every image in your library with its source type, searchable and set one row at a time.","8":"Badge: position, label style, the official EU icons or your own, with a live preview.","9":"Metadata: every format the mark is written into on your server, how many files carry it, and whether it is still there when a visitor loads the image.","10":"Shortcodes: build a disclosure for written content, with a live preview and a contrast check.","11":"Readiness: the Article 4 AI-literacy checklist, nine steps you record and annotate, with how far through it you are.","12":"Posts: disclose AI-written text under Article 50(4). One question decides whether the duty reaches your site at all, then the wording, placement and look of the line your readers see.","13":"The Media viewer: one image at full size with its source type, the three places its disclosure lives, and the file's own facts."}},"plugin_section":[],"plugin_tags":[262178,262179,254921,254919,254918],"plugin_category":[45],"plugin_contributors":[271523],"plugin_business_model":[],"class_list":["post-338956","plugin","type-plugin","status-publish","hentry","plugin_tags-ai-compliance","plugin_tags-ai-disclosure","plugin_tags-ai-transparency","plugin_tags-article-50","plugin_tags-eu-ai-act","plugin_category-ecommerce","plugin_contributors-itsnothuman","plugin_committers-itsnothuman","plugin_support_reps-avamooredev"],"banners":{"banner":"https:\/\/ps.w.org\/aim-transparency\/assets\/banner-772x250.png?rev=3644735","banner_2x":"https:\/\/ps.w.org\/aim-transparency\/assets\/banner-1544x500.png?rev=3644735","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/aim-transparency\/assets\/icon.svg?rev=3644552","icon":"https:\/\/ps.w.org\/aim-transparency\/assets\/icon.svg?rev=3644552","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/aim-transparency\/assets\/screenshot-1.jpeg?rev=3637693","caption":"A real photograph and its AI counterpart, side by side. Only the AI one carries a badge."},{"src":"https:\/\/ps.w.org\/aim-transparency\/assets\/screenshot-2.gif?rev=3641491","caption":"Both disclosures in one post: the badge on the AI image, and the line that says the text was written by AI."},{"src":"https:\/\/ps.w.org\/aim-transparency\/assets\/screenshot-3.jpeg?rev=3637693","caption":"Your shop, covered: badges on the WooCommerce product grid, in the free plugin."},{"src":"https:\/\/ps.w.org\/aim-transparency\/assets\/screenshot-4.jpg?rev=3669921","caption":"Overview: a readiness score, then findings sorted into what needs attention, what is already working and what is optional. Every finding carries the action that resolves it, and every change is dated with an Undo."},{"src":"https:\/\/ps.w.org\/aim-transparency\/assets\/screenshot-5.jpg?rev=3669921","caption":"The same screen in the Neo theme."},{"src":"https:\/\/ps.w.org\/aim-transparency\/assets\/screenshot-6.jpg?rev=3669921","caption":"And in the Classic theme. Your choice is remembered and never changed by an update."},{"src":"https:\/\/ps.w.org\/aim-transparency\/assets\/screenshot-7.jpg?rev=3669798","caption":"Media: every image in your library with its source type, searchable and set one row at a time."},{"src":"https:\/\/ps.w.org\/aim-transparency\/assets\/screenshot-8.png?rev=3669798","caption":"Badge: position, label style, the official EU icons or your own, with a live preview."},{"src":"https:\/\/ps.w.org\/aim-transparency\/assets\/screenshot-9.png?rev=3669798","caption":"Metadata: every format the mark is written into on your server, how many files carry it, and whether it is still there when a visitor loads the image."},{"src":"https:\/\/ps.w.org\/aim-transparency\/assets\/screenshot-10.png?rev=3669798","caption":"Shortcodes: build a disclosure for written content, with a live preview and a contrast check."},{"src":"https:\/\/ps.w.org\/aim-transparency\/assets\/screenshot-11.png?rev=3669798","caption":"Readiness: the Article 4 AI-literacy checklist, nine steps you record and annotate, with how far through it you are."},{"src":"https:\/\/ps.w.org\/aim-transparency\/assets\/screenshot-12.png?rev=3669798","caption":"Posts: disclose AI-written text under Article 50(4). One question decides whether the duty reaches your site at all, then the wording, placement and look of the line your readers see."},{"src":"https:\/\/ps.w.org\/aim-transparency\/assets\/screenshot-13.png?rev=3669798","caption":"The Media viewer: one image at full size with its source type, the three places its disclosure lives, and the file's own facts."}],"raw_content":"<!--section=description-->\n<p>AIM Transparency labels the AI on your WordPress site so visitors can see it: images made by a machine, a chatbot that answers them, and written content produced with AI.<\/p>\n\n<p>It also finds what you have missed. It reads your library for images that already arrived carrying AI provenance, and it names the AI tools running on your site.<\/p>\n\n<p>It is free, it works with any theme, and nothing about your site or your visitors leaves your server.<\/p>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li><strong>Say how it was made.<\/strong> Pick a source type from the dropdown on the image in your Media Library: AI Generated, AI Modified, or one of the honest non-AI answers. One image at a time, or a hundred at once with the bulk action.<\/li>\n<li><strong>Your visitors see a badge.<\/strong> A small \"AI Generated\" label appears on that image wherever it is shown, inside your own theme's layout.<\/li>\n<li><strong>The file carries the mark.<\/strong> The same answer is written into the image file as standard IPTC provenance, and onto the page as schema.org JSON-LD.<\/li>\n<\/ol>\n\n<p>Steps 2 and 3 are why there are two layers. The badge is what a person notices. The mark inside the file is what stays with the image after someone downloads or re-hosts it, and it is what search engines and detection tools read. A page-only label disappears the moment the file is saved.<\/p>\n\n<h4>AI-written text<\/h4>\n\n<p>Article 50(4) covers text rather than pictures, and only where that text is published to inform the public on matters of public interest: news, journalism, public affairs, health or safety guidance. A shop, a portfolio or a personal blog is not that, and the duty never reaches them at all.<\/p>\n\n<p>So the plugin asks that question once, in Settings. Answer no and it stops asking. Answer yes and every post gets a control in the editor, in both the block and classic editors, recording whether the text was AI Generated, AI Modified, or marked simply as AI \u2014 and a short line appears for readers.<\/p>\n\n<p>The exemption is worked out, not claimed. Where a person reviewed the text <strong>and<\/strong> someone is named as holding editorial responsibility, nothing is owed, and both facts are recorded with the date. Review on its own is half the test, so a post with nobody named still discloses and says why.<\/p>\n\n<p>Text and images are judged separately, because the law judges them separately. Human review of an article does not exempt an AI-generated image inside it, and the badge stays.<\/p>\n\n<h4>Key features<\/h4>\n\n<ul>\n<li>Flag images as <strong>AI Generated<\/strong> or <strong>AI Modified<\/strong>, one at a time or in bulk, with an \"AI\" column in the Media Library.<\/li>\n<li>Or record that an image is <strong>not<\/strong> AI: Camera Photo, Human Created and Composite write the matching IPTC value, with no badge.<\/li>\n<li>The badge renders on galleries, portfolio grids, masonry, featured images, content images, and block and FSE themes.<\/li>\n<li><strong>WooCommerce is covered<\/strong>: shop grids, the single-product gallery, cross-sells, and the image that swaps in when a buyer picks a variation.<\/li>\n<li>Every image format WordPress accepts is written with nothing installed: JPEG, PNG, WebP, GIF, TIFF, AVIF and HEIC. No server tools, no command line, nothing to ask your host for. Every generated thumbnail is marked, not just the original.<\/li>\n<li><strong>22 official EU languages<\/strong>, following your site language, with nothing to configure.<\/li>\n<li>A <strong>chatbot notice<\/strong> for Article 50(1), which covers AI that talks to people rather than AI that makes pictures.<\/li>\n<li><strong>Detection<\/strong> finds what you have missed: it reads your unflagged images for AI provenance and names the AI tools running on your site, all on your own server.<\/li>\n<li><strong>A compliance record<\/strong>: export a CSV of every disclosed image, alongside an Article 4 AI-literacy checklist you fill in yourself.<\/li>\n<li><strong>Disclose AI-written text<\/strong> under Article 50(4), recorded per post in the block or classic editor, with the human-review exemption worked out rather than claimed.<\/li>\n<li>Disclosure <strong>shortcodes<\/strong> for written content, where there is no image for a badge to sit on.<\/li>\n<li><strong>Badge Studio<\/strong> designs the badge without CSS: 12 shapes, your own colours, border, rounding and shadow, per-type wording, your own logo inside the badge, and an optional panel that opens when a visitor clicks it. All of it free.<\/li>\n<li>Three dashboard themes, including one that matches WordPress admin, so the plugin looks like part of your site.<\/li>\n<\/ul>\n\n<h4>Twenty-two languages<\/h4>\n\n<p>A disclosure only informs someone if it is in a language they read. A German visitor sees KI-generiert, a Polish one Wygenerowane przez AI.<\/p>\n\n<p>The badge, the disclosure wording, the chatbot notice and the whole admin dashboard are translated into 22 of the EU's 24 official languages. Where a string carries a legal term, the wording follows that language's own official text of Regulation (EU) 2024\/1689 rather than a translation of the English. Irish and Maltese are the two official EU languages WordPress itself does not ship.<\/p>\n\n<p>The translations were produced with AI assistance. Every visitor-facing string has been reviewed against the Regulation's own language versions, but not by a native speaker of every language, so the dashboard says so in any language other than English and asks you to report anything that reads wrong. Corrections go to support@aimtransparency.com and are welcome.<\/p>\n\n<h4>Multilingual sites<\/h4>\n\n<p><strong>Tested with Polylang.<\/strong> The badge, the disclosure wording and the chatbot notice follow the language the visitor is reading. A disclosure set on an image is also carried to that image's translated copies, so the badge does not vanish on a translated page when media translation is switched on \u2014 that is the failure this was tested for, and fixed.<\/p>\n\n<p>The plugin ships a <code>wpml-config.xml<\/code>, which Polylang and WPML both read: it marks the source-type fields to be copied to translations, and exposes any badge or notice wording you have typed yourself for string translation. Leave that wording empty and the built-in text is used, already translated into 22 languages.<\/p>\n\n<p><strong>WPML is not tested yet.<\/strong> The integration uses WPML's own documented API and configuration file, so it is built for it, but we have not run it against a real WPML install and will not claim it works until we have. Using WPML? Tell us how it goes: support@aimtransparency.com.<\/p>\n\n<h4>Legal note<\/h4>\n\n<p>The EU AI Act (Regulation (EU) 2024\/1689) has applied since 2 August 2026. Article 50 asks deployers publishing AI-generated or AI-manipulated content to disclose it clearly, in a way a person can notice. If your site displays AI images you are the deployer, not your AI vendor. The image duty is aimed at content that would pass as real people, places or events; whether yours is in scope, and how you word the disclosure, remain your decisions.<\/p>\n\n<p>This plugin is tooling for that duty. <strong>It is not legal advice.<\/strong> Whether your content is in scope, what counts as a deepfake, and how you word your disclosure remain your decisions. If the answer matters to your business, consult a legal professional.<\/p>\n\n<h4>Who it is for<\/h4>\n\n<p>Anyone publishing AI-generated or AI-edited visuals to an EU audience: blogs, news and magazine sites, agencies building client sites, shops using AI product photography, and portfolios. A small site is not exempt on size alone, and the Act reaches sites outside the EU whose content is seen by people in it.<\/p>\n\n<h4>Shortcodes<\/h4>\n\n<ul>\n<li><code>[aicl_disclosure]<\/code> takes <code>type<\/code> (<code>ai-generated<\/code>, <code>ai-edited<\/code>, <code>ai-assisted<\/code>, <code>chatbot<\/code>) and <code>style<\/code> (<code>inline<\/code>, <code>badge<\/code>, <code>banner<\/code>), with an optional <code>text<\/code> override.<\/li>\n<li><code>[aicl_ai_notice]<\/code> is the chatbot notice.<\/li>\n<li><code>[aicl_text_disclosure]<\/code> places the Article 50(4) line by hand on a post you have marked, instead of letting it sit above or below automatically. It prints nothing on a post you have not marked, or on one the exemption covers.<\/li>\n<\/ul>\n\n<h4>The IPTC values it writes<\/h4>\n\n<p>The same vocabulary C2PA uses, so the marks stay readable as tooling matures.<\/p>\n\n<ul>\n<li>AI-generated: <code>http:\/\/cv.iptc.org\/newscodes\/digitalsourcetype\/trainedAlgorithmicMedia<\/code><\/li>\n<li>AI-edited composite: <code>http:\/\/cv.iptc.org\/newscodes\/digitalsourcetype\/compositeWithTrainedAlgorithmicMedia<\/code><\/li>\n<li>Algorithmic, not AI: <code>http:\/\/cv.iptc.org\/newscodes\/digitalsourcetype\/algorithmicMedia<\/code><\/li>\n<li>Camera photo: <code>http:\/\/cv.iptc.org\/newscodes\/digitalsourcetype\/digitalCapture<\/code><\/li>\n<li>Human created: <code>http:\/\/cv.iptc.org\/newscodes\/digitalsourcetype\/digitalCreation<\/code><\/li>\n<li>Composite of non-AI elements: <code>http:\/\/cv.iptc.org\/newscodes\/digitalsourcetype\/composite<\/code><\/li>\n<\/ul>\n\n<h4>Optional extras<\/h4>\n\n<p>An opt-in directory at <code>directory.aimtransparency.com<\/code> lets you list your site publicly as one that discloses AI. It is off by default, nothing is shared without your explicit consent, and you can remove the listing whenever you like. See \"External services\" below.<\/p>\n\n<p>A free site checker at https:\/\/aimtransparency.com\/checker reads any URL's public code and lists the chatbots and generators it finds, grouped by the article that applies. No signup.<\/p>\n\n<p>Built by itisnothuman, a small independent studio: https:\/\/itisnothuman.com . Docs at https:\/\/aimtransparency.com , guides at https:\/\/aimtransparency.com\/guides\/ .<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin can connect to the AIM Transparency service at <code>directory.aimtransparency.com<\/code>, operated by the plugin's developer. Every connection is <strong>optional and user-initiated<\/strong>: nothing is sent on install, on activation, or during normal use.<\/p>\n\n<ol>\n<li><p><strong>AI Transparency Directory<\/strong> (opt-in, off by default). If you opt in from the dashboard, the plugin sends your site URL, site name, plugin and WordPress versions, the number of images you have labeled, an optional contact email, your consent version\/time, and a one-time verification token to <code>https:\/\/directory.aimtransparency.com\/api\/register<\/code>, so your site can be listed publicly as one that discloses AI content. The service then makes a single request back to a token endpoint on your site to verify you control it. You can remove your listing at any time, which deletes the stored data.<\/p><\/li>\n<li><p><strong>Pro waitlist<\/strong> (sent only when you submit the form). If you enter your email in the optional \"notify me about Pro\" form, that email is sent to <code>https:\/\/directory.aimtransparency.com\/api\/waitlist<\/code> so the developer can email you about the Pro add-on, and is stored only for that purpose.<\/p><\/li>\n<\/ol>\n\n<p>The plugin makes no other external requests. The <code>iptc.org<\/code>, <code>schema.org<\/code>, <code>ns.adobe.com<\/code> and <code>w3.org<\/code> URLs in the code are standard metadata vocabulary identifiers written into your files and pages; they are not network requests.<\/p>\n\n<p>Privacy policy: https:\/\/aimtransparency.com\/privacy<\/p>\n\n<p>The admin dashboard is a React app; its complete readable source ships alongside the compiled bundle in <code>dashboard\/src\/<\/code>, with build steps in <code>docs\/BUILD.md<\/code>. Everything else is hand-written PHP and JavaScript. Bundled third-party work and its licences are listed in <code>docs\/BUILD.md<\/code> as well.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/<\/code>, or install it from the Plugins screen in wp-admin.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Open the <strong>AIM Transparency<\/strong> menu, flag images in the Media Library (single, bulk action, or the per-image control), and configure the badge in Settings. The badge and machine-readable metadata are on by default; switch the badge to the official EU AI-content icons in Badge settings if you prefer them.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20it%20really%20free%3F\"><h3>Is it really free?<\/h3><\/dt>\n<dd><p>Yes, everything in this plugin is fully functional, nothing is locked. Flagging, the visible badge with all its styles and shapes (including the click-to-disclose modal and a custom logo), the in-dashboard media library, IPTC\/XMP embedding for every supported format, JSON-LD, the AI-assistant notice, the AI-on-your-site detection card, and the CSV compliance export are all free. A separate, optional <strong>AIM Transparency Pro<\/strong> add-on (sold on our site, not hosted here) adds its own features on top: automatic flagging on upload, a library scanner (strip-guard plus retroactive discovery of provenance your files already declare), additional report export formats (a print-ready report you can save as PDF, plus JSON, Markdown &amp; TXT), and a WooCommerce gallery cover for themes that replace WooCommerce's own gallery template.<\/p><\/dd>\n<dt id=\"does%20the%20badge%20satisfy%20the%20law%20on%20its%20own%3F\"><h3>Does the badge satisfy the law on its own?<\/h3><\/dt>\n<dd><p>The visible badge addresses the deployer's human-visible disclosure (Art. 50(4)); the embedded metadata addresses machine-readability. Both are on by default.<\/p><\/dd>\n<dt id=\"can%20i%20change%20how%20the%20badge%20looks%3F\"><h3>Can I change how the badge looks?<\/h3><\/dt>\n<dd><p>Yes, and without writing any CSS. Badge Studio is on the plugin's Badge screen. Choose the official EU icons, the built-in AIM label, or Custom, which gives you twelve shapes, your own colours, border, rounding and shadow, the wording for each source type, your own logo inside the badge, and an optional panel that opens when a visitor clicks it.<\/p>\n\n<p>If you need something the studio cannot make, every part of the badge has a stable class name and the plugin publishes its design as CSS custom properties. There is a guide for that, including the specificity trap that makes correct-looking CSS do nothing: https:\/\/aimtransparency.com\/guides\/style-the-ai-badge-with-css<\/p><\/dd>\n<dt id=\"will%20it%20work%20with%20my%20theme%3F\"><h3>Will it work with my theme?<\/h3><\/dt>\n<dd><p>It hooks WordPress's own image and template filters, including <code>render_block<\/code> for block\/FSE themes, so any theme using standard functions is covered. For themes that hardcode <code>&lt;img&gt;<\/code> tags, enable Universal badge coverage in Settings.<\/p><\/dd>\n<dt id=\"will%20it%20modify%20my%20files%3F\"><h3>Will it modify my files?<\/h3><\/dt>\n<dd><p>When file embedding is on, it writes XMP into flagged image files (and every generated size). It is idempotent. Turn it off to use the visible badge + JSON-LD only.<\/p><\/dd>\n<dt id=\"my%20host%20has%20no%20exiftool.\"><h3>My host has no exiftool.<\/h3><\/dt>\n<dd><p>It does not need one. Every format the plugin supports, including WebP, AVIF and the HEIC photos an iPhone produces, is written by the built-in PHP writer. Since 2.2.1 exiftool is not used at all, even where a host has it, because only the built-in writer performs the safety checks that leave an iPhone photo or an awkward HEIC alone. The Metadata screen shows your current capability.<\/p><\/dd>\n<dt id=\"what%20are%20the%20shortcodes%20for%3F\"><h3>What are the shortcodes for?<\/h3><\/dt>\n<dd><p>Disclosure is not only for images. <code>[aicl_disclosure]<\/code> places a labelled notice anywhere shortcodes run, so you can disclose AI-assisted writing, a generated hero image, or a chat widget in your own words and in the exact spot you choose. Pick a <code>type<\/code> (ai-generated, ai-edited, ai-assisted, chatbot) and a <code>style<\/code> (inline, badge, banner). <code>[aicl_ai_notice]<\/code> is the dedicated chatbot notice.<\/p><\/dd>\n<dt id=\"does%20it%20detect%20chatbots%20as%20well%20as%20images%3F\"><h3>Does it detect chatbots as well as images?<\/h3><\/dt>\n<dd><p>Yes. The Detection card matches your site against a registry of 672 AI systems and separates them by duty: chatbots and assistants fall under Article 50(1), which asks you to tell visitors they are talking to an AI, while image and content generators fall under 50(2), which asks you to label the output. It reports which tools are present, not that any specific image or message is AI.<\/p><\/dd>\n<dt id=\"does%20detection%20send%20my%20site%20anywhere%3F\"><h3>Does Detection send my site anywhere?<\/h3><\/dt>\n<dd><p>No. It reads your active plugin list and fetches your own front page over a local loopback request, both on your server. Nothing is sent to any third party, and the result is cached so it does not run on every page load.<\/p><\/dd>\n<dt id=\"the%20translation%20in%20my%20language%20reads%20wrong.\"><h3>The translation in my language reads wrong.<\/h3><\/dt>\n<dd><p>Tell us and we will fix it: support@aimtransparency.com. The translations were made with AI assistance and every visitor-facing string was checked against the EU AI Act's own language versions, but not by a native speaker of all 22. A correction from someone who actually speaks the language is the most useful thing you can send us.<\/p><\/dd>\n<dt id=\"can%20i%20check%20a%20site%20before%20installing%20anything%3F\"><h3>Can I check a site before installing anything?<\/h3><\/dt>\n<dd><p>Yes. The free checker at https:\/\/aimtransparency.com\/checker scans any URL you paste and lists the AI systems it finds. It reads public page code only, never your files.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.2.2<\/h4>\n\n<ul>\n<li>Changed: <strong>the Pro add-on now asks this plugin which formats it can mark, instead of keeping its own list.<\/strong> Pro's library scanner held a separate list of writable formats, written before 2.2.0 taught the built-in writer WebP, GIF, TIFF, AVIF and HEIC. That list never moved, so on a server without exiftool the scanner skipped those formats as unmarkable while this plugin marked them perfectly well: the paid add-on found fewer images than the free plugin. There is one answer now, given by the code that does the writing, so the two cannot drift apart again. Nothing changes for anyone running the free plugin on its own. Requires Pro 1.2.8.<\/li>\n<\/ul>\n\n<h4>2.2.1<\/h4>\n\n<ul>\n<li>Fixed: <strong>on servers with exiftool installed, none of the safeguards added in 2.2.0 were running.<\/strong> The plugin used to hand the writing to exiftool wherever a host had it, and that handover happened before any of the checks the built-in writer performs. On those servers three things went wrong quietly: a photo containing more than one image, which is what an iPhone produces, was rewritten instead of being left alone; a HEIC whose internal layout the plugin cannot safely rewrite was modified instead of being declined; and marking an image a second time added a second, contradictory record beside the first rather than replacing it. The built-in writer now does the writing on every server, so every check applies everywhere. Nothing on your site needs repairing: an image marked twice can simply be marked once more, which now replaces both.<\/li>\n<li>Fixed: <strong>the check that tells you whether the mark reaches your visitors never ran.<\/strong> It was built in 2.2.0 and nothing started it, so it always reported that it had not run. It now runs once a day on its own, and the Metadata screen says what it found: arriving intact, being stripped in delivery, or could not be checked. Where it recognises what stripped it, such as Cloudflare Polish, it names it.<\/li>\n<li>Fixed: <strong>on servers without exiftool the Metadata screen said four formats could not be marked, while marking them.<\/strong> The screen kept a list of which formats the built-in writer could reach, and that list was never updated when the WebP, GIF, TIFF and AVIF writers arrived. So the servers this release was written for were told to ask their host to install a tool nothing needs. The list now matches what the plugin actually writes, and HEIC appears on that screen for the first time.<\/li>\n<li>Fixed: <strong>in PNG files the mark was written after the image data instead of before it.<\/strong> The PNG format allows either, and every reader we tested found it, but the convention is to put it ahead of the pixels and some readers only look there. Marks written before this update are still valid; re-marking a PNG moves it to the usual place.<\/li>\n<li>Fixed: <strong>the Metadata screen could say this server can only write JPEG and PNG.<\/strong> That was true before 2.2.0 and false afterwards. It now describes what the built-in writer actually covers, and no longer asks you to contact your host about a tool nothing needs.<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>New: <strong>every image format is marked without exiftool.<\/strong> The mark used to need a command-line tool most shared hosts do not have, so on those servers WebP images could not be marked at all, and the plugin said so rather than pretending otherwise. WebP, GIF, TIFF, AVIF and HEIC are all now written by the built-in PHP writer, so a plain shared host covers the whole library. HEIC matters for anyone publishing photographs straight from a phone. WebP matters most: it is the format WordPress increasingly delivers, and it was the largest gap in what the free plugin could cover. Image data is copied through untouched in every case, so nothing is re-compressed and no quality is lost.<\/li>\n<li>New: <strong>the plugin can now tell when something between your server and your visitors is destroying the mark.<\/strong> Some CDN features and image optimisers re-compress images after the plugin has written to them, which quietly removes the embedded mark on its way to the reader. The plugin used to report those images as marked, because from the server they are. It now fetches one of your own images the way a visitor would and reads what actually arrives, so a mark that is not reaching anyone is reported as exactly that. Your visible badge and the note in your page code are unaffected either way.<\/li>\n<li>Improved: <strong>images you marked before this update are re-checked automatically.<\/strong> Where a format could not be written on your server, that was recorded against each image at the time. Those records do not revisit themselves, so a library marked before this update would have gone on reporting that its WebP or GIF files were skipped, on a version that now writes them without difficulty. The plugin now revisits them in the background after updating, a small batch per admin page load, and reports what is actually true.<\/li>\n<li>Improved: <strong>images re-compressed by ShortPixel, Imagify, Smush or EWWW are marked again automatically.<\/strong> Those plugins optimise on their own schedule, often minutes after an upload, and the mark was lost until the next library scan noticed. The plugin now listens for each of them finishing and rewrites the mark straight away.<\/li>\n<li>Fixed: <strong>a settings update naming only some badge types could reset the rest.<\/strong> The badge is shown or hidden per source type, and each type can carry wording of your own. An update sent to the plugin's REST API mentioning only some types was read as the full picture, so every type it left out was recorded as hidden and any wording set on it was cleared. Each type is now merged into what is already stored. Badge Studio has always sent every type, so a site changed through the dashboard was never affected.<\/li>\n<li>Fixed: <strong>an incomplete request to the readiness API could clear your Article 4 record.<\/strong> The AI-literacy checklist is saved through the plugin's REST API. A request naming only some items, or none at all, was read as the whole record, so everything it left out was recorded as unticked and its note cleared. Items are now merged into what is already stored, and a request carrying no items is refused outright. The Readiness screen has always sent all nine items, so a record kept through the dashboard was never affected.<\/li>\n<li>Improved: the dashboard tabs now follow the order of the work. Media comes straight after Overview, so the part that runs on its own comes first, and Readiness, which is a record you fill in by hand, sits with the settings instead of second in the list.<\/li>\n<\/ul>\n\n<h4>2.1.8<\/h4>\n\n<ul>\n<li>Fixed: <strong>a fatal error when marking images on hosts without <code>getmypid()<\/code>.<\/strong> Kinsta and some other managed hosts make that function unavailable, and 2.1.5 began calling it to build a unique temporary filename. On those hosts every attempt to write the mark into a file ended in \"Call to undefined function getmypid()\", so marking failed outright, including from the Media Library bulk action. The temporary name no longer depends on it, and uniqueness now rests on the random component, which is widened when there is no process id to pair it with. Reported by @comankey.<\/li>\n<\/ul>\n\n<h4>2.1.7<\/h4>\n\n<ul>\n<li>Fixed: <strong>the official EU icon could be drawn with a border around it.<\/strong> A border width set for the custom badge was applied to the EU icon as well, painting a rectangle around artwork whose appearance is fixed by the disclosure standard. It was most visible on shop grids and galleries, where every badge wore one. The custom badge's own border is unchanged.<\/li>\n<\/ul>\n\n<h4>2.1.6<\/h4>\n\n<ul>\n<li>New: the small dot the custom badge draws before its label can now be switched off in Badge Studio, for sites that want a plainer mark.<\/li>\n<li>Improved: setting your own logo hides that dot automatically, so the badge carries one mark instead of two.<\/li>\n<li>Fixed: the badge preview in the Media viewer and in Badge Studio now shows what your site actually shows. On the custom style it drew the small dot whether your settings called for one or not, and no preview ever drew your logo.<\/li>\n<\/ul>\n\n<p>Older releases are listed in full at https:\/\/aimtransparency.com\/changelog. wordpress.org trims a long changelog, so only the recent entries are repeated here.<\/p>","raw_excerpt":"Disclose and label AI-generated images and content in 22 EU languages. A badge visitors see, plus metadata that survives download. Free, any theme.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/338956","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=338956"}],"author":[{"embeddable":true,"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/itsnothuman"}],"wp:attachment":[{"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=338956"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=338956"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=338956"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=338956"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=338956"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/sk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=338956"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}