How do you label an AI-generated video on a Drupal site, with AI Disclosure?

Deep dive into the AI Disclosure project
A deep fake video needs the EU icon in the top right corner, at the start and then at intervals, and as far as possible it should reach downloaded or reshared copies too. AI Disclosure puts the icon on the page's player, YouTube and Vimeo videos included, and prepares a copy of the file with the icon inside the frames, leaving the original intact.

An AI-generated video that looks real has to be declared to the people watching it, and on a site the declaration has to be both on the page and inside the file. Here I follow how AI Disclosure, the module I created on drupal.org within the Drupal AI Initiative, does it. Images have an article of their own, and so does audio.

When does an AI-generated video need a label?

A video needs a label when it is a deep fake: when it credibly shows a person, a place, an object or an event that exists or could exist, and whoever watches it would take it as real. A synthetic avatar presenting a company's results falls within it, if the viewer mistakes it for a real person. A cartoon or a clearly fictional video keeps the label in a lighter form, next to the video rather than on it.

The obligation falls on the publisher, under Article 50(4) of the AI Act, and it applies from 2 August 2026. The watermark the generator puts in the file is a separate obligation, the provider's, and according to the Commission's guidelines a publisher cannot rely on it for their own label.

What does the Code of Practice ask for a video?

The Code of Practice on transparency of AI-generated content, in its final version of June 2026, asks for a visible icon on a deep fake video, for example in the top right corner. The icon has to appear at the start of the video and, where possible, at regular intervals and after every break, like an ad. It has to be recognisable at once, without clicking or hovering, and it sits inside the video or in a layer above the player that looks like part of the video. The Code also asks, as far as possible, for the icon to reach downloaded or reshared copies. An audio notice can go alongside the icon, never replace it.

The EU icon comes in three versions, a base one, one for generated content and one for modified content, each in black, in white and in the two 50% transparency variants.

What does the viewer see on the page?

The viewer sees the EU icon in a top corner of the player, already before pressing play, and away from the controls, which sit at the bottom. The icon lets clicks through to the player, so the video works as usual. If the editor chose a bottom corner for that file, the player uses the top corner on the same side, so as not to cover the bar. When the labelled copy is ready, the icon is already in the frames, and the one above the player steps aside so it does not appear twice.

What about YouTube and Vimeo videos embedded in the page?

For a YouTube or Vimeo video embedded in the page, AI Disclosure puts the icon over the player frame, on a transparent layer. The player belongs to the platform and the site cannot change it, but the page still belongs to the site, and the publisher remains responsible for what it shows.

It is still worth labelling the video on the platform too, because the site never sees the people who watch it directly on YouTube. On YouTube you use the setting for altered or synthetic content, "Altered or synthetic content", at upload, and the label appears below the player. On Vimeo the label appears as a banner at the top of the embedded player, and disappears if the embed hides the title.

Why prepare a copy of the video with the icon inside?

The icon on the page is HTML: whoever downloads the video, or republishes it elsewhere, leaves it behind. The ai_disclosure_av submodule solves this by preparing, with FFmpeg, a copy of the file with the icon drawn into the frames. The site serves the copy, and the original stays as it was.

I tried it on a test site with a 20-second video. The copy came out as MP4 with the same length and resolution, the icon in the first five seconds and two labels in the file: a readable sentence, "This is synthetic media produced by AI.", and the IPTC source type trainedAlgorithmicMedia.

What is left of the AI signals when the site publishes a video?

Choose where the video goes and compare stock Drupal with AI Disclosure.

What it carries Original file On the page Labelled copy Downloaded On YouTube
Icon on the player – the generator does not add it – absent → ↻ on the player, until the copy is ready – the icon in the frames takes over – the player stays on the page – the player is YouTube's
Icon in the frames – the generator does not add it – absent → ↻ in the served copy – absent → ↻ drawn with FFmpeg – absent → ↻ travels with the file – absent → ↻ travels with the file
Labels in the file – the generator does not add them – they stay in the file – absent → ↻ written into the copy – absent → ↻ arrive with the file – YouTube uses its own labels
C2PA signature ✓ added by the generator ✗ lost ✗ re-encoding invalidates it ✗ lost ✗ lost

How do you decide when the icon appears?

By default the icon appears for the first five seconds and then for five seconds every minute, so in a long video you see it at 1:00, at 2:00 and so on. The site can instead choose to show it for the whole length. For a video manipulated only in part, the editor marks the affected stretches in the media form, for example from 0:10 to 0:20, and the icon appears only there.

In the form a track shows the stretches under the player, and you can drag them with the mouse or a finger to move and extend them. The form's player shows the result in two ways: simulated, with the icon overlaid by the browser, or on the real copy, once the server has prepared it. The corner is the one chosen for the file, top right if nobody changed it.

What does the server need?

It needs FFmpeg, ideally with the libx264 library; without it, the copy still comes out with an older encoder. Copies are prepared in a queue, on cron, one at a time, so no visitor waits and the server does not get overloaded. On small hosting three settings limit the load: FFmpeg threads, encoding speed and the maximum time for each cron run.

A site that cannot run FFmpeg prepares the copy on another machine. The module prints the exact commands with drush ai-disclosure-av:render-command, and the finished file is handed back to the site with drush ai-disclosure-av:attach.

When the video's grade changes, the site keeps serving the last ready copy until the new one arrives, because a label with an outdated sentence is safer than no label at all.

What does the copy leave open?

The copy loses the C2PA signature that the generator, or the C2PA Sign module, had put on the original, because any re-encoding of the frames invalidates it. The labels in the file are unsigned text, and anyone can strip them. The icon in the frames is the most resistant signal, as long as nobody crops the corner. The watermark hidden in the pixels remains the generator provider's job. How image copies are signed and read is explained in the article on C2PA Sign and Content Credentials with AI Disclosure.

For anyone who wants to check what a video carries

One command is enough to read the labels and streams of a copy:

ffprobe -v error -show_entries format_tags:stream=codec_type,codec_name -of default=nw=1 copia.mp4

It answers with comment and ai_digital_source_type, a video stream and, if the original had sound, an audio stream. To see the icon, extract a frame from the first seconds:

ffmpeg -ss 1 -i copia.mp4 -frames:v 1 fotogramma.png

Sources

Sources checked on 10 and 11 October 2026.

  1. AI Disclosure, documentation: video (opens in a new tab). Icon on the player, oEmbed, copy, scheduling. Primary source.
  2. AI Disclosure, labelled copies of audio and video (opens in a new tab). Requirements, queue, small servers, Drush commands. Primary source.
  3. Code of Practice on Transparency of AI-Generated Content (opens in a new tab), European Commission, final text of 10 June 2026, measure 1.2, pages 30-32. Position and duration of the icon on videos. Primary source.
  4. EU icons for labelling AI-generated content (opens in a new tab), European Commission. The three icons and their variants. Primary source.
  5. Improving AI labels for viewers and creators (opens in a new tab), YouTube. Where the label appears. Primary source.
  6. Vimeo Help Center, labelling AI-made content (opens in a new tab), Vimeo. The banner in the embedded player. Primary source.
  7. Guidelines on the transparency obligations of Article 50 (opens in a new tab), European Commission, C(2026) 5054, pages 35-37. Deep fake definition, examples and provider marking. Primary source.
  8. My test with AI Disclosure 1.0.0-beta1 on a Drupal 11 test site, in October 2026, with FFmpeg, read with ffprobe. First-hand measurement.
AI modified

This text was translated by AI.

How was AI used?

Translated from the Italian original with AI assistance, then read and corrected by a person, who holds editorial responsibility.