Text_Image_Zho
Render text to an image — with arc layout — without ever leaving ComfyUI
- color
- outline_color
- image
Diffusion models are famously bad at spelling, so when you need actual legible words in an image - a poster title, a caption, a logo - you stop trying to prompt it and just render the text and composite it on top. Text_Image_Zho is that render step: type a string, get an image of it back, ready to drop onto your generation with the pack's composite nodes. And then there's the party trick: it can draw your text along an arc, which is exactly what people who've watched one too many logo reveal videos want.
It's the flagship text node in ZHO-ZHO-ZHO's ComfyUI-Text_Image-Composite pack. The arc support was merged in from a community contributor (h3clikejava), and honestly it's the pack's most distinctive feature. Pure PIL under the hood - no models, no API keys, runs even on a potato.
How it works
It uses Pillow's text drawing to render your string onto an RGBA canvas (transparent background, so it composites cleanly), then converts to an IMAGE tensor. The selected_font dropdown is populated by scanning your whole ComfyUI directory tree for .ttf, .otf and similar font files - so it picks up the fonts bundled with this pack plus any fonts you've dropped anywhere inside ComfyUI. If wrap is set to 0, it auto-wraps to roughly width / font_size characters per line.
The arc mode (arc_text boolean) changes the whole geometry: your characters get distributed along a circle of arc_radius, starting at arc_start_angle and sweeping to arc_end_angle. Defaults are start 180° to end 360°, which gives you text arcing along the bottom half of the circle - great for badge and seal layouts. Each character is rotated to face the center, with a 10× supersampling pass so curves stay clean. It's the fiddliest part of the node, but it's the reason this one gets shared.
The inputs that matter
text- the string to render.selected_font- font dropdown; includes the pack's bundled fonts (Merienda family, Alkatra, OverlockSC, a couple of comic-style TTFs).font_size,color,outline_size,outline_color- sizing and styling.outline_sizedefaults to 0 (no stroke).align-left,center, orright.width,height, plusmargin_x/margin_yandswap- the canvas.arc_text,arc_radius,arc_start_angle,arc_end_angle- the curved-text controls.
Output is a single IMAGE (transparent where there's no text).
Installing it
Same one-line install as the rest of the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/ZHO-ZHO-ZHO/ComfyUI-Text_Image-Composite
or ComfyUI Manager → search ComfyUI-Text_Image-Composite, then restart. No requirements.txt, no model downloads. It appears under Zho模块组/text.
Common issues
- Fonts not showing up - the dropdown is populated by scanning the ComfyUI tree at runtime; the bundled fonts ship in the pack's
font/folder so they should always be there. If a custom font you installed isn't listed, make sure it's a supported extension somewhere under your ComfyUI directory. - Arc text surprises - the angles are absolute degrees from 0 to 360, and the defaults sweep the bottom arc. If your text renders upside-down or on the wrong side of the circle, flip
arc_start_angle/arc_end_angle(try 0 to 180 for the top). - Text clipped - the canvas is exactly
width×heightand there's no auto-fit; big text with small margins will get cut. Bump the canvas, not the font. wrap= 0 means auto-wrap, not "no wrap." If you genuinely want a single unbroken line, setwraphigh.
The composite side of this pack (ImageComposite_Zho and friends) is where the rendered text actually lands on your image - the two halves are designed to be used together. For legible, stylable text with a genuinely useful curved mode, this is a solid reach-for, and it's the best-documented reason to install the pack at all.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | ZHOZHOZHO | — |
| selected_font | COMBO | 11 options: Alkatra, Merienda-Black, Merienda-Bold, Merienda-ExtraBold, Merienda-Light, Merienda-Medium, +5 | |
| align | COMBO | 3 options: left, center, right | |
| wrap | INT | 00–8096 | — |
| font_size | INT | 121–2500 | — |
| color | COLOR | red | — |
| outline_size | INT | 00–8096 | — |
| outline_color | COLOR | blue | — |
| margin_x | INT | 00–8096 | — |
| margin_y | INT | 00–8096 | — |
| width | INT | 5121–8096 | — |
| height | INT | 5121–8096 | — |
| swap | BOOLEAN | false | — |
| arc_text | BOOLEAN | false | — |
| arc_radius | INT | 1001–2500 | — |
| arc_start_angle | INT | 1800–360 | — |
| arc_end_angle | INT | 3600–360 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |