Nodes/ComfyUI_EU_AI_Label/EU AI Label (Visible)
ComfyUI Node

EU AI Label (Visible)

The Official EU AI Label, Burned Into Every Image (and Kept Pretty)

By a-und-b·Created 2 months ago·Updated 2 months ago· 0
EU AI Label (Visible)
  • image
  • custom_logo
  • Images
label_type
eu_icon_variantAI generated
color_variantwhite
custom_textAI generated
size7.0
margin3.0
opacity100
positionbottom right

So, the EU AI Act happened. Article 50's transparency obligations went live on 2 August 2026, which means anyone generating for an EU-facing audience now has a genuine, legal reason to put "this was made by AI" where a human can see it. You could photoshop an icon on by hand. Or you can drop this node at the end of the graph and let it stamp the official European Commission icons onto every image in the batch, in the exact size, corner, and opacity you want.

It's the "deep fake" disclosure half of Art. 50 - the visible label a person actually reads. The machine-readable half is a separate node in the same pack (the Metadata Writer), and you'll probably want both. But if the visible label is the job, this is the node.

How it works

Pure Pillow, no tricks. The official EU icons ship as pre-rendered PNGs (converted from the Commission's SVG sources) so there's no native SVG-rendering dependency to fight on Windows. Each icon gets composited onto your image with LANCZOS scaling that preserves the icon's aspect ratio, and the built-in clear-space padding around the official artwork is cropped out so size and margin control the icon you actually see, not dead space baked into the file.

The node is batch-capable: feed it a whole batch of IMAGE tensors and it stamps every frame. It's not an output node - it hands the labeled images back out the Images output, so you keep wiring from there.

The inputs that matter

You'll touch maybe five of these:

  • Label Type - EU Icon, Text, Text + EU Icon, or Custom Logo. If you pick Custom Logo, wire the optional Custom Logo image input or the node throws - that's not a bug, it's the node refusing to guess.
  • EU Icon Variant - AI, AI generated, or AI modified. These are the three official Commission icons; pick the one that matches what you actually did (modified/finetuned imagery wants AI modified, not AI).
  • Size (%) - label width as a percentage of image width, default 7. This is the one you'll fiddle with most; it's also the one where "7%" can look tiny on a huge image, so preview before you batch.
  • Margin (%) and Opacity (%) - distance from the edge and label alpha. Opacity only affects the label, never your image.
  • Position - a 9-point grid (top left through bottom right), default bottom right.

Everything else - Color (black/white), Custom Text (default AI generated, rendered in a bundled DejaVu Sans so there's nothing to download) - has a sane default.

Install

The pack needs only Pillow and numpy, which you almost certainly already have. Via ComfyUI Manager, search for ComfyUI_EU_AI_Label and install, then restart. Or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/a-und-b/ComfyUI_EU_AI_Label.git
pip install -r ComfyUI_EU_AI_Label/requirements.txt

Restart, and the nodes show up under EU AI Label. Works on both the legacy canvas and Nodes 2.0.

Where people get burned

The label is cosmetic - if the goal is compliance, a visible label alone doesn't satisfy the machine-readable marking obligation in Art. 50(2). Wire the output into the Metadata Writer instead of a plain SaveImage if you want both halves. And remember the pack's own disclaimer: the icons are free to use, but whether your specific output must be labeled is a legal call for you, not a node. The other real gotcha is thinking size means pixels - it doesn't, it's relative to image width, which is honestly the right call because it keeps a 1024px and a 4096px render proportionally identical.

CategoryEU AI Label

Inputs (10)

NameTypeDefaultDescription
imageIMAGE
label_typeCOMBO4 options: EU Icon, Text, Text + EU Icon, Custom Logo
eu_icon_variantCOMBOAI generated3 options: AI, AI generated, AI modified
color_variantCOMBOwhite2 options: black, white
custom_textSTRINGAI generated
sizeFLOAT7.01–100Label width in % of image width
marginFLOAT3.00–45Distance to the edge in % of image width
opacityFLOAT1001–100
positionCOMBObottom right9 options: top left, top center, top right, middle left, center, middle right, +3
custom_logooptIMAGE

Outputs (1)

NameTypeDescription
ImagesIMAGE