GR Onomatopoeia
Comic-book sound effects and speech bubbles, stamped onto your image
- image
- IMAGE
- MASK
Exactly what it sounds like: this node stamps comic-book style text onto an image - think "POW", "BOOM", "CRASH" in bold jagged lettering, optionally wrapped in a speech-bubble or burst shape. It's a pure creative-overlay tool, and there's nothing else in this pack that does the same job - if you want that comic-panel or meme-adjacent look without leaving ComfyUI, this is the node.
The author's own note when they first shared it is worth repeating as a heads-up rather than a knock: center alignment works well, left/right placement was still a bit buggy at release. Worth testing your specific layout before you commit to a batch run with alignment set to anything other than center.
How it works
text is what gets rendered - randomize can pick something for you instead if you want variety across a batch rather than typing every word by hand. From there it's almost entirely styling: pick a font from ten bundled DejaVu/Droid/Noto typefaces, set font_size, position it with vertical_alignment/horizontal_alignment/justification, add padding, and give the letters a stroke_thickness and stroke_colour around a fill_colour. The bubble/burst shape around the text is its own layer: bubble and bubble_distance control its size and spacing from the letters, bubble_colour/bubble_fill/bubble_fill_colour control its look, and line_type (straight, curved inwards, curved outwards, splat, drip) plus shape_type (none, star, cloud, lightning, bomb, skull, dots) decide whether you get a plain outline or a full comic burst shape. jagged_points, jagged_min_distance, and jagged_max_distance control how spiky and irregular that outline gets - the difference between a smooth speech bubble and a jagged "BANG!" burst comes entirely from these three. seed and randomize_colours let you get variation across a batch without hand-tuning every parameter each time.
The inputs and outputs that matter
text- the word or phrase to render. Short punchy words are what this node is built for.shape_typeandline_type- together these decide the overall look:none+straightgives you plain outlined text, while abomborstarshape withsplatordriplines gets you a full comic-effect burst.fill_colour,stroke_colour,bubble_colour- the three color slots (30 choices each) that do the most visual work.image- required; this composites onto an existing image rather than generating a standalone graphic.
Two outputs: IMAGE (the composited result) and MASK (covering just the text/bubble region - useful if you want to isolate or re-composite the effect separately later).
How to install it
ComfyUI Manager, search GraftingRayman. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/GraftingRayman/ComfyUI_GraftingRayman
Restart. This pack needs OpenAI's CLIP installed separately or nothing imports - portable: .\python_embeded\python.exe -m pip install git+https://github.com/openai/CLIP.git; system Python: pip install git+https://github.com/openai/CLIP.git.
Common issues & troubleshooting
Pack won't load. Check console at startup for the CLIP import error, run the pip command above.
Text placed left or right looks off. This lines up with the author's own known-issue note - center alignment is the reliable one. If left/right placement looks wrong for you, try center first to confirm the rest of your settings are correct, then troubleshoot alignment specifically.
Bubble shape looks like noise instead of a clean burst. jagged_points set too high relative to your bubble size, or jagged_min_distance/jagged_max_distance too close together, produces a spikier, messier outline than intended. Bring the point count down or widen the distance range for a cleaner shape.
Text is unreadable against the background. Increase stroke_thickness and pick a stroke_colour that contrasts with both the fill_colour and the underlying image - the stroke is what keeps the lettering legible over busy backgrounds.
Inputs (27)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Hello | — |
| randomize | BOOLEAN | false | — |
| font | COMBO | /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf | 10 options: /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf, /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf, /usr/share/fonts/truetype/dejavu/DejaVuSansMono-Bold.ttf, /usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf, /usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf, /usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf, +4 |
| font_size | INT | 1001–256 | — |
| vertical_alignment | COMBO | middle | 3 options: top, middle, bottom |
| horizontal_alignment | COMBO | center | 3 options: left, center, right |
| justification | COMBO | left | 3 options: left, center, right |
| padding | INT | 00–128 | — |
| stroke_thickness | INT | 50–10 | — |
| stroke_colour | COMBO | red | 30 options: amethyst, black, blue, cyan, diamond, emerald, +24 |
| fill_colour | COMBO | purple | 30 options: amethyst, black, blue, cyan, diamond, emerald, +24 |
| bubble | INT | 50–50 | — |
| bubble_distance | INT | 1000–500 | — |
| bubble_colour | COMBO | maroon | 30 options: amethyst, black, blue, cyan, diamond, emerald, +24 |
| bubble_stroke_thickness | INT | 100–20 | — |
| bubble_fill | BOOLEAN | true | — |
| bubble_fill_colour | COMBO | white | 30 options: amethyst, black, blue, cyan, diamond, emerald, +24 |
| line_type | COMBO | straight | 5 options: straight, curved inwards, curved outwards, splat, drip |
| jagged_points | INT | 453–100 | — |
| jagged_min_distance | INT | 500–500 | — |
| jagged_max_distance | INT | 1000–500 | — |
| shape_type | COMBO | none | 7 options: none, star, cloud, lightning, bomb, skull, +1 |
| seed | INT | 446598648361665100000000000000–999999999999999 | — |
| vertical_randomness | INT | 100–100 | — |
| letter_spacing | INT | 00–100 | — |
| randomize_colours | BOOLEAN | true | — |
| image | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| MASK | MASK | — |