{"id":357808,"date":"2026-08-25T06:05:43","date_gmt":"2026-08-25T06:05:43","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ai-image-marker\/"},"modified":"2026-09-29T12:50:18","modified_gmt":"2026-09-29T12:50:18","slug":"onestep-ai-image-marker","status":"publish","type":"plugin","link":"https:\/\/lij.wordpress.org\/plugins\/onestep-ai-image-marker\/","author":23173427,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.0","stable_tag":"1.2.0","tested":"7.1.2","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"One Step AI Image Marker","header_author":"Benjamin Bode","header_description":"Mark AI-generated images in the media library: visible front-end badge and machine-readable IPTC\/XMP metadata (EU AI Act, Art. 50). Works with the block editor, Kadence and Elementor.","assets_banners_color":"141e2c","last_updated":"2026-09-29 12:50:18","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/onestep-webdesign.de\/","rating":0,"author_block_rating":0,"active_installs":10,"downloads":277,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"onestepwebdesign","date":"2026-08-25 06:31:18","revision":3664707},"1.1.0":{"tag":"1.1.0","author":"onestepwebdesign","date":"2026-09-02 15:38:29","revision":3678290},"1.2.0":{"tag":"1.2.0","author":"onestepwebdesign","date":"2026-09-29 12:50:18","revision":3719065}},"upgrade_notice":{"1.2.0":"<p>Adds badges for background images and fixes flagged images disappearing in the cover block. No changes to existing flags or metadata.<\/p>","1.1.0":"<p>Adds a settings page for custom badge text and colors. No changes to existing flags or metadata.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3664634,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3664634,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3664634,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3664634,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0","1.2.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3664634,"resolution":"1","location":"assets","locale":"","width":1440,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3664634,"resolution":"2","location":"assets","locale":"","width":1440,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3664634,"resolution":"3","location":"assets","locale":"","width":1440,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3719065,"resolution":"4","location":"assets","locale":"","width":1440,"height":1263}},"screenshots":{"1":"Checkbox in the attachment details","2":"Media library grid with AI badges, filter and bulk buttons","3":"Front-end badge on a flagged image","4":"Settings page with badge text, color pickers and badge position for background images"}},"plugin_section":[],"plugin_tags":[2353,254918,163,233,25098],"plugin_category":[50],"plugin_contributors":[260630],"plugin_business_model":[],"class_list":["post-357808","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-eu-ai-act","plugin_tags-images","plugin_tags-media-library","plugin_tags-transparency","plugin_category-media","plugin_contributors-onestepwebdesign","plugin_committers-onestepwebdesign"],"banners":{"banner":"https:\/\/ps.w.org\/onestep-ai-image-marker\/assets\/banner-772x250.png?rev=3664634","banner_2x":"https:\/\/ps.w.org\/onestep-ai-image-marker\/assets\/banner-1544x500.png?rev=3664634","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/onestep-ai-image-marker\/assets\/icon-128x128.png?rev=3664634","icon_2x":"https:\/\/ps.w.org\/onestep-ai-image-marker\/assets\/icon-256x256.png?rev=3664634","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/onestep-ai-image-marker\/assets\/screenshot-1.png?rev=3664634","caption":"Checkbox in the attachment details"},{"src":"https:\/\/ps.w.org\/onestep-ai-image-marker\/assets\/screenshot-2.png?rev=3664634","caption":"Media library grid with AI badges, filter and bulk buttons"},{"src":"https:\/\/ps.w.org\/onestep-ai-image-marker\/assets\/screenshot-3.png?rev=3664634","caption":"Front-end badge on a flagged image"},{"src":"https:\/\/ps.w.org\/onestep-ai-image-marker\/assets\/screenshot-4.png?rev=3719065","caption":"Settings page with badge text, color pickers and badge position for background images"}],"raw_content":"<!--section=description-->\n<p>One Step AI Image Marker adds a simple \"AI-generated\" checkbox to every image in your media library. One checkbox controls everything:<\/p>\n\n<ul>\n<li><strong>Visible badge on your website:<\/strong> flagged images get a discreet \"AI-generated\" overlay in the bottom right corner. On small images the badge automatically shrinks to a short label with a tooltip.<\/li>\n<li><strong>Machine-readable labeling in the image files:<\/strong> the plugin writes the IPTC digital source type <code>trainedAlgorithmicMedia<\/code> as XMP metadata directly into the image files (JPEG and WebP), including all size variants. Google reads this field and can show an AI notice for your images in image search.<\/li>\n<li><strong>Media library management:<\/strong> an \"AI\" badge on every flagged image, filters (\"Only AI-generated\" \/ \"Without AI label\") in both the grid and list view, and bulk actions to flag or unflag many images at once.<\/li>\n<li><strong>Background images:<\/strong> give a container the CSS class <code>ai-image<\/code> and it gets the badge, no matter which page builder paints the background. The corner of the badge is chosen in the settings.<\/li>\n<li><strong>Customizable badge:<\/strong> set your own badge text and pick the text and background colors under Settings \u2192 AI Image Marker. Leave the fields empty to keep the translated default and the discreet default styling.<\/li>\n<\/ul>\n\n<p>The plugin works with the block editor (Gutenberg), block-based themes, Kadence Blocks and Elementor. Classic editor content is covered as well. Featured images are supported through the standard WordPress thumbnail function. Images in the cover block and in the media &amp; text block with image fill are labeled as well.<\/p>\n\n<p><strong>Background:<\/strong> Article 50 of the EU AI Act (Regulation (EU) 2024\/1689) introduces transparency obligations for AI-generated content, applying from 2 August 2026. This plugin provides the technical building blocks for labeling AI-generated images: a visible disclosure and a machine-readable marking following the IPTC standard. Whether and how the obligations apply to your website remains your responsibility; this plugin is a technical tool, not legal advice.<\/p>\n\n<p>The plugin runs entirely on your server. It makes no external requests, loads nothing from third-party servers and collects no data.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20plugin%20change%20my%20image%20files%3F\"><h3>Does the plugin change my image files?<\/h3><\/dt>\n<dd><p>Only when you flag an image as AI-generated: the plugin then writes a small XMP metadata block into the JPEG or WebP file (and its size variants). The image pixels are untouched. Files are replaced atomically and validated first, so a failed write can never corrupt an image. Unflagging removes the metadata again.<\/p><\/dd>\n<dt id=\"which%20builders%20and%20editors%20are%20supported%3F\"><h3>Which builders and editors are supported?<\/h3><\/dt>\n<dd><p>The visible badge works with the block editor (Gutenberg), Kadence Blocks, other block collections, the classic editor and Elementor (including Elementor Theme Builder templates). The machine-readable XMP labeling is independent of any builder and always works.<\/p><\/dd>\n<dt id=\"how%20do%20i%20label%20a%20background%20image%3F\"><h3>How do I label a background image?<\/h3><\/dt>\n<dd><p>A background image has no image element the badge could attach to, so you mark its container by hand: give the container the CSS class <code>ai-image<\/code>.<\/p>\n\n<ul>\n<li>Block editor and Kadence (row layout, section, group): select the block, open \"Advanced\" and enter <code>ai-image<\/code> under \"Additional CSS class(es)\".<\/li>\n<li>Elementor (container, section, column, widget): select the element, open \"Advanced\" and enter <code>ai-image<\/code> under \"CSS Classes\".<\/li>\n<li>Anything else: add the class to the HTML element that shows the background.<\/li>\n<\/ul>\n\n<p>You can copy the class with one click under Settings \u2192 AI Image Marker. The badge is added on the server, it does not depend on JavaScript. Also tick the checkbox for the image in the media library, so the file gets its machine-readable label.<\/p><\/dd>\n<dt id=\"can%20i%20choose%20where%20the%20badge%20appears%20on%20background%20images%3F\"><h3>Can I choose where the badge appears on background images?<\/h3><\/dt>\n<dd><p>Yes. Go to Settings \u2192 AI Image Marker \u2192 Background images and pick one of the four corners. The setting applies to all containers with the class <code>ai-image<\/code> and to images that fill their container, such as the cover block. Badges on regular images stay in the bottom right corner.<\/p><\/dd>\n<dt id=\"are%20there%20images%20the%20badge%20cannot%20cover%3F\"><h3>Are there images the badge cannot cover?<\/h3><\/dt>\n<dd><p>Background images are not detected automatically, they need the CSS class <code>ai-image<\/code> on their container (see above). Elementor images with fully custom dimensions (which lack the <code>wp-image-\u2026<\/code> class) do not get the visible overlay. The machine-readable XMP labeling in the files still applies to them.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20edit%20my%20image%20captions%3F\"><h3>Does the plugin edit my image captions?<\/h3><\/dt>\n<dd><p>No. Captions are deliberately left untouched.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20uninstall%20the%20plugin%3F\"><h3>What happens when I uninstall the plugin?<\/h3><\/dt>\n<dd><p>Your images keep working normally. The \"AI-generated\" flags are stored as regular attachment meta and remain in the database, so reinstalling restores the labels. The badge settings are stored as a single option and remain as well. XMP metadata already written stays in the files; unflag images before uninstalling if you want it removed.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20badge%20text%20or%20its%20colors%3F\"><h3>Can I change the badge text or its colors?<\/h3><\/dt>\n<dd><p>Yes. Go to Settings \u2192 AI Image Marker to enter your own badge text (plus a short variant for small images) and pick the text and background colors with a color picker. Empty fields keep the defaults, so the badge stays translated into your site language. Developers can also use the <code>aiim_badge_label<\/code> and <code>aiim_badge_short_label<\/code> filters.<\/p><\/dd>\n<dt id=\"can%20i%20set%20the%20flag%20programmatically%3F\"><h3>Can I set the flag programmatically?<\/h3><\/dt>\n<dd><p>Yes. The meta key <code>_aiim_ai_generated<\/code> is registered for the REST API, so automated workflows can flag uploads directly.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: badge on background images. Give the container the CSS class <code>ai-image<\/code>, works with the block editor, Kadence, Elementor and any other page builder.<\/li>\n<li>New setting: corner of the badge on background images (bottom right, bottom left, top right, top left).<\/li>\n<li>New: cover blocks with a fixed or repeated background get the badge.<\/li>\n<li>Fixed: a flagged image in a cover block or in a media &amp; text block with image fill disappeared.<\/li>\n<li>Fixed: the badge text no longer appears in automatic excerpts.<\/li>\n<li>Improved: screen readers announce the short badge only once.<\/li>\n<li>New filters <code>aiim_label_backgrounds<\/code>, <code>aiim_bg_class<\/code>, <code>aiim_bg_position<\/code> and <code>aiim_fill_image_classes<\/code> for developers.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New settings page (Settings \u2192 AI Image Marker): custom badge text, short badge text, text color and background color with live preview.<\/li>\n<li>New filters <code>aiim_badge_label<\/code> and <code>aiim_badge_short_label<\/code> for developers.<\/li>\n<li>\"Settings\" link in the plugin list.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: media library checkbox, grid\/list badges and filters, bulk actions, front-end badge (block editor, classic editor, Elementor), IPTC\/XMP labeling for JPEG and WebP files.<\/li>\n<\/ul>","raw_excerpt":"Mark AI-generated images in the media library: visible front-end badge plus machine-readable IPTC\/XMP metadata written into the image files.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/357808","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=357808"}],"author":[{"embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/onestepwebdesign"}],"wp:attachment":[{"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=357808"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=357808"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=357808"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=357808"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=357808"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=357808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}