🐳图文拼接
Stitch images and caption them in one node — even in Chinese
- image_1
- image_2
- image_3
- image_4
- image_5
- image_6
- image_7
- image_8
- image_9
- image_10
- image
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_1–image_10 and text_1–text_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.
Inputs (29)
| Name | Type | Default | Description |
|---|---|---|---|
| num_images | INT | 21–10 | — |
| num_texts | INT | 11–5 | — |
| layout | COMBO | horizontal | 3 options: horizontal, vertical, grid |
| uniform_size | BOOLEAN | true | — |
| uniform_mode | COMBO | max | 4 options: max, min, first, average |
| text_position | COMBO | bottom | 5 options: top, bottom, left, right, center |
| text_margin | INT | 200–200 | — |
| text_padding | INT | 4010–300 | — |
| font_name | COMBO | default | 2 options: default, AlibabaPuHuiTi-2-65-Medium.ttf |
| font_size | INT | 248–200 | — |
| font_color | STRING | #000000 | — |
| bg_color | STRING | #FFFFFF | — |
| text_area_border | INT | 00–50 | — |
| border_color | STRING | #000000 | — |
| image_1opt | IMAGE | — | |
| image_2opt | IMAGE | — | |
| image_3opt | IMAGE | — | |
| image_4opt | IMAGE | — | |
| image_5opt | IMAGE | — | |
| image_6opt | IMAGE | — | |
| image_7opt | IMAGE | — | |
| image_8opt | IMAGE | — | |
| image_9opt | IMAGE | — | |
| image_10opt | IMAGE | — | |
| text_1opt | STRING | — | |
| text_2opt | STRING | — | |
| text_3opt | STRING | — | |
| text_4opt | STRING | — | |
| text_5opt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |