=== Radermacher AI Media Marker ===
Contributors: chrisrade
Donate link: https://radermacher.online/
Tags: eu ai act, ai images, transparency, disclosure, iptc
Requires at least: 6.2
Tested up to: 7.0
Requires PHP: 8.0
Stable tag: 1.0.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Reliable, server-side, cache-proof labeling of AI-generated images. Supports the transparency obligations of Article 50 of the EU AI Act.

== Description ==

Radermacher AI Media Marker does one thing at production quality: it labels
AI-generated images in your media library and renders a clear, accessible
badge on the frontend — injected server-side into the HTML, so it works
with every page cache and never flickers.

**What it does**

* Mark images as AI-generated in the media library (single, bulk, or WP-CLI)
* Automatic detection from IPTC/XMP metadata (`DigitalSourceType`) and C2PA
  manifests on upload — deterministic signals only, no guessing
* Filename-based *suggestions* (Midjourney, DALL·E, …) that you confirm —
  the plugin never auto-marks from heuristics
* Server-side badge injection for core blocks: Image, Cover (including
  background variant), Media & Text, Post Featured Image (including Query
  Loop), Site Logo — plus theme template images and Classic Editor content
* Localized, accessible badge: real text, screen-reader label, no
  JavaScript, cache-proof by design
* Machine-readable marking: write IPTC/XMP `DigitalSourceType` into all
  image sizes — pure PHP, lossless (files are never re-encoded), works on
  every host, with a verify/repair command against optimizer stripping
* WP-CLI for agency workflows: `wp aiim scan`, `mark`, `list --format=csv`
  (audit export), `write-meta`, `verify-meta`

**What it deliberately does not do**

This is not a compliance suite. No readiness scores, no chatbot notices,
no assessment wizards. Depth over breadth.

**Legal note**

This plugin is a technical tool supporting the transparency obligations of
Article 50 of the EU AI Act. It does not constitute legal advice and does
not guarantee compliance.

== Beschreibung (Deutsch) ==

Radermacher AI Media Marker kennzeichnet KI-generierte Bilder in der Mediathek
und rendert ein klares, barrierefreies Badge im Frontend — serverseitig ins
HTML eingefügt, damit es mit jedem Page-Cache funktioniert.

**Rechtlicher Hinweis:** Dieses Plugin ist ein technisches Werkzeug zur
Unterstützung der Transparenzpflichten nach Art. 50 der EU-KI-Verordnung.
Es stellt keine Rechtsberatung dar und garantiert keine Rechtskonformität.

== Frequently Asked Questions ==

= Is the plugin really free — also for commercial use? =

Yes. The plugin is free software under the GPL, for every kind of site,
with no feature restrictions. If it serves your business, you can back
its development with a voluntary supporter license (a small subscription
with a certificate naming your domains) — entirely optional, the plugin
works identically without it.

= Does the badge work with caching plugins? =

Yes, by design. The badge is part of the server-rendered HTML, so it is
inside whatever your page cache stores. There is no frontend JavaScript.

= Does this plugin guarantee EU AI Act compliance? =

No. It is a technical tool that supports the transparency obligations of
Article 50. It does not constitute legal advice and does not guarantee
compliance.

= Does the plugin use the official EU icons? =

Yes. The "EU label" and "icon only" badge styles use the European
Commission's official icon for labelling AI-generated content
(published 10 June 2026), bundled locally — no CDN. Per the
Commission's own guidance, using the icon does not by itself establish
legal compliance.

= Can I show only an icon instead of the text badge? =

Yes, as an opt-in "icon only" style. The screen-reader text and a tooltip
with the full disclosure always remain. Be aware: an icon alone may not
satisfy the "clear and distinguishable" requirement of Art. 50(5) EU AI
Act. If you use this style, add a clearly visible explanation on the page
(for example a footer legend) and review the choice with your legal
counsel. This is not legal advice.

= What about emails and social media preview images? =

HTML badges cannot reach those contexts. The metadata layer (IPTC/XMP
`DigitalSourceType` written into the files) is the answer there.

== Screenshots ==

1. Frontend badge on a Cover block — server-side, cache-proof, no JavaScript.
2. Media library list view with the AI column and status filter.
3. Attachment details: AI disclosure field with a detection suggestion.
4. Settings page with live badge preview.
5. Icon-only style using the official EU "AI GENERATED" label.
6. WP-CLI audit export: wp aiim list --format=csv.

== Changelog ==

= 1.0.2 =
* Renamed to "Radermacher AI Media Marker" (slug
  `radermacher-ai-media-marker`) following wordpress.org review feedback
  that the previous name was too generic. Functionality, settings, and
  markings are unchanged.

= 1.0.1 =
* Renamed to "AI Media Marker" (slug `ai-media-marker`) following
  wordpress.org review feedback on the previous name. Functionality,
  settings, and markings are unchanged.
* Admin CSS/JS (media list column, settings page preview and scan) now
  delivered via wp_add_inline_style/wp_add_inline_script instead of
  printed tags.
* Hardening: metadata writing refuses any file path that resolves
  outside the uploads directory, even if attachment metadata was
  tampered with.
* Translations now come from translate.wordpress.org language packs;
  the German translation files are no longer bundled.

= 1.0.0 =
* First public release: deterministic IPTC/XMP/C2PA detection,
  server-side badge rendering for all supported core blocks, official
  EU icons with source-type auto-match, lossless pure-PHP metadata
  writing into all image sizes, WP-CLI with CSV audit export, German
  translations (de_DE, de_DE_formal).

= 0.8.0 =
* WP-CLI commands (scan, mark, list with CSV audit export, write-meta,
  verify-meta) and pure-PHP metadata writing: IPTC/XMP DigitalSourceType
  written losslessly into all sizes of marked images, on every host.


= 0.4.0 =
* Internal MVP: marking layer with deterministic IPTC/XMP/C2PA detection,
  server-side badge rendering for all supported core blocks, settings page
  with live preview and media library scan, German translations.

= 0.1.0 =
* Initial scaffold.
