compliance · provenance · agent design

How to mark AI-generated video so a machine can detect it

2026-09-18 · 5 min read

In short

Article 50(2) of the EU AI Act requires that anything your system generates — audio, image, video or text — is marked so a machine can tell it was generated. The rule reads like a labelling problem and turns out to be an architecture problem: the marking has to happen wherever files actually leave, and on the path most products use, the browser encoder gives you nowhere to put it. The fix is to write a standard XMP box into the container after encoding rather than a string into the pixels, to append it instead of rewriting the file, and to say plainly which formats you could not mark rather than implying you marked everything.

Article 50(2) of the EU AI Act reads like a labelling requirement. In practice it is a question about your export path, and the answer is usually that you have more export paths than you remembered.

The obligation itself is short: a provider of an AI system that generates synthetic audio, image, video or text has to ensure the outputs are marked in a machine-readable format and detectable as artificially generated. It came into force on 2 August 2026. The part that catches people is Article 111(4): a system already on the market before that date has until 2 December 2026. If you shipped before August, December is your deadline, and it is nearer than the August headline suggested.

The obligation lands on files, not on features

We assumed we had done this. The server-side render wrote the claim into the container with encoder metadata flags, and generated images carried it in their own metadata chunks. Both were correct and both had been correct for a while.

Then we followed the file a founder actually downloads.

Our video is composed and recorded in the browser, not on a render farm — the animation is captured from the page itself and encoded locally. That path never touched the server encoder, so it never touched the marking code. The export most people use was the one export that was unmarked, and it stayed that way precisely because the other two were done and made the problem look solved.

The generalisable lesson is that the audit is not "do we mark our output". It is "list every way a file leaves this system, and check each one". Ours were: the server render, the image generator, the in-browser recording, a standalone document export, and a developer script for test fixtures. Three of the five were unmarked. The developer script mattered more than it looks, because test output has a way of ending up in a deck.

Browser encoders give you nowhere to put it

The reason the in-browser path was unmarked is not negligence, it is that the recording API has no metadata hook. You get encoded chunks and you assemble them into a file. There is no field to set.

So the marking has to happen after encoding, on the container. That leaves two options and only one of them is safe.

The unsafe one is to rewrite the file's index so the claim sits in the standard metadata location. That means recomputing the byte offsets that point at the media data, and a mistake there does not produce an unmarked video, it produces a corrupt one. Getting a compliance detail wrong is recoverable. Handing a founder a broken export on launch day is not.

The safe one uses a property of the format: an MP4 is a flat sequence of typed boxes, a reader walks them by their declared sizes, and it is required to skip any box type it does not recognise. There is a reserved box type for exactly this kind of extension, and the metadata standard fixes a known identifier for carrying a metadata packet inside one. Appending that box after the last existing box cannot disturb anything before it. Playback and seeking are untouched because nothing they depend on moved.

Write the vocabulary other people read

The temptation is to append a sentence saying the file was AI-generated and call it machine-readable. It is greppable, which is not the same thing.

There is a controlled vocabulary for this — a published term meaning media generated by a trained algorithm — and it is what the provenance ecosystem keys on. Using it means a detector that has never heard of your product can still classify the file correctly. Using your own wording means only you can read your own claim, which satisfies the letter of a requirement about machine readability while missing its point entirely.

Signed content credentials are the stronger version of this and the eventual target. They need a signing identity and a certificate, which is a procurement problem rather than an engineering one. Unsigned metadata in the standard vocabulary is what is available today, and it is a real improvement over nothing.

Say what you could not mark

One format in our export set has no append-safe extension point. Rewriting it in the browser was possible in principle and risky in practice, so we did not, and the function reports that the file came back unmarked rather than returning it as though the job were done.

That honesty has a cost — there is a real file type we hand over unmarked — and it buys the thing that matters more. A compliance claim that is true of four paths and quietly false of the fifth is worse than a narrower claim that holds everywhere, because the first one fails exactly when someone checks.

What it does not require

It does not require a visible watermark. Machine readability and visible labelling are different obligations, and this one asks for the first. Our exports carry no visible mark and the promise that they do not is unaffected.

It does not require you to hold a record of what was generated, or to phone home when a file is opened. The claim travels inside the file and nothing about it reports back.

And it does not change what a founder may do with what they generate. Marking describes how the file was made. It grants us nothing over how it gets used.


Compliance work is the least glamorous thing in a product and the easiest to defer into a quarter where it becomes urgent. This one took an afternoon once we stopped assuming and started listing exit points. If you want to see the export path this describes, the launch video generator is free and needs no account, and the reasoning behind what we ship is written down.

Last reviewed 18 September 2026.

Sources

  • EU AI Act, Article 50 — Transparency Obligations

    Article 50(2) on machine-readable marking of synthetic audio, image, video and text. In force 2 August 2026 per Article 113. artificialintelligenceact.eu/article/50/

  • EU AI Act implementation timeline

    Article 111(4): systems placed on the market before 2 August 2026 must comply with Article 50(2) by 2 December 2026. artificialintelligenceact.eu/implementation-timeline/

  • IPTC digital source type vocabulary

    The trainedAlgorithmicMedia term used as the interoperable marker. cv.iptc.org/newscodes/digitalsourcetype/

Questions

What does EU AI Act Article 50(2) require?

That providers of AI systems generating synthetic audio, image, video or text ensure the outputs are marked in a machine-readable format and detectable as artificially generated or manipulated. The text qualifies this by what is technically feasible given the state of the art and the cost of implementation, and it carves out systems that only assist standard editing without substantially altering the input.

When does the marking obligation start to apply?

Article 50 came into force on 2 August 2026 under Article 113. Systems already placed on the market before that date get until 2 December 2026 to comply with Article 50(2), under Article 111(4). If you shipped a generator before August, December is your real date rather than August.

Does marking AI-generated media mean adding a visible watermark?

No. The obligation is machine readability, not visible labelling — those are separate things, and Article 50(2) asks for the first. Metadata inside the container satisfies it. That distinction matters commercially: a product can promise no visible watermark on exports and still meet the requirement, because nothing about the marking is rendered into the picture.

How can I check whether a video file is marked as AI-generated?

Read its metadata with a tool that parses container boxes rather than opening it in a player. ExifTool and ffprobe both report the fields in question, and for a quick check a plain text scan of the file will find the claim string if the marking is genuinely present. If nothing shows up in any of the three, the file is unmarked regardless of what the product says.

More writing