Overlay Text
Put real text on your images — parent node for the WBLESS text system
- image
- text_block_1
- image
- text_mask
Trying to put legible text on a generated image is one of those things diffusion models are famously bad at - spelling comes out wrong, and you end up re-rolling forty times. The grown-up move is to render the text yourself and composite it, which is exactly what this node is for. Overlay Text is the parent node of the pack's text system: it controls where and how text sits on the image, while the child Text Block node controls the actual content and style of each text block. You wire one or more Text Blocks into it, and it paints them onto your image.
The mental model is like a simplified design tool: a canvas (image), global alignment settings, and per-block styles. Multiple Text Block nodes connect in, and each can carry its own text, font, and look - which is how you get a headline plus a caption with different styling in one pass.
How it works
The text_block_1 input is the slot for your first Text Block node, and more slots open as you connect more. (If you're searching for the block itself, it's the "Text Block" node in the same 🌈WBLESS category - Overlay Text and Text Block ship as a pair.)
On the Overlay Text side you control the global placement and presentation:
- align -
center,top, orbottom(vertical anchoring). - justify -
center,left, orright(horizontal). - position_x / position_y - fine offsets, from -4096 to 4096.
- line_spacing - extra spacing between lines, ±1024.
- rotation_angle - rotate the whole block, and rotation_options decides whether rotation happens around the text center or the image center. That second option is the one people don't expect, and it's the difference between "spin the text in place" and "orbit the text around the canvas middle."
It outputs two things: image - the composited result ready for a preview or Save Image - and text_mask, a MASK of where the text was drawn. That mask is genuinely useful: feed it to ApplyMaskToAlpha for outlined or partially transparent text effects, or use it in a later compositing step.
Install
Ships in ComfyUI-WBLESS:
cd ComfyUI/custom_nodes
git clone https://github.com/LaoMaoBoss/ComfyUI-WBLESS
restart ComfyUI, or install "ComfyUI-WBLESS" via ComfyUI Manager. No models, no extra Python deps.
Troubleshooting
The usual first failure is connecting a Text Block and seeing nothing render - check that the block actually has text content and that its color isn't the same as your image. If text lands off-canvas, that's position_x/position_y being pushed past the edges or an align/justify combination fighting your offsets. And a tip: because fonts and layout in a custom node pack like this are handled by the block node, if a downloaded workflow references a font you don't have, the text can silently fall back to something ugly - swap the block's font setting before you blame the positioning. For anyone doing batch watermarking or labeled previews, the text_mask output alone is worth the install.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| align | COMBO | 3 options: center, top, bottom | |
| justify | COMBO | 3 options: center, left, right | |
| line_spacing | INT | 0-1024–1024 | — |
| position_x | INT | 0-4096–4096 | — |
| position_y | INT | 0-4096–4096 | — |
| rotation_angle | FLOAT | 0.0-360–360 | — |
| rotation_options | COMBO | 2 options: text center, image center | |
| text_block_1opt | TEXT_BLOCK | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| text_mask | MASK | — |