Nodes/ComfyUI_LC123_nodes/LC Text Overlay
ComfyUI Node

LC Text Overlay

LC Text Overlay — burn real text onto an image without leaving ComfyUI

By lonecatone23·Created 2 months ago·Updated about 13 hours ago· 19
LC Text Overlay
  • image
  • image
textHello
fontArial
font_size64
color_r255
color_g255
color_b255
x_percent50.0
y_percent92.0
alignmentcenter

LC Text Overlay draws actual text onto an image, in the graph, before you save - so your captions, credits, and "RAW photo" watermarks are baked into the pixels instead of pasted on later in Photoshop. It's the ComfyUI-native answer to "I want words on this image," and it's more capable than a first glance suggests: multiline, wrap-aware, draggable on the preview, and it updates live as you fiddle.

The context that makes this useful: you're already in a pipeline where the text is often data. A filename, a prompt segment, a batch label - wire it in, and every image in the batch gets its own caption baked at save time. That's the thing you can't do by hand-editing after the fact. It also pairs with the pack's save/text nodes so your overlay text and your output filename can come from the same source.

How it works

Under the hood it's PIL's ImageDraw with a curated font list - no models, no downloads, deterministic pixel math. You feed an image and a multiline text box; the text wraps at the image edges with a small margin (so you don't get text spilling off-screen), and the whole block is drawn in one go. The controls that matter:

  • text - what to draw. Multiline is supported, and the node even accepts a list of strings (from a Join/Strings node) and joins them with newlines. Handy.
  • font - 24 curated families (Arial, Times, Georgia, Verdana, Tahoma, Trebuchet, Comic Sans, and more), each with real font-file paths plus a CSS fallback name for the live preview. Font changes apply on queue; the preview approximates with the CSS name.
  • font_size (1–512, default 64) - text height in pixels.
  • color_r/g/b (0–255, default white) - the draw color.
  • x_percent / y_percent (0–100) - position. Drag on the preview to place it; the widgets follow, and vice versa. y_percent is the top of the text block, default 92 = near the bottom.
  • alignment - left / center / right. The legacy *-top/center/bottom anchor values from older workflows still load and map onto the three real alignments.

One image in, one image out. It's an output node, so it can sit at the end of the chain feeding your Save Image directly.

Where people get burned

The live preview is good but it's a simulation - the actual render resolves fonts on queue. If what you see doesn't quite match what you get, it's almost always a font-family mismatch: the pack ships without bundled font files, so it falls back to whatever arial.ttf-style file exists on your system (or DejaVu/Liberation on Linux). The curated list is chosen so the fallback is close, but it won't be identical on every OS.

Text at tiny font sizes on a big image is a common first-run disappointment - 64px is large on a 1024 image, small on a 4K one. Size is in pixels, not percent, so it doesn't scale with your canvas. Set it per-output-size and don't expect one value to survive a resize.

Install

Part of lonecatone23's ComfyUI_LC123_nodes pack:

  • ComfyUI Manager - search "LC123" or "ComfyUI_LC123_nodes", install, restart.
  • Manual - cd ComfyUI/custom_nodes && git clone https://github.com/lonecatone23/ComfyUI_LC123_nodes, restart.

No pip packages, no models. Pure PIL over ComfyUI's environment. (Also worth knowing: the pack includes LC Watermark for image watermarks and LC Apply LUT for color-grade .cube files - the "put stuff on top of the frame" family lives together here.)

The honest verdict

For in-graph text this is a genuine convenience - drag-to-place, live position, batch-capable. If you only ever caption one image at a time, any image editor does it faster. The moment you're rendering a batch with per-image labels, this is the only sane way to do it. Just remember the pixel-based font size and the fallback-font caveat and you're fine.

CategoryLC123/image

Inputs (10)

NameTypeDefaultDescription
imageIMAGE
textSTRINGHelloText to draw (wraps at edges with a small margin)
fontCOMBOArialFont family (curated list — changes apply on queue; live preview uses matching CSS name)
font_sizeINT641–512Font size in pixels
color_rINT2550–255Red
color_gINT2550–255Green
color_bINT2550–255Blue
x_percentFLOAT50.00–100X position (% from left). Drag on preview or use the widget.
y_percentFLOAT92.00–100Y of the top of the text block (% from top). Default near bottom. Drag or use the widget.
alignmentCOMBOcenterHorizontal alignment: left / center / right. Legacy *-top/center/bottom values still load and map to left/center/right.

Outputs (1)

NameTypeDescription
imageIMAGE