π€οΈ CR Composite Text
Render text over an image with full placement control
- image_text
- image_background
- IMAGE
- show_help
Getting text onto a generated image usually means exporting to an editor. This node keeps it in the graph. You give it your text, a font, and two image layers, and it renders the text and composites it into the image - with real controls for position, rotation, alignment, and spacing. Out comes a finished IMAGE.
It's from Comfyroll Studio (Suzie1 / RockOfFire), in the Graphics β Text group with Draw Text and Overlay Text. It's a Pillow-based text renderer, so no model or diffusion is involved - it's fast and deterministic, which is exactly what you want for titles and captions.
How it works
The node draws your text in the chosen font and composites it across two image inputs - image_text and image_background. In practice this lets the text sit against a background rather than floating on transparency, so you hand it the layers and it returns the combined result.
The font comes from a bundled dropdown of ten typefaces - Roboto, Quicksand, Oswald, comic.ttf, impact.ttf, a pixel font, a handwriting font (Caveat), an Arabic font, and more. These ship inside the pack, in its fonts folder, which is why they "just work" with no system-font setup.
From there it's a proper little typesetting panel: font_size, align (center/top/bottom) and justify (center/left/right) for placement within the frame, margins and line_spacing for breathing room (both accept negatives to tighten things up), position_x / position_y to nudge the text anywhere on the canvas, and rotation_angle with rotation_options to spin it around either the text's own center or the image center.
The inputs that matter
text- the multiline string to render.font_name- one of ten bundled fonts.impact.ttffor memes,comic.ttffor the obvious, Roboto/Oswald for clean titles.font_size(1β1024, default 50) - the size you'll actually tune to fit.position_x/position_y- offset the text across the canvas.rotation_angle(β360 to 360) +rotation_options(rotate around text center or image center) - angled text.
Output is a single IMAGE (plus the show_help wiki link you don't wire).
Where you'd actually reach for it
Thumbnails, title cards, meme captions, watermarks, quote graphics - anything where generated art needs words on it. Because the fonts ship with the node, results are reproducible across machines, and because it's all wires, you can drive the text from an upstream string (a prompt, a filename, a scheduled value) instead of typing it each time. For memes specifically the pack also has a Simple Meme Template; Composite Text is the flexible, place-it-anywhere option.
How to install it
- ComfyUI Manager: search
Comfyroll Studio, install, restart. - Manual:
cd ComfyUI/custom_nodes && git clone https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes.git, then restart.
The fonts come bundled with the pack - no separate download.
Common issues
The big one is the pack failing to load, not the text rendering. On newer ComfyUI builds Comfyroll's Graphics module can throw at startup - Comfyroll Studio: Failed to load Graphics nodes, then a cascade of NameError: name 'CR_...' is not defined, and none of the CR nodes appear. This is a real, reported failure and the Graphics text nodes are right in the blast radius. Read the first console error (that's the true cause, often an import/dependency hiccup) and update the pack via Manager.
Per-node: if your text runs off the frame, that's font_size too big or position_x/position_y pushing it out - the position values go well past the canvas on purpose, so it's easy to shove text into the void. And multiline text that overlaps itself usually just needs a nudge to line_spacing.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| image_text | IMAGE | β | |
| image_background | IMAGE | β | |
| text | STRING | text | β |
| font_name | COMBO | 10 options: Roboto-Regular.ttf, Quicksand-Bold.ttf, Oswald-Bold.ttf, comic.ttf, AlumniSansCollegiateOne-Regular.ttf, NotoSansArabic-Regular.ttf, +4 | |
| font_size | INT | 501β1024 | β |
| align | COMBO | 3 options: center, top, bottom | |
| justify | COMBO | 3 options: center, left, right | |
| margins | INT | 0-1024β1024 | β |
| line_spacing | INT | 0-1024β1024 | β |
| position_x | INT | 0-4096β4096 | β |
| position_y | INT | 0-4096β4096 | β |
| rotation_angle | FLOAT | 0.0-360β360 | β |
| rotation_options | COMBO | 2 options: text center, image center |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | β |
| show_help | STRING | β |