Quick overview
This workflow collects AI-generated assets via an n8n form or sub-workflow call, classifies them for EU AI Act Article 50 disclosure, optionally burns disclosure labels into media, routes each asset through a human approval gate (with optional Slack notification), and records decisions plus a registry snapshot in Postgres.
How it works
- Receives an asset submission from an n8n Form trigger or from another workflow via Execute Workflow.
- Hashes the prompt, classifies the asset against EU AI Act Article 50 rules, and generates a language-specific disclosure sentence and manifest metadata.
- For text assets, appends the disclosure sentence to the text when disclosure is required.
- For media assets, saves the incoming file and attempts to burn in the disclosure label using n8n Edit Image for images or an HTTP media-labelling service for video/audio, falling back to non-burn-in handling if labelling fails.
- Stores the asset manifest and approval link in Postgres and optionally posts a review request to a Slack channel.
- Waits for a reviewer to approve, apply an editorial exception (text only), or return the asset, then records the decision in a hash-chained Postgres ledger and snapshots an AI-systems registry by scanning workflows via the n8n API.
Setup
- Create and configure the required Postgres tables/triggers (assets, decisions ledger, and registry snapshots) and add a Postgres credential in n8n.
- Add an n8n API credential so the workflow can list workflows and generate the registry snapshot.
- (Optional) Add a Slack credential with permission to post messages and set the target channel for review notifications.
- (Optional) Deploy and network the media-labelling HTTP service at the configured URL (http://kit-media-label:8881) if you want burn-in labels for video/audio; otherwise those assets fall back to non-burn-in labelling behavior.
Requirements
- Self-hosted n8n: the workflow writes files to disk and reads the instance's own workflows through the n8n API
- PostgreSQL for the append-only decision ledger and the AI-systems registry; the schema and a docker compose stack that creates it are in the repository
- A Slack credential with chat:write (and files:write to attach the asset) only if you use the Slack gate; the built-in form gate works without Slack
- Basic knowledge of which Article 50 obligations apply to you: the template implements the mechanism, it does not give legal advice
Customization
- Edit the nine Article 50 paths and their disclosure sentences in the Classify (Art. 50) node to match your house style and languages
- Call it from an existing production line with Execute Sub-workflow, passing asset_type, language, model, prompt, operator, depicts_real_person, public_information and the file as binary data
- Change the Slack channel, or remove the Slack node to run the gate purely as an n8n form
- Point the Postgres nodes at an existing audit database if you already keep one; the ledger only needs the append-only trigger to stay meaningful
Additional info
Article 50 of the EU AI Act applies from 2 August 2026, and the deep-fake definition it leans on is Article 3(60). This template is the mechanism rather than the policy: it decides, labels, stops for a person, and leaves a record that can be checked. Full source, the database schema with the append-only triggers, a docker compose install and a written case study: https://github.com/karusrus/transparency-kit and https://karusrus.github.io/transparency-kit/ . Built by Ruslan Karymov, AI Enablement & Automation Lead, Creative, marketing and business operations.