Nodes/ComfyUI-Text-On-Image/💀Text On Image
ComfyUI Node

💀Text On Image

Put real, readable text on your image — no diffusion pass required

By S4MUEL-404·Created about a year ago·Updated about a year ago· 7
💀Text On Image
  • image
  • IMAGE
â—„textâ–º
â—„x0â–º
â—„y0â–º
â—„font_size12â–º
â—„text_color#ffffffâ–º
â—„text_opacity1.00â–º
â—„use_gradientfalseâ–º
â—„start_color#ff0000â–º
â—„end_color#0000ffâ–º
â—„angle0â–º
â—„stroke_width0â–º
â—„stroke_color#000000â–º
â—„stroke_opacity1.00â–º
â—„shadow_x0â–º
â—„shadow_y0â–º
â—„shadow_color#000000â–º
â—„shadow_opacity1.00â–º
â—„font_fileen-Montserrat-Medium.ttfâ–º

TextOnImage draws a string onto an image, right there in your graph. No model, no seed, no API key, nothing generated. You wire in an image, type a caption, and out comes the same image with text painted on it. It's a post-processing step - the thing you slot between VAE Decode and Save Image when you want a watermark, a timestamp, a label, or a joke caption baked into the output.

The first thing to understand is why this node exists. Diffusion models are famously terrible at writing text: prompt "a sign that says COFFEE" and you get soup. The reliable workaround has always been to draw the text yourself after generation, and this is the smallest possible version of that. WAS Node Suite bundles a text-overlay node too, but if you just need one caption and don't want a dependency the size of a small country, a single-purpose pack like this wins.

Mechanically it's the classic Python text-rendering dance: it loads one of its bundled fonts, paints your string at an x/y position with color, opacity, and the polish controls (stroke outline, drop shadow, optional gradient fill), and hands back the same-size image tensor. The genuinely nice detail is the font list - twelve bundled fonts including zhs-/zht- CJK faces like Microsoft YaHei and MS JhengHei. Most font nodes ship Latin-only and render Chinese as tofu boxes; this one works out of the box. That "multi-language ready" framing is the pack's real selling point.

The inputs that actually matter

There are nineteen inputs, but almost all have sensible defaults. The ones you'll touch:

  • text (multiline) - the caption itself. Newlines work.
  • image - from VAE Decode or Load Image.
  • x / y - position. Defaults to 0,0, which is the top-left corner.
  • font_size - and here's the trap: the default is 12. That's a whisper. Crank it to 48+ before you judge anything.
  • text_color - a hex string like #ffffff. Which is white, the default. On a light image the text is invisible and you'll think the node is broken. It isn't.

The rest is polish: text_opacity (0–1), stroke_width/stroke_color/stroke_opacity for an outline, shadow_x/shadow_y/shadow_color/shadow_opacity for a drop shadow, and use_gradient with start_color/end_color/angle for a gradient fill (the defaults are a loud red→blue). All of those default to off, which is the right call.

Output: one IMAGE, same dimensions as the input. Wire it straight to Save Image, Preview, or anything else downstream that eats images.

Install

ComfyUI Manager is the easy path: open Manager → Install Custom Nodes → search "Text On Image" (the pack title is ComfyUI-Text-On-Image). Or clone it manually:

cd ComfyUI/custom_nodes
git clone https://github.com/S4MUEL-404/ComfyUI-Text-On-Image

Then restart ComfyUI. There are no model downloads and no heavy pip dependencies in the README - the fonts ship inside the repo, so it's genuinely lightweight. It's the rare custom node that doesn't drag a Torch version conflict into your environment.

Troubleshooting and gotchas

  • The repo currently 404s on GitHub. As of writing, S4MUEL-404/ComfyUI-Text-On-Image returns a 404 - it's been made private or removed, even though comfy.icu still indexes it and it sits at seven stars. If the clone fails or Manager can't find it, there's a live sibling: albergrs90/ComfyUI-TextOnImage, which exports the same node class with the same feature set and its own bundled English + Chinese fonts. It's the same idea, still maintained.
  • Don't install both. Because that sibling exports the identical TextOnImage class name, having both packs installed makes ComfyUI choke on a duplicate node definition. Pick one.
  • White-on-white. With the default #ffffff on the default top-left position, a light background means nothing visible. Change text_color first, position second.
  • Hex strings only. Colors are #rrggbb format - type red and nothing sensible happens.
  • It's raster, not smart. The text is composited after the model finished, so it won't warp with the image or survive a second generation pass. That's the whole point, but don't expect it to reflow or kern.

For a one-liner utility this is honestly fine - it does one job, ships the fonts you actually need, and stays out of the way. Just remember it's a paintbrush, not a designer.

Category💀Text On Image

Inputs (19)

NameTypeDefaultDescription
textSTRING—
imageIMAGE—
xINT00–4096—
yINT00–4096—
font_sizeINT120–320—
text_colorSTRING#ffffff—
text_opacityFLOAT1.000–1—
use_gradientBOOLEANfalse—
start_colorSTRING#ff0000—
end_colorSTRING#0000ff—
angleINT0-180–180—
stroke_widthINT00–100—
stroke_colorSTRING#000000—
stroke_opacityFLOAT1.000–1—
shadow_xINT0-100–100—
shadow_yINT0-100–100—
shadow_colorSTRING#000000—
shadow_opacityFLOAT1.000–1—
font_fileCOMBOen-Montserrat-Medium.ttf12 options: en-Montserrat-Medium.ttf, zht-msjh.ttc, en-LOL.ttf, en-AllRoundItalic.ttf, en-Montserrat-Black.ttf, zhs-msyh.ttc, +6

Outputs (1)

NameTypeDescription
IMAGEIMAGE—