Text Label (SEB)
Watermarks, Captions, and Gen Info That Actually Sticks
- image
- IMAGE
ComfyUI embeds the full workflow JSON into your PNG's metadata, which is great until someone screenshots it or uploads it to a site that strips metadata. Text Label (SEB) - class TextLabel - takes the opposite approach: it draws text directly onto the pixels. A caption, a watermark, or the pack's seed/steps/CFG/time overlay, burned in and impossible to remove. It's the third and final node in the KSampler Control chain, and it's also perfectly useful on its own.
How it works
Under the hood it's a PIL drawing job. Your image tensor becomes a PIL RGBA image, and the node:
- Measures the text via the loaded font,
- draws a rounded-rectangle background box (opacity controlled by
background_opacity, 0–255), - composites that onto the image,
- then draws the text on top, with an optional stroke outline.
It handles batches too - give it a batch of images and every one gets labeled. The single output is IMAGE, so it slots right before Save Image.
The settings that matter
You only need image and text - everything else has sane defaults. But two of them are worth knowing about because the defaults will trip you up:
background_opacitydefaults to 0, meaning no background box at all. You get text floating directly on the image with a thin stroke. Bump it to ~180 if your text is vanishing into busy pixels.placementgives youtop_left,top_right,bottom_left,bottom_right, andcenter. The classic watermark spot - bottom right - is one click away.
Beyond that: font_size (6–256), edge_offset (distance from the image edge), padding and corner_radius for the box, stroke_width for the outline, text_align for multi-line text, and color_scheme which toggles white_on_black / black_on_white.
Fonts, and the Linux gotcha
The font_family dropdown has seven options, and the pack ships most of them in its fonts/ directory - Funnel Sans, Google Sans Code, Arial, Arial Bold, and Monospace are all bundled in the repo, so no downloads. The default is "Google Sans Code Bold", which looks clean and modern.
The gotcha: for fonts like Arial, the code falls back to system font paths when the bundled file isn't found. On a bare Linux box without mscorefonts installed, that fallback can land on ImageFont.load_default(), which is a tiny bitmap font that looks broken at any real size. If your label renders as a pixelated smear, pick a bundled font (Funnel Sans or Google Sans Code) rather than Arial - that's what they're there for. Don't use text you don't want machine-readable; this is raster text by design, so a long caption becomes a big block.
Install
Same one-liner as its siblings - no dependencies beyond what ComfyUI ships:
cd ComfyUI/custom_nodes/
git clone https://github.com/Seb-Lis/ComfyUI_Node_Pack
Restart, or grab it via ComfyUI Manager → Install Custom Nodes ("ComfyUI_Node_Pack"). You'll find "Text Label (SEB)" under image/annotation.
It works fine standalone - annotate comparison grids, label batch outputs, watermark your exports. But its natural home is this pack's chain: KSamplerControl captures the settings, GenerationTime appends the timing, and this node puts the whole story on the image before you save it.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| text | STRING | YOUR TEXT | — |
| font_familyopt | COMBO | Google Sans Code Bold | 7 options: Arial, Arial Bold, Monospace, Funnel Sans, Funnel Sans Bold, Google Sans Code, +1 |
| font_sizeopt | INT | 306–256 | — |
| text_alignopt | COMBO | left | 3 options: left, center, right |
| placementopt | COMBO | top_left | 5 options: top_left, top_right, bottom_left, bottom_right, center |
| edge_offsetopt | INT | 250–4096 | — |
| color_schemeopt | COMBO | white_on_black | 2 options: white_on_black, black_on_white |
| paddingopt | INT | 180–256 | — |
| corner_radiusopt | INT | 150–128 | — |
| stroke_widthopt | INT | 10–20 | — |
| background_opacityopt | INT | 00–255 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |