AI Disclosure: Article 50 disclosure labels for Drupal
The AI disclosure card on an article: EU icon, disclosure sentence and details
The disclosure widget in the entity form sidebar, in custom mode

AI Disclosure labels AI-generated and AI-assisted content in Drupal, so a site can meet the transparency rules of Article 50 of the EU AI Act. Editors record how AI was used on each piece of content, the module works out whether a visible AI label is legally required, and readers see the disclosure with the official European Commission icons.

Not legal advice

This module helps a site comply with Article 50 of the EU AI Act. It is not legal advice. It records the disclosure decision the site makes and shows it to the reader. It does not make that decision and does not certify compliance. In the spirit of open source, the maintainers take no legal liability for how it is used.










AI disclosure under the EU AI Act, Article 50

Since 2 August 2026, a site that publishes AI-generated or AI-manipulated text on matters of public interest, or deep fake images, audio and video, has to disclose it. Content reviewed by a person who holds editorial responsibility is exempt. AI Disclosure records that decision for every piece of content and shows the AI label when the law requires it.

Read Article 50 in the Official Journal


Features

Nine levels of AI involvement, from human only to deep fake

Each grade describes one degree of AI involvement and sets the sentence the reader sees, the EU icon, whether Article 50(4) requires an AI label, and whether human review removes that requirement. Grades are configuration, so a site can change the wording and the icons.

Reusable disclosure profiles

A profile holds the grade, the human review flag, who holds editorial responsibility and the shared "How AI was used" text. Content references the profile instead of repeating the text, so editing the profile updates every page that uses it.

AI labels with the official EU icons

The field formatter shows the EU icon, the grade's sentence, the Article 50(4) line when an AI label is legally required, and an expandable section with the details. A legally required label always appears, whatever the display settings say.

The editor decides, and sees the consequence

The widget sits in the entity form sidebar. It offers the bundle default, a profile, a custom disclosure, or an explicit decision not to label. While the editor works, it states whether the chosen grade needs an AI label and which icon the reader will get.

A compliance report for AI-generated content

The report lists the disclosure of every node: grade, whether a label is required, where the value came from, the human review flag and pending suggestions. It filters by content type, language, grade family and label requirement, and exports to CSV.

No storage cost for default labels

Content left in inherit mode takes its disclosure from the field's default profile and stores no row at all.

Suggestions from AI tools

AI modules can leave suggestions the editor accepts or dismisses. A dedicated view lists them with content, language, grade, source module, status, note, author and date, and filters on status, grade and source.

Built for themers

The disclosure renders as a single directory component, so a theme overrides the component instead of chasing a template.

Say who is responsible

A grade can show the person or team that holds editorial responsibility next to the disclosure. It stays off until a site turns it on.

Link to the site's own statement

The editorial statement URL takes an external address, an internal path, or a link to content the site already publishes.

Four optional submodules

Each one installs on its own:

  • AI Disclosure Audit keeps an append-only trail of disclosure decisions, frozen at the time each one was recorded.
  • AI Disclosure Workflow maps disclosure profiles to Workflows and Content Moderation states and transitions, and can accept a matching suggestion automatically.
  • AI Disclosure Tool exposes the recorder to AI agents as a Tool API plugin.
  • AI Disclosure CSV Export adds the CSV export to the compliance report.

Machine-readable AI disclosure

A schema.org JSON-LD block and a meta tag carry the IPTC digital source type on the canonical page, so search engines can read how the content was made.

One AI label per translation

A disclosure belongs to an entity and a language, so a machine-translated version can say so on its own.


AI-generated images

AI Disclosure marks the page. Its JSON-LD block and meta tag sit on the canonical page, so the disclosure stays behind when an image is downloaded and republished somewhere else. Labelling the file itself is not part of AI Disclosure today.

A separate project burns a label into image derivatives, one Image Style at a time. The overlap between the two projects is discussed in issue #3621703.


For AI module developers

AI tools record their own involvement through the recorder service. suggest() leaves a suggestion the editor accepts or dismisses on the entity form, apply() and applyProfile() write the disclosure directly for headless pipelines and cron. Neither ever downgrades a disclosure that is already there, and an unknown grade or a bundle without the field never breaks the caller's save.

The dependency direction is inverted: AI modules call AI Disclosure, and AI Disclosure knows nothing about any AI tool.

The ai_disclosure.grade_lookup service resolves a grade from an IPTC digital source type URI, in the result format the caller asks for.

Documentation

Installation, configuration, theming, the machine-readable AI disclosure output and the integrator guide.

Read the documentation


Installation

Install with Composer, then enable the module.

composer require drupal/ai_disclosure

drush en ai_disclosure

Installing creates the nine grades and the module settings. Start at /admin/config/content/ai-disclosure: set the site policy, create the profiles the site needs, then add the disclosure field to the content types that need an AI label.

Requirements

Drupal 10.4 or later, or Drupal 11, and PHP 8.1. league/commonmark ^2.8, which Composer installs with the module, renders the markdown description shown to readers.

The submodules add requirements of their own. AI Disclosure CSV Export needs the core rest and serialization modules. AI Disclosure Workflow needs core content_moderation. AI Disclosure Tool needs Drupal 10.5 or later, PHP 8.2 and the Tool API module, which Composer does not install with AI Disclosure.

The shipped grade configuration states when Article 50(4) requires a label. Editing it changes that statement, not only its wording. Read the Article 50 page in the documentation before you do.

Project information

Releases