Grades¶
A grade names one degree of AI involvement and carries the facts the rest of
the module reads: a severity for ordering, the EU icon variant to show, the
disclosure sentence the reader sees, and whether AI generated or manipulated
the published content at all. Grades are config entities. Manage them at
/admin/config/content/ai-disclosure/grades.
A grade says how AI was involved. It does not say whether Article 50(4) applies: that is the scope assessment, answered on the content and on the profile.

The nine shipped grades¶
| Machine name | Label | Severity | EU icon | Label required |
|---|---|---|---|---|
human_only |
Human only | 0 | none | No |
ai_metadata |
Metadata picked by AI | 10 | none | No |
ai_rated |
Rated / scored by AI | 20 | ai | No |
ai_translated |
AI translated | 30 | ai_modified | Yes |
ai_summarized |
AI summarized | 40 | ai_generated | Yes |
ai_partly_assisted |
Partly AI assisted | 50 | ai_modified | Yes |
ai_assisted_hitl |
AI assisted (human led) | 60 | ai_modified | Yes |
ai_generated_autonomous |
Autonomously AI generated | 70 | ai_generated | Yes |
ai_deepfake |
AI deep fake (media) | 80 | ai_generated | Yes |
Label required is the factual premise both paragraphs of Article 50(4) share: with this grade, AI generated or manipulated the content that was published. The first three do not meet it and fall outside both paragraphs, so they never need an assessment.
Grades used to carry a second flag, review_exemptible, and ai_deepfake was
the only one set to No. It was standing in for something a grade cannot know:
whether the content is a deep fake or text. That is now an explicit answer on
the content, so the flag is gone.
Severity orders the grades and drives the recorder's never-downgrade rule: an automated caller can only raise the effective grade, never lower it.
Each grade also stores the IPTC digital source type URI that feeds the machine-readable marking.
The machine names are a stable API¶
Other modules reference grades by ID, so the shipped machine names are not renamed within a major version. Everything else on a grade is editable by the site: the label, the sentence, the severity, the icon, and the legal flag.
Before editing Label required, read Article 50. The shipped configuration states whether AI generated or manipulated the published content; editing it changes that statement, not only its wording.
Visible parts¶
Each grade also carries five checkboxes - icon, sentence, legal line, description, editorial statement link - that decide which parts of the rendered disclosure show for content at that grade. They only switch a part on or off; they never move where its data comes from: the legal line and the statement link still come from the site's Policy tab, and the description still comes from the profile or the item.
| Grade | Icon | Sentence | Legal | Description | Statement |
|---|---|---|---|---|---|
human_only |
No | No | No | No | No |
ai_metadata |
No | Yes | No | No | No |
ai_rated |
Yes | Yes | No | No | No |
ai_translated |
Yes | Yes | Yes | No | Yes |
ai_summarized |
Yes | Yes | Yes | Yes | Yes |
ai_partly_assisted |
Yes | Yes | Yes | Yes | Yes |
ai_assisted_hitl |
Yes | Yes | Yes | Yes | Yes |
ai_generated_autonomous |
Yes | Yes | Yes | Yes | Yes |
ai_deepfake |
Yes | Yes | Yes | Yes | Yes |
When Label required resolves to Required, the icon and the sentence
render whatever the checkboxes say: Article 50(4) does not bend to a display
preference. Nothing else is exempted - unchecking the legal line, the
description or the statement link still hides them, even on a required
label.
An already-installed site keeps every part on until it runs the update that
sets this table on the nine shipped grades: the property's own default is
"everything on", so nothing changes for a site that never runs it, and it
never touches a grade the site created itself. After the update, a site that
relied on ai_translated always showing its description, for example, stops
seeing it, and gets it back by checking that grade's "Description" box again.