Text Image with FX
Render text onto an image with glow and shadow, watermark-style
- background_image
- image
- mask
Burning text onto an image in ComfyUI is normally an exercise in pain - you fight font loading, you fight positioning, you give up on glow. Text Image with FX is the node that does it properly: it renders a text string with optional outer glow and drop shadow, then anchors it to any corner or edge of your image for watermark and copyright placement. You get both a composited image and a mask output, so the text layer stays a separate element you can use however you like.
The positioning model is the part to understand before anything else. position is an anchor - bottom_right, top_left, and the rest - and margin_x/margin_y are the offsets from that anchor's edges. So a copyright mark is: pick bottom_right, set margins, done. No manual coordinate math, and it stays glued to that corner regardless of image size. That anchor-based flow is genuinely nicer than most generic text renderers, and it's exactly what a watermark workflow wants.
How it works
The essentials:
text- what to render (defaults to "© Eclipse", which tells you what the author was thinking).font_file- picked fromComfyUI/models/fonts/(the pack copies bundled fonts there on first run - Allura-Regular, Roboto, Oswald, and friends). Drop your own.ttfin that folder and it appears in the dropdown.font_size,text_scale,char_per_line,leading- sizing and wrapping.text_scaleis a percentage offont_size, so it's a quick nudge without retyping a point size.text_color,stroke_width/stroke_color- fill and outline, hex values.position,margin_x/margin_y- the anchoring.opacity- overall transparency of the composited text.enable_glow+glow_intensity/glow_range/glow_blur/glow_inner_color/glow_outer_color- an outer glow with inner and outer colors, so you get that neon gradient edge. The intensity is "buildup iterations," which is just a way of saying more iterations = denser glow.enable_shadow+shadow_offset_x/shadow_offset_y/shadow_grow/shadow_blur/shadow_color/shadow_opacity- the drop shadow.
Outputs are image (the composited result) and mask (the text layer as a mask), so you can composite manually, blur the background, or re-position downstream.
Where it fits
Watermarks and copyright marks are the headline use - the anchor system is built for them. But it's also fine for titling, date-stamping, or any "put readable text on this image" need that would otherwise drag in a full graphics stack. The mask output is the sleeper feature: it means the text region is first-class data you can mask with.
Installing it
Part of ComfyUI_Eclipse:
git clone https://github.com/r-vage/ComfyUI_Eclipse custom_nodes/ComfyUI_Eclipse
Or ComfyUI Manager → search "ComfyUI_Eclipse" → install and restart. It needs the bundled fonts copied into models/fonts/ (automatic on first run) and Pillow, which ComfyUI already ships.
Gotchas
Two things catch people. First, fonts: if the dropdown is empty, the models/fonts/ directory didn't get populated - restart once and check the folder; any .ttf you add there shows up next time. Second, glow and shadow are off by default - a "why is my text flat" moment is usually a missed enable_glow toggle, not a bug. And a hex color that looks wrong is worth checking against the color picker the frontend adds for these fields. Old RvTools-era workflows predating v4.0.0 need the migration tool.
Inputs (28)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | © Eclipse | Text to render. |
| font_file | COMBO | Allura-Regular.ttf | Font file from ComfyUI/models/fonts/ directory. |
| font_size | INT | 481–2500 | Font size in pixels (base size before scaling). |
| text_scale | INT | 1001–500 | Scale the text as a percentage of font_size. 100% = original size. |
| text_color | STRING | #ffffff | Text fill color (hex). |
| text_align | COMBO | left | Horizontal alignment of multi-line text within the text block. |
| char_per_line | INT | 801–8096 | Maximum characters per line before wrapping. |
| leading | INT | 40–500 | Extra vertical spacing between lines. |
| stroke_width | INT | 00–100 | Text outline (stroke) width. 0 = no stroke. |
| stroke_color | STRING | #000000 | Text outline (stroke) color (hex). |
| opacity | INT | 1000–100 | Overall opacity of the composited text. 100 = fully visible, 0 = invisible. |
| position | COMBO | bottom_right | Anchor position of the text block on the canvas. |
| margin_x | INT | 200–4000 | Horizontal margin from the anchor edge. |
| margin_y | INT | 100–4000 | Vertical margin from the anchor edge. |
| enable_glow | BOOLEAN | false | Enable outer glow effect around the text. |
| glow_intensity | INT | 52–20 | Glow buildup iterations (more = denser glow). |
| glow_range | INT | 251–500 | Maximum glow expansion distance in pixels. |
| glow_blur | INT | 150–500 | Blur radius applied to each glow step. |
| glow_inner_color | STRING | #2ec0ff | Glow color near the text (inner, hex). |
| glow_outer_color | STRING | #006eff | Glow color at the edge (outer, hex). |
| enable_shadow | BOOLEAN | false | Enable drop shadow effect behind the text. |
| shadow_offset_x | INT | 5-500–500 | Shadow horizontal offset in pixels. |
| shadow_offset_y | INT | 5-500–500 | Shadow vertical offset in pixels. |
| shadow_grow | INT | 60–200 | Shadow expansion beyond text outline. |
| shadow_blur | INT | 180–200 | Shadow blur radius. |
| shadow_color | STRING | #000000 | Shadow color (hex). |
| shadow_opacity | INT | 500–100 | Shadow opacity percentage. |
| background_imageopt | IMAGE | Optional background image. Canvas auto-sizes to text when omitted. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |