=== OznaczAI – AI Image Disclosure for EU AI Act ===
Contributors: goldenpixel
Tags: eu ai act, ai disclosure, ai transparency, deepfake, image labeling
Requires at least: 6.2
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.6.24
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Label AI-generated and AI-modified images in WordPress to support EU AI Act Article 50 transparency disclosures.

== Description ==

OznaczAI helps WordPress site owners add visible labels to AI-generated, AI-modified, and AI visualization images.

The plugin is designed for AI image disclosure and transparency workflows, including use cases connected with Article 50 of Regulation (EU) 2024/1689, commonly known as the EU AI Act.

Article 50 introduces transparency obligations for certain AI-generated or manipulated content, including deepfake image, audio, and video content. The Regulation applies from 2 August 2026.

Not every image created or edited with AI is automatically subject to a disclosure duty. OznaczAI does not decide whether a particular image falls within the scope of any law and does not provide or guarantee legal compliance. The site administrator remains responsible for deciding which images require a label and what wording is appropriate.

= Mark an image once =

Choose a label status in the WordPress Media Library. OznaczAI then displays the selected information wherever that Media Library image is used in supported WordPress output.

Available statuses:

* AI-generated image
* AI-modified image
* AI visualization
* No label


== Screenshots ==

1. Label AI-generated and AI-modified images directly from the WordPress Media Library.
2. Configure label presets, custom styling, hero and slider labels, and live preview.
3. Visible AI disclosure labels on a real website, including hero images and images inside page content.
4. Responsive AI labels automatically adapt between full text and a compact AI symbol on smaller screens.


= Main features =

* Quick status selection in the Media Library list view
* Automatic saving without opening each attachment
* Bulk labeling for multiple images
* Custom label wording
* Several lightweight label templates
* Flexible label placement controls for images, hero sections, backgrounds, and sliders
* Caption below image option
* Support for standard WordPress images and featured images
* Support for common WooCommerce image output
* Support for common Elementor image widgets
* Automatic detection for many hero sections, backgrounds, Elementor sliders, and Slider Revolution 6/7 modules
* Optional compact AI symbol on small images that expands on hover or keyboard focus
* Conservative upload metadata hints based on embedded IPTC/XMP data, Content Credentials markers, and common generator signatures
* Optional Schema.org digitalSourceType JSON-LD for labeled images found on the page
* Translation-ready English source strings for translate.wordpress.org
* Fallback CSS classes and shortcode for custom implementations
* No external servers, user accounts, telemetry, advertising, or subscription

Available label presets:

* Minimal
* Light
* Outline
* Caption below image
* Glass
* Dark
* Icon only

The Caption below image preset places the disclosure outside the image so it does not cover visual content.

== Installation ==

1. In WordPress, go to Plugins > Add New Plugin > Upload Plugin.
2. Select the ZIP file and activate the plugin.
3. Open OznaczAI in the WordPress admin menu and configure the label wording and appearance.
4. Open Media in list view and choose a status in the AI label column.

You can also select multiple files and use the bulk actions menu.

== Background images, hero sections and sliders ==

OznaczAI can automatically detect labeled Media Library images used in common hero sections, backgrounds, Elementor sliders, and Slider Revolution 6/7 modules. Slider Revolution support covers current SR7 image/background elements as well as common legacy SR6 image and slide-background markup. Automatic detection can be enabled or disabled in the plugin settings.

For custom themes, custom CSS, or elements that use external image URLs, the following fallback classes are available:

* oznaczai-bg-generated
* oznaczai-bg-modified
* oznaczai-bg-visualization

You can also use this shortcode:

[oznaczai_image_label_background type="generated"]

Supported type values are generated, modified, and visualization.


== Metadata hints and machine-readable disclosure ==

OznaczAI can inspect newly uploaded images for embedded metadata signals that may indicate AI generation or AI editing. The check is intentionally conservative and can look for relevant IPTC/XMP values, Content Credentials (C2PA) markers, and common generator signatures.

The result is only a review hint. OznaczAI never assigns a public AI label automatically from these signals, and it does not validate the cryptographic signature or trust status of C2PA Content Credentials. Metadata can also be missing or removed by image processing, optimization, or re-export.

For images that you explicitly label, OznaczAI can optionally add Schema.org `digitalSourceType` JSON-LD on pages where the image is found. This machine-readable publisher metadata is separate from C2PA Content Credentials.

== Languages ==

The plugin source strings are in English and are fully internationalized using the `oznaczai-image-labeling` text domain. Translations are managed through translate.wordpress.org and delivered by the standard WordPress language-pack system. When global label text fields are left empty, the built-in default labels are resolved in the active WordPress locale. Custom label text remains exactly as entered.

== Important legal scope ==

OznaczAI is a technical labeling tool intended to assist with visible AI image disclosures. It does not determine whether a particular image is a deepfake or whether it must be labeled under the EU AI Act or any other law.

No WordPress plugin can provide or guarantee complete legal compliance. Site owners should assess their own content, role, audience, and applicable legal requirements.

== Privacy ==

OznaczAI does not send data to external servers, create user accounts, use telemetry, or display advertising. Label statuses and optional metadata-scan hints are stored locally in WordPress attachment metadata, and plugin settings are stored in the local WordPress database.

== Frequently Asked Questions ==

= Is OznaczAI related to the EU AI Act? =

Yes. OznaczAI is designed to help WordPress site owners display visible image disclosures for transparency workflows, including use cases connected with Article 50 of the EU AI Act.

= Does the EU AI Act require every AI-created image to be labeled? =

No. The legal scope depends on the content, context, and role of the person or organization using the AI system. The plugin does not make this legal assessment.

= Does the plugin guarantee legal compliance? =

No. OznaczAI assists with the technical display of labels. The site administrator decides which materials require a label and which wording is appropriate.

= Does the plugin send data outside the website? =

No. The plugin does not connect to external services and does not collect usage analytics.

= Does the plugin work with background images and sliders? =

It automatically detects many common WordPress and Elementor implementations, including Slider Revolution 6/7 image layers and slide backgrounds. Custom themes or other third-party widgets may require one of the fallback CSS classes or the background label shortcode.

== Changelog ==

= 1.6.24 =
* Fixed preset card badge previews so they remain in the normal card layout instead of inheriting absolute positioning from the main live preview.
* Improved preset card layout and spacing in the redesigned settings screen.

= 1.6.23 =
* Reworked preset cards to use a natural vertical layout for title, description and badge preview without overlapping content.

= 1.6.22 =
* Fixed preset card layout to use natural content height and prevent row stretching or overlapping.

= 1.6.21 =
* Refined preset card spacing and advanced toggle separation in the admin UI.

= 1.6.20 =
* Fixed preset card layout so title, description and badge preview render in a stable header/body/footer flow.

= 1.6.19 =
* Fixed live preview icon color updates for manual image and hero styles.
* Fixed hero/background/slider preset placement so preset mode follows canonical preset placement.
* Made preset cards more compact while preserving WYSIWYG badge previews.

= 1.6.18 =
* Simplified appearance settings into separate Image and Hero/background/slider style systems.
* Removed the visible Styles by location UI while preserving legacy settings for migration.
* Added migration from background/slider context styles to the new Hero/background/slider style.
* Updated live preview to switch between Image and Hero/background/slider using the same resolver as the frontend.

= 1.6.17 =
* Consolidated context appearance controls into one Context Overrides system.
* Removed duplicated Hero/Slider appearance controls from the Hero/backgrounds technical section.
* Made type override controls collapse until the specific type override is enabled.
* Updated the live preview to use the final resolver for all supported contexts.

= 1.6.16 =
* Fixed Caption below image contrast so it keeps its canonical text color instead of using image-based auto contrast.
* Added global, separate preset, and custom appearance modes for Hero/background and Slider Revolution contexts.
* Added context-aware live preview switching for standard images, hero/backgrounds, and sliders.
* Preserved the existing style resolver hierarchy while adding context custom styles.

= 1.6.15 =
* Fixed Caption below image preview sizing so longer labels remain visible below the image.
* Improved preset card layout to prevent badge and description overlap.
* Added a No background custom style option and a percentage background opacity slider.
* Added automatic/custom responsive behavior settings for desktop, tablet, and mobile previews.
* Clarified that the small-image symbol option acts as an image-width override.

= 1.6.14 =
* Fixed the Caption below image preset so its preset card, live preview, and frontend output share the same canonical styling.
* Refreshed the separate Polish test language pack for the new 1.6.12-1.6.14 admin strings.

= 1.6.13 =
* Unified preset card previews, the live preview, and frontend labels around one canonical preset configuration.
* Fixed Light, Caption below image, Glass, Dark, and Icon only preview mismatches in the redesigned settings screen.
* Limited automatic contrast corrections so they preserve the selected preset identity.
* Hid manual style controls while preset appearance mode is selected without discarding saved custom values.

= 1.6.12 =
* Added manual badge styling controls, including colors, opacity, border, radius, typography, padding, icon size and shadow.
* Added Glass, Dark and Icon only presets with accessible tooltip/popover behavior.
* Added optional per-type presets and colors, context-specific presets, and per-image preset overrides.
* Expanded the live preview so it reacts to type, preset, custom styling, contrast, icon and device changes without saving.
* Added image-size responsive behavior and a compact Media Library badge preview.

= 1.6.11 =
* Rebuilt the local Polish test language pack workflow to preserve UTF-8 characters correctly.
* Confirmed admin UI strings remain translation-ready for WordPress language packs.

= 1.6.10 =
* Added real automatic contrast behavior for frontend labels on images, backgrounds, heroes, and supported sliders.
* Changed the responsive behavior row in settings to static behavior indicators so only real controls appear interactive.

= 1.6.9 =
* Redesigned the OznaczAI settings screen with a modern two-column admin UI and live preview.
* Added a saved automatic contrast preference for the redesigned settings interface.

= 1.6.8 =
* Removed outdated readme wording that referred to packaged translation files.
* Confirmed translation handling is prepared for translate.wordpress.org without PO/MO files in the release package.

= 1.6.7 =
* Removed bundled PO/MO translation files so WordPress.org can manage translations through translate.wordpress.org.
* Replaced generic AIIL/global identifiers with unique OznaczAI Image Labeling prefixes.
* Added a one-time migration that preserves existing settings and labeled-image data from versions up to 1.6.6.
* Updated AJAX actions, admin field names, shortcodes, settings identifiers and fallback CSS classes to use unique plugin-specific names.

= 1.6.6 =
* Removed the discouraged manual text-domain loading call while preserving WordPress just-in-time translation handling.
* Documented the official third-party LiteSpeed Cache purge hook for WordPress Coding Standards so Plugin Check does not misclassify its external hook name.

= 1.6.5 =
* Fixed duplicate labels when the same image was detected both as normal content and as a hero, background, or Slider Revolution image.
* Improved automatic background detection so descendant content images are not mistaken for section backgrounds.

Earlier release history is included in changelog.txt.
