Load Image (Labeled)
Label your reference photos before they vanish into a grid
- image
Multi-reference workflows have a dirty secret: by the time you've squashed four or five reference photos into a contact sheet, you can't tell the front view from the back view, and neither can your model. The whole point of feeding multiple references - keeping a character's identity consistent across a video or a character sheet - falls apart when the references themselves are ambiguous.
Load Image (Labeled) is a standard ComfyUI image loader with one difference: it bakes a caption bar into the image itself. Give it "Front View" or "Character A" and it draws that text into extra space at the top or bottom - the photo is never cropped or resized. A bold arrow in the bar points back at the photo so the label and the subject can't be confused. The caption survives everything downstream, because it's literally part of the pixels.
How it works
Under the hood it's a normal image load - same input folder picker as ComfyUI's built-in Load Image, EXIF-transposed, converted to RGB - followed by a PIL composite that appends the label bar and arrow. Text auto-shrinks to fit the bar, then truncates with an ellipsis rather than overflowing. The node's Preview button renders the exact final composite before you ever hit Queue, so there's no guessing how the bar will look.
The inputs that matter
text- the caption. Keep it short; it auto-shrinks, then gets truncated.text_position-toporbottom. Top is the default and usually reads better.show_label/show_arrow- independent toggles. Want the arrow but no text? Easy. Neither? Then it's just a tinted border, so turn both off deliberately.background_color/text_color- hex codes, rendered as color-swatch widgets rather than raw text boxes. Black/white is the sane default.border_width- optional inset border drawn in the background color around the whole result.0= no border.
Output: image - a single IMAGE, now taller (or wider) than the source photo by the label bar.
Where you'd use it
Wire it into this pack's Reference Grid or Reference Concat and every cell in your contact sheet arrives already captioned. For video reference-to-video work - Wan I2V and the R2V family love a first frame that unambiguously shows what the subject should look like - labeled refs make it obvious which photo is which when you're inspecting a composited first frame.
Installing it
This node ships in the MoonPack pack (comfyui-moonpack). Via ComfyUI Manager, search MoonPack and install; or:
cd ComfyUI/custom_nodes
git clone https://github.com/moonwhaler/comfyui-moonpack.git
Then restart ComfyUI. No models to download - the pack's only dependencies are what ComfyUI itself already ships.
The gotcha to remember
The label bar adds pixels, so your output resolution is now bigger than the source. In a strict grid that extra band counts toward the cell size, which can shrink the photo area relative to unlabeled neighbors. Keep captions terse, and use the Preview button before queuing a big batch - it's there precisely so the composited result never surprises you.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| image | COMBO | 1 options: example.png | |
| text | STRING | Caption drawn in the label bar. Auto-shrinks to fit, then truncates with an ellipsis. | |
| text_position | COMBO | top | Which edge of the image the label bar is added to. |
| show_label | BOOLEAN | true | Draw the caption text in the bar. |
| show_arrow | BOOLEAN | true | Draw a bold arrow in the bar, pointing back at the photo. |
| background_color | STRING | #000000 | Label bar fill color and border color, as a hex code. |
| text_color | STRING | #ffffff | Caption text and arrow color, as a hex code. |
| border_width | INT | 00–512 | Inset border thickness in pixels, drawn in background_color around the whole result. 0 = no border. |
| crop_x | INT | 00–999999 | Left edge of the crop region, in source-image pixels. Use the Edit Crop button to set this visually. |
| crop_y | INT | 00–999999 | Top edge of the crop region, in source-image pixels. Use the Edit Crop button to set this visually. |
| crop_width | INT | 00–999999 | Crop region width in pixels. 0 = everything to the right of crop_x (no crop, if crop_x/crop_y/crop_height are also 0). |
| crop_height | INT | 00–999999 | Crop region height in pixels. 0 = everything below crop_y (no crop, if crop_x/crop_y/crop_width are also 0). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |