ImageAddText
Burn text onto an image with a bundled font
- image
- IMAGE
- MASK
- text
ImageAddText renders text directly into an image's pixels - watermarks, captions, labels on a comparison grid, or a stamp of whatever prompt/seed produced the image. It's a genuinely useful, unglamorous utility node: a lot of custom text-overlay nodes make you go find and install a font file yourself, but this one ships its own set of Ubuntu family fonts inside the pack, so it works the moment you install it.
How it works
You give it text and it draws that text onto an image using PIL (Python's imaging library) with the font, size, and color you pick. If you don't connect an image input, it'll generate one from scratch at your specified width×height and draw the text onto that blank canvas - useful for making a standalone text-image asset rather than only annotating an existing render. The text sits inside a bounding box defined by position_x/position_y (its top-left corner) and width/height (how much room it has to wrap into).
The inputs and outputs that matter
- text - multiline, defaults to "Chibi-Nodes." What actually gets drawn.
- font - a dropdown of bundled Ubuntu-family
.ttffiles (Bold, Italic, Light, Medium, Condensed, Mono variants and combinations - 14 in total). No need to source your own font. - font_size - 0 to 200, default 24.
- font_colour - one of five fixed choices: black, white, red, green, blue.
- invert_mask - flips which side of the text counts as "on" in the MASK output.
- position_x / position_y - where the text box's corner sits.
- width / height - the box's dimensions, also the canvas size if you didn't feed an
image. Default 512×512. - image (optional) - connect an existing image to caption it; leave it disconnected to generate a blank canvas instead.
Three outputs: IMAGE with the text drawn in, MASK marking where the text is (useful for feeding an inpaint step that targets just the text region, or for compositing the text separately), and text, a plain passthrough of what you typed - handy if you want to reuse the same string elsewhere in the graph, like a filename.
How to install it
- ComfyUI Manager: search "ComfyUI-Chibi-Nodes", install, restart.
- Manual:
cd ComfyUI/custom_nodes && git clone https://github.com/chibiace/ComfyUI-Chibi-Nodes/, restart.
The fonts come bundled in the repo - nothing extra to download, no requirements.txt beyond what a typical ComfyUI install already has for image handling. It appears under Chibi-Nodes/Image once installed.
Set expectations for the pack generally: the README describes these as "experimental nodes" and jokes that version 2 shipped "with more bugs." For a node doing straightforward PIL text rendering, that's low risk, but it does mean don't expect much configurability beyond what's in the schema - five fixed colors, not a full color picker, for instance.
Common issues
The most common miss is the fixed color list - only black, white, red, green, blue. If you want a specific hex color for a brand watermark, this node can't do it; you'd need to post-process or use a different overlay node. Similarly, only five choices means high-contrast basics are covered but subtle color matching against your image isn't happening here.
Text overflow is the other real trap: if your text is longer than the width/height box can comfortably hold at your chosen font_size, expect clipping or overlap rather than automatic shrink-to-fit - there's no autosizing here. Drop the font size, shorten the text, or widen the box if your caption is getting cut off. And remember width/height double as the canvas size when no image is connected, so if you meant to caption an existing render and got a blank 512×512 square instead, check that your image wire actually landed on the image input.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Chibi-Nodes | — |
| font | COMBO | 13 options: Ubuntu-Bold.ttf, Ubuntu-BoldItalic.ttf, Ubuntu-Italic.ttf, Ubuntu-Light.ttf, Ubuntu-LightItalic.ttf, Ubuntu-Medium.ttf, +7 | |
| font_size | INT | 240–200 | — |
| font_colour | COMBO | 5 options: black, white, red, green, blue | |
| invert_mask | COMBO | 2 options: false, true | |
| position_x | INT | 00–32768 | — |
| position_y | INT | 00–32768 | — |
| width | INT | 5120–32768 | — |
| height | INT | 5120–32768 | — |
| imageopt | IMAGE | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| MASK | MASK | — |
| text | STRING | — |