AI Content Disclosure
COMET DXP can mark digital assets as AI-generated or AI-modified and disclose this on the site. This helps operators meet the transparency requirements of the EU AI Act (Regulation (EU) 2024/1689).
This page explains how COMET's feature maps to the regulation as we understand it. It is not legal advice. Whether and how the obligations apply to your project depends on your role and content — confirm your specific obligations with legal counsel.
Background: what the EU AI Act requires
Article 50 distinguishes two roles:
- Providers of an AI system that generates synthetic audio, image, video or text (Art. 50(2)) must mark the output in a machine-readable format. This obligation sits with the tool that generates the content (e.g. the image generator), not with the website operator.
- Deployers of an AI system that generates or manipulates a deep fake (Art. 50(4)) must disclose that the content has been artificially generated or manipulated.
A COMET-based website that uploads and publishes AI-generated assets is a deployer. Its relevant obligation is therefore the Art. 50(4) disclosure of deep fakes.
A deep fake is defined (Art. 3(60)) as:
AI-generated or manipulated image, audio or video content that resembles existing persons, objects, places, entities or events and would falsely appear to a person to be authentic or truthful.
How COMET implements the disclosure
Marking assets in the DAM
Editors mark an asset in the DAM file settings via the AI content field, which offers:
- No (default) — the asset is not AI content.
- AI generated — the asset was fully generated by AI.
- AI modified — an existing asset was edited using AI.
The field is shown for image, video and audio assets only, since a deep fake is image, audio or video content. Other file types (e.g. SVGs, documents) cannot constitute a deep fake — in particular, a vector SVG cannot appear photorealistic, so it falls outside the disclosure obligation.
Disclosure on the site
When a marked asset is rendered, PixelImageBlock (@comet/site-nextjs) and DamVideoBlock (@comet/site-react) automatically render:
- the official EU AI-content label as a badge in the top-right corner, using the artwork from the EU labelling icons, and
- a prefix on the media element's accessible name (e.g. "AI-generated"), so screen-reader users learn about the disclosure at first exposure.
The disclosure is only rendered automatically by the library's PixelImageBlock and DamVideoBlock. Any asset rendered another way — a custom image or video component, an audio player (COMET ships no audio block), or an asset served directly — will not be disclosed automatically. In those cases you are responsible for the disclosure yourself: read the asset's aiContentType and surface it (e.g. via getAiContentAltTextWithPrefix and the AiContentDisclosure badge).
Art. 50(2)'s machine-readable marking is the generating tool's responsibility. COMET serves images through imgproxy, which strips provenance metadata (e.g. C2PA) during transformation. COMET therefore satisfies the deployer's Art. 50(4) disclosure with a rendered, human-visible label and an accessible-name prefix, rather than embedded metadata.
Customizing the disclosure
PixelImageBlock and DamVideoBlock accept the following optional props:
aiContentDisclosureProps— override the badge (e.g.size,iconColor,position).aiContentDisclosure— render your own disclosure instead of the built-in badge (passnullto render none, e.g. when the project renders its own).aiContentAltTextPrefixLabels— localize the AI content prefix added to the accessible name (defaults to English).
@comet/site-react also exports the AiContentDisclosure badge component and the getAiContentAltTextWithPrefix helper for custom rendering.
The alt-text prefix defaults to English, so pass a translated string via aiContentAltTextPrefixLabels — for example using react-intl:
const intl = useIntl();
<PixelImageBlock
data={data}
aspectRatio="16x9"
aiContentAltTextPrefixLabels={{
generated: intl.formatMessage({
id: "aiContentDisclosure.altTextPrefix.generated",
defaultMessage: "AI-generated",
}),
modified: intl.formatMessage({
id: "aiContentDisclosure.altTextPrefix.modified",
defaultMessage: "AI-modified",
}),
}}
/>;