🐳图文拼接V2
The contact sheet node where every image gets its own caption
- image_1
- image_2
- image_3
- image_4
- image_5
- image_6
- image_7
- image_8
- image_9
- image_10
- image
The original 图文拼接 gives you one caption for the whole sheet. This one, 🐳图文拼接V2 (Image Text Pair Composite), is the version where every image carries its own label - which is the thing you actually want for half the use cases. Prompt A vs prompt B. Three models, same seed, each thumbnail named. A dataset preview where each row says what it is. That's exactly what this node was built for.
Mechanically it's the same family as its older sibling: pick a layout, unify sizes, render text. The difference is that instead of images plus a shared caption, you wire pairs - image_1 with text_1, image_2 with text_2, and so on up to ten pairs.
How it works
Set num_pairs to how many image+text pairs you're using, wire the image_N and text_N slots, and the node builds each pair's image, stamps its text on a padding band, then arranges all the pairs in your chosen layout:
layout- horizontal, vertical, or grid.uniform_size+uniform_mode- unify image heights first (max, min, first, or average), preserving aspect ratio.text_position- where each pair's caption sits: top, bottom, left, right, or center.gap- the spacing between pairs, which is the new knob this node adds over the original. On a grid of labeled tiles, that's the difference between "sheet" and "mess."text_margin,text_padding,font_name,font_size,font_color,bg_color,text_area_border,border_color- the same styling set as the V1 node.
Output is a single image - the fully-labeled composite, ready for Save Image or a preview.
The inputs that matter
num_pairs- set it before wiring; it controls whichimage_N/text_Nslots are read.gap- the spacing between pairs; tune it first when a grid looks cramped.font_size- 8 to 200, default 20. Labels at 20px look fine on a two-up comparison and tiny on a 10-pair grid.font_name- the dropdown reads from the pack'stypyfont folder (custom_nodes/comfy_Pond_Nodes/nodes/typy). Drop a.ttfthere and restart to add fonts. For Chinese/Japanese captions, pick the bundled AlibabaPuHuiTi or you'll get tofu boxes.
A practical gotcha: an empty text_N isn't an error - the pair still composites, just with a blank caption band. So if you've wired nine pairs and the tenth keeps showing up uncaptioned, you forgot its text slot, not the images.
Install
Same pack, same drill:
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 installing. This node only needs Pillow and numpy, so don't feel obliged to satisfy the whole requirements.txt. And the pack's standing warning applies: a documented console-spam conflict with comfyui_HiDream-Sampler is the first thing to suspect if your terminal goes noisy.
Inputs (34)
| Name | Type | Default | Description |
|---|---|---|---|
| num_pairs | INT | 21–10 | — |
| 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 | 100–100 | — |
| text_padding | INT | 3010–200 | — |
| font_name | COMBO | default | 2 options: default, AlibabaPuHuiTi-2-65-Medium.ttf |
| font_size | INT | 208–200 | — |
| font_color | STRING | #000000 | — |
| bg_color | STRING | #FFFFFF | — |
| gap | INT | 100–100 | — |
| text_area_border | INT | 00–50 | — |
| border_color | STRING | #000000 | — |
| image_1opt | IMAGE | — | |
| text_1opt | STRING | — | |
| image_2opt | IMAGE | — | |
| text_2opt | STRING | — | |
| image_3opt | IMAGE | — | |
| text_3opt | STRING | — | |
| image_4opt | IMAGE | — | |
| text_4opt | STRING | — | |
| image_5opt | IMAGE | — | |
| text_5opt | STRING | — | |
| image_6opt | IMAGE | — | |
| text_6opt | STRING | — | |
| image_7opt | IMAGE | — | |
| text_7opt | STRING | — | |
| image_8opt | IMAGE | — | |
| text_8opt | STRING | — | |
| image_9opt | IMAGE | — | |
| text_9opt | STRING | — | |
| image_10opt | IMAGE | — | |
| text_10opt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |