Nodes/comfy_Pond_Nodes/🐳图文拼接
ComfyUI Node

🐳图文拼接

Stitch images and caption them in one node — even in Chinese

By Pondowner857·Created about a year ago·Updated 21 days ago· 45
🐳图文拼接
  • image_1
  • image_2
  • image_3
  • image_4
  • image_5
  • image_6
  • image_7
  • image_8
  • image_9
  • image_10
  • image
num_images2
num_texts1
layouthorizontal
uniform_sizetrue
uniform_modemax
text_positionbottom
text_margin20
text_padding40
font_namedefault
font_size24
font_color#000000
bg_color#FFFFFF
text_area_border0
border_color#000000
text_1
text_2
text_3
text_4
text_5

Text on images is one of those things ComfyUI just... doesn't do out of the box. You'd think it would. This node, 🐳图文拼接 (Image Text Composite), is the fix: it stitches up to ten images into one contact sheet and draws a caption on it, in one go. Grid of model outputs with a label on top, side-by-side comparison with a title, a "results" sheet for your batch run - that's its whole lane, and it does it without you ever touching a font file or a coordinate.

It's also one of the few nodes in the English-speaking wild that renders Chinese text out of the box, because the pack ships a CJK font (AlibabaPuHuiTi) alongside the default.

How it works

You set num_images (how many image inputs to use) and num_texts (how many text lines to combine), wire the optional image_1image_10 and text_1text_5 slots, and the node does a small pipeline: unify the image sizes, lay them out, then render the text onto a padding band.

The layout is where you choose the shape of your sheet:

  • layout - horizontal, vertical, or grid.
  • uniform_size + uniform_mode - whether to force the images to a common height first, and how to pick it (max, min, first, average). Heights unify while aspect ratios are preserved, so a sheet of mixed 16:9 and 1:1 images still lines up.
  • text_position - top, bottom, left, right, or center overlay.
  • text_margin, text_padding - how much breathing room around the text area.

The styling knobs are font_name (default or the bundled AlibabaPuHuiTi), font_size (8–200), font_color and bg_color as hex strings, plus text_area_border and border_color if you want the caption band framed.

The output is a single image ready to drop into Save Image, a preview, or a final stitch.

The inputs that matter most

  • num_images / num_texts - set these before wiring slots; text_1..N get joined with newlines into one combined caption (so a multi-line title is just "text_1 + text_2").
  • layout + uniform_mode - the two controls that decide whether your sheet looks intentional or like a pile of mismatched frames.
  • font_size - the one you'll re-tune constantly; 24 is the default and it's small on a big sheet.

Where people get tripped up: font_name only offers what's inside the pack's typy font folder (custom_nodes/comfy_Pond_Nodes/nodes/typy). Drop a .ttf in there, restart, and it shows up in the dropdown. If you're captioning Chinese or Japanese and the characters render as boxes, you picked the default Latin font instead of the bundled CJK one.

Install

One pack, one install:

ComfyUI Manager → search "Pond Nodes" (comfy_Pond_Nodes)

or:

cd ComfyUI/custom_nodes
git clone https://github.com/Pondowner857/comfy_Pond_Nodes
cd comfy_Pond_Nodes
pip install -r requirements.txt

Restart after. Pillow and numpy cover it. And the pack's usual asterisk: the README documents a console-spam conflict with comfyui_HiDream-Sampler - worth remembering if your logs get chatty.

Category🐳Pond/Image

Inputs (29)

NameTypeDefaultDescription
num_imagesINT21–10
num_textsINT11–5
layoutCOMBOhorizontal3 options: horizontal, vertical, grid
uniform_sizeBOOLEANtrue
uniform_modeCOMBOmax4 options: max, min, first, average
text_positionCOMBObottom5 options: top, bottom, left, right, center
text_marginINT200–200
text_paddingINT4010–300
font_nameCOMBOdefault2 options: default, AlibabaPuHuiTi-2-65-Medium.ttf
font_sizeINT248–200
font_colorSTRING#000000
bg_colorSTRING#FFFFFF
text_area_borderINT00–50
border_colorSTRING#000000
image_1optIMAGE
image_2optIMAGE
image_3optIMAGE
image_4optIMAGE
image_5optIMAGE
image_6optIMAGE
image_7optIMAGE
image_8optIMAGE
image_9optIMAGE
image_10optIMAGE
text_1optSTRING
text_2optSTRING
text_3optSTRING
text_4optSTRING
text_5optSTRING

Outputs (1)

NameTypeDescription
imageIMAGE