AI-assisted production lines · human approval gates · EU AI Act

Every AI asset stops at a named human.
The auditor's page fills itself.

Compliance as a property of the production line, not a report written before the audit. An n8n module you drop in front of any publishing step: it classifies the asset under Article 50, labels it, writes provenance, waits for a person, logs the decision, and keeps a registry of every AI system on the instance with a verdict on each path to the public.

Why now, and where the habit comes from. The EU AI Act’s transparency duties for deployers apply from 2 August 2026. This kit is the preparation, built ahead of the date: the obligations turned into a property of the production line before anyone asks for a report. The habit comes from work as AI Expert on Horizon Europe projects with GDSI, where an AI component ships only under the programme’s mandatory ethics and data-governance requirements — governance there is a condition of funding, not a policy document. The same discipline, applied to a marketing line.

What is in the box

Nine pieces, one repository. Your line calls the module; everything else fills itself. The only model in the box is a local text-to-speech voice in the demo line; the kit itself generates nothing, it labels and records what your generators produce.

your lineAI Act gatelabela person in Slackledgerregistryaudit pageback to your line

Yours

Any n8n line

A workflow that ends in a publish node. It adds one Execute Sub-workflow call before publishing and gets back approved, disclosure_status and the labelled file.

Module · workflows/transparency-kit.json

AI Act Transparency Kit

Classifies under Art. 50 and Art. 3(60), fixed disclosure sentence per language, provenance manifest, the gate, the record, the registry snapshot. No model inside.

Service · tools/media-label

Label service

A small container with a static ffmpeg: burns the label into images and video, writes it into audio metadata. Unreachable? Images fall back to n8n's Edit Image node, the rest is disclosed at publication.

Gate · Slack thread or form

Human approval

Post to #ai-act-gate, poll the thread, take the reviewer's identity from Slack. No Slack? A Wait-node form, no credentials at all.

Storage · db/schema.sql

Postgres ledger

Assets, decisions, registry snapshots. Decisions are append-only and hash-chained by database triggers; verify_chain() runs on every audit render.

Page · workflows/audit-view.json

Audit view

GET /webhook/audit: what an auditor reads instead of the pipeline. Registry with path analysis, synthetic media, generated text, approval log.

Demo · workflows/host-line.json

Recycling notice · three voices

A real line with the module inside: text → three local Kokoro voices → gate → publish. The only model in the repository, and only here.

Samples · three inactive lines

Lines the registry flags

A social drafter with no gate (uncovered), a support inbox scoring emotion with nobody told (inform), a chatbot that never says it is one (chatbot).

Picture · pipeline-map importer

The map below

Generated from the exported workflow JSON and the registry, not drawn. Every block on this page is a node on the map.

The map

Keys 1–5 fly between views: everything, the production line, the kit, the flagged sample, the Auditor block with its page. Press A for flow, H to hide the chrome.

What the auditor reads

Five blocks, filled from files the line writes. Nothing typed by hand except the reviewer's decision.

Audit view
The page: awaiting a human, the AI-systems registry with path analysis, synthetic media and deep fakes, generated text, the approval log.
Human approval gate
The gate. One asset, its category and obligations, the disclosure sentence in the asset's language, three decisions: approve, editorial exception (text only), return.

Deep fakes as the Act defines them

Art. 3(60): generated or manipulated content resembling a real person, object, place or event that would appear authentic. No person needed. The intake asks what is shown, whether the footage was altered, and whether it is an artistic or satirical work; the label follows.

Manipulated image of a real place with the full label
A real place, altered: full label, “AI-manipulated”, the disclosure sentence in the asset's language goes with the file.
The same alteration as a satirical work with a limited corner label
The same alteration declared as satire: disclosure limited to a small corner label, as Art. 50(4) allows for artistic work, still present.
A real person, generated portrait, full label
A real person: my own likeness, consent is my own signature. Full label, consent reference in the manifest; the consent itself is GDPR and personality rights, not the AI Act, and the kit keeps them apart.

Why the satire label is smaller

Art. 50(4) §1, last sentence: when a deep fake is part of an evidently artistic, creative, satirical, fictional or analogous work, the duty is limited to disclosing "in an appropriate manner that does not hamper the display or enjoyment of the work". The law keeps the label and lets it shrink. In the demo the same altered photo of Varna goes through the gate twice with one intake answer changed, Artistic, creative or satirical work?: no gives the full "AI-manipulated" label and the disclosure sentence under the photo, yes gives a small corner label. The claim is the operator's, not the kit's: the person at the gate sees it and approves or returns.

Systems, not assets: emotion recognition and biometric categorisation must inform the people exposed (Art. 50(3)), chatbots must say they are AI (Art. 50(1)). The registry flags both from the workflow graph, publishing or not.

How a line is judged

The Act does not regulate links between nodes; it regulates what reaches people. From every node that calls a model, every path forward to a publishing node is walked, and what stood in between decides the verdict.

VerdictRuleFor the auditor
internalno path reaches a publishing nodeno Art. 50 duty, recorded anyway
disclosedevery path passes a disclosure stepdisclosure is built into the line
editorialno disclosure step, but every path passes a human gatetext only, Art. 50(4) §2, with a named responsible person
verifya destination that may or may not reach peoplea person decides; tag the node
uncovereda path reaches people with neitherAI content goes out with no disclosure and no responsible person
likenessa face or voice generator reaches people without a disclosure stepdeep fakes need disclosure regardless of a gate, Art. 50(4) §1
informemotion recognition or biometric categorisation runs on people who are not toldArt. 50(3), publishing or not; tag the node that informs them
chatbota system talks to people without saying it is an AIArt. 50(1); tag the node that discloses it

Install it: ten minutes, one machine

Docker and Python 3. No model, no GPU, no API key: the kit labels and records what your generators produce, it does not generate. Works with any model your line already calls, because the line only passes the model's name and the prompt.

  1. Clone and start, one of two ways. git clone https://github.com/karusrus/transparency-kit && cd transparency-kit, then either docker compose up -d (an init job imports and publishes the six workflows before n8n starts) or ./reload.sh (the same three containers with plain docker run, needs Python 3).
  2. Create the n8n owner at localhost:5678, once.
  3. Send an asset through /form/ai-act-intake; decide at the form gate; read /webhook/audit.
  4. Optional, registry: an n8n API key attached to the node Read all workflows, so the page lists every AI system on the instance.
  5. Optional, Slack gate: a Slack app with five scopes, one credential, GATE_MODE=slack in .env, rebuild and re-import.

After that, embedding in your own line is three nodes, below.

Embedding it in your line

  1. Before the publishing node, add Loop Over Items (batch 1).
  2. Inside the loop, Execute Sub-workflow → AI Act gate, passing asset type, language, model, prompt, operator, whether a real person is depicted, whether it informs the public, and the file.
  3. After the loop, IF human approved, then publish. The reviewer is notified where the gate is (Slack, or the audit page); the line waits.

Nothing else changes. The registry reads the instance through the n8n API; the auditor's page reads the files the kit writes. Tag your own publishing nodes [exit] and your own disclosure nodes [AI disclosure] so lines the kit did not build are judged too.

What it is not

Not legal advice, and not a high-risk (Annex III) system: scope is the deployer side of Article 50 and a voluntary record. Reviewer identity is self-declared unless the gate sits behind an authenticated channel. Files on one host are not a tamper-proof ledger. Those are the next three things to build, in that order.