Multi Image + Prompt
One clean widget for a batch of image-to-video scenes
- image_prompt_list
- image_prompt_list
When you're building a looping image-to-video workflow - feed image A with prompt A, then image B with prompt B, on repeat - the mess of wires that connects a handful of image loaders and text boxes is the ugliest part of the graph. Multi Image + Prompt replaces that tangle with a single widget: four image slots, each with its own prompt box, all collected into one list output that a looper can cycle through. It's the "content input" end of this pack's prompt-looping pair, and its counterpart TKPromptLooperAdv is what consumes the list on the other side.
How it works
Up to four image_N / prompt_N pairs. The image slots are dropdowns that list whatever's in your ComfyUI/input folder (plus drag-and-drop upload onto the widget, via ComfyUI's built-in upload handling). When the node runs, it loads each selected image to a tensor, pairs it with its prompt text, and packs everything into a single TK_IMAGE_PROMPT_LIST output - a list of dicts, each holding image, prompt, filename, and a slot number.
Two behaviors worth knowing. First, empty slots are skipped - leave image 3 blank and the list simply has fewer entries; you're not required to fill all four. Second, the nodes chain: there's an optional image_prompt_list input, and if you wire one node's output into another's input, the upstream entries come first and the downstream node's own slots append after. That's how you get more than four scenes - chain two or three together and the list grows.
The inputs that matter
- The four
image_N/prompt_Npairs - this is 90% of what you'll touch. Set a scene's image and its text, leave the rest empty. image_prompt_list- only used for chaining.
Output
One TK_IMAGE_PROMPT_LIST socket. It doesn't connect to arbitrary nodes - it's a custom type this pack defines, so it feeds TKPromptLooperAdv (which cycles it by index) and nothing else. Don't expect to wire it into a standard image input; that's the point of the custom type.
Common issues
Because it reads from the input folder at execution time, the usual gotchas are ComfyUI-101: images must actually be in ComfyUI/input (or uploaded through the widget), and re-running with changed files re-triggers via the node's IS_CHANGED hashing. The IS_CHANGED logic also watches upstream chained lists, so editing an earlier node in a chain correctly invalidates later ones. One thing people occasionally trip on: the prompt text is raw - there's no wildcard or token processing here, so write full sentences like you'd feed a CLIP text encoder.
Installing it
Part of trashkollector/TKNodes ("ComfyUI Handy Nodes"). Install via ComfyUI Manager (search "Handy Nodes") or:
cd ComfyUI/custom_nodes
git clone https://github.com/trashkollector/TKNodes
Restart, and it's under TKNodes/image. No models, no API keys - it's pure file loading and list building.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt_1 | STRING | — | |
| image_1 | COMBO | 2 options: , example.png | |
| prompt_2 | STRING | — | |
| image_2 | COMBO | 2 options: , example.png | |
| prompt_3 | STRING | — | |
| image_3 | COMBO | 2 options: , example.png | |
| prompt_4 | STRING | — | |
| image_4 | COMBO | 2 options: , example.png | |
| image_prompt_listopt | TK_IMAGE_PROMPT_LIST | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image_prompt_list | TK_IMAGE_PROMPT_LIST | — |