Meme Maker - fonts autoread in inputs folder
Impact text on your gens without leaving the graph
- image_input
- IMAGE
- MASK
MemeMaker is the "slap a caption on it" node: you feed it an image and a line of text, and it hands back the same image with bold, outlined, all-caps meme text baked in - ready to wire into a Save Image or Preview Image node. It's one tiny node from Smuzzies, the same author behind the chatbox overlay node, and it exists because the whole captioning step is normally WAS Node Suite territory (a huge toolkit you install for dozens of things just to put words on a picture). This does that one job, nothing else, no model downloads, no API keys. If your workflow ends with "now let me open this in an editor and add text," this is the shortcut that kills that detour.
How it works
Under the hood it's plain PIL: the node loads your chosen .ttf or .otf font, uppercases the text for you (classic meme etiquette), wraps it, and stamps it with a black outline, then alpha-composites the whole text layer over your image. The outline isn't a stroke - it's the text drawn eight times offset by one pixel in every direction, then the fill on top. Crude, but it's exactly how the Impact look works and it costs nothing.
The clever bit is the auto-fit. Text starts at max_font_size, gets wrapped to fit the available width, and if it's still too tall for the meme_height band, the font shrinks one pixel at a time until it fits. So those two inputs aren't "the font size" - they're a ceiling and a box the text must fit inside.
The inputs that matter
Most of these you can leave alone, but five are worth knowing:
- meme_text - your caption. Multiline is supported, and it's forced to uppercase regardless of how you type it.
- font - a dropdown populated automatically from every
.ttf/.otffile in your ComfyUIinputfolder. That's the whole font system: drop files in, they appear. - max_font_size (default 128) and meme_height (default 128) - the size ceiling and the vertical space the text may fill. People get burned thinking
meme_heightis the output image height. It isn't. It's the caption band. Crank it and the text gets bigger. - font_color / outline_color - raw hex strings like
#FFFFFF, not a color picker. PIL also accepts plain color names if you'd rather typewhite.
The rest - outline_width (2 is the classic look), the four padding_* margins, and horizontal_align/vertical_align (default center/bottom, i.e. a bottom caption; you do the top half of a meme by sending a second node with vertical_align: top) - are all straightforward once you see them.
Outputs
It returns IMAGE (the composited result, wire this into Save/Preview) and MASK - the alpha channel of just the text, if you want to use the caption as a cutout or composite it elsewhere.
Install and gotchas
Install via ComfyUI Manager (search "Meme Maker") or:
cd ComfyUI/custom_nodes
git clone https://github.com/Smuzzies/comfyui_meme_maker.git
# restart ComfyUI
Dependencies are just torch, torchvision and Pillow - all already in ComfyUI, so there's nothing heavy to pull. The one thing the README makes you do is add fonts: grab Impact (the classic meme font; the README links a download), unzip, and drop the .otf/.ttf files into ComfyUI/input.
Where people actually trip:
- An empty font dropdown means there are no
.ttf/.otffiles in your input folder. And because the list is built when the node loads, fonts added after startup need a ComfyUI restart before they show up. image_inputis marked optional but isn't. The schema lists it as optional; the code throwsValueError: image_input is requiredif you leave it unconnected. Just always wire an image.- Line height is hardcoded from each line's bounding box. Multi-line captions in tall or tightly-spaced fonts can overlap - a known sore spot across this whole family of text-overlay nodes, and there's no line-spacing input here. Keep captions short or pick a clean font.
It won't make your memes funnier. It just makes getting them off your workflow and onto the image a two-second step.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| meme_text | STRING | Your Meme Text Here | — |
| font | COMBO | 0 options: | |
| max_font_size | INT | 1281–9999 | — |
| font_color | STRING | #FFFFFF | — |
| outline_color | STRING | #000000 | — |
| outline_width | INT | 20–10 | — |
| horizontal_align | COMBO | center | 3 options: left, center, right |
| vertical_align | COMBO | bottom | 3 options: top, center, bottom |
| padding_left | INT | 200–9999 | — |
| padding_right | INT | 200–9999 | — |
| padding_top | INT | 200–9999 | — |
| padding_bottom | INT | 200–9999 | — |
| meme_height | INT | 1281–9999 | — |
| image_inputopt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| MASK | MASK | — |