Label AI-generated content for EU AI Act compliance with Slack and Postgres

Go to Workflow
0 views
Built by Ruslan Karymov Ruslan Karymov
Created on September 21, 2026

Description

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.

Nodes Used (6)

Code
n8n-nodes-base.code
Crypto
n8n-nodes-base.crypto
Edit Image
n8n-nodes-base.editImage
HTTP Request
n8n-nodes-base.httpRequest
Postgres
n8n-nodes-base.postgres
Slack
n8n-nodes-base.slack