Dynamic Image Switch (Creepybits)
'First Connected Image Wins'
- image1
- image2
- image3
- IMAGE
- show_help
Some nodes are built to impress. This one is built to be boring in the most useful way. The Dynamic Image Switch takes up to three image inputs and passes through the first one that has something connected - image1 wins if it's wired, image2 if it isn't, and so on. No selector widget, no configuration, no decision-making. It's a priority fallback for images, and it's the node you reach for when you want "prefer this image, but don't break if it's not there."
The inputs and outputs
image1,image2,image3- optional IMAGE wires, checked in order- Outputs:
IMAGE(the first connected one) andshow_help(the pack's proverb gag, not actual help)
That's the whole schema. The mechanism is literally if image1 is not None: use it, elif image2.... If none are connected, you get None out - and downstream nodes will complain, so keep at least one slot fed.
When you'd actually use it
The fallback pattern shines in shared workflows where different people (or different runs) provide different sources:
- Reference image routing.
image1comes from an "load reference" node a power user controls;image2falls back to a baked-in default image. If the reference isn't loaded, the workflow still runs with the default instead of erroring. - Preview vs. full-res. One branch produces a quick preview, another produces the final render; the switch prefers the branch that actually produced something this run.
- Multi-source batch setups. Several loaders may or may not feed images into a chain; the switch ensures exactly one source flows onward without you editing the graph.
It's the image-flavored sibling of the pack's Dynamic Model / CLIP / VAE / Latent switches - same "first non-empty wins" logic, different data type. If you need active selection between multiple connected images (an integer chooser), that's a different tool - this pack's dynamic family doesn't do that.
Gotchas
Two things will bite you:
- Positional priority.
image1always wins. If you intendimage2to take precedence and just add it later, you'll get surprising results - the node doesn't read your intent, it reads the slot order. - None propagation. All three empty →
Noneoutput. If the downstream node can't handleNone, the whole run fails. When in doubt, always wire the last slot as your guaranteed default.
Installing it
It's part of the Creepybits pack, installed all at once:
cd ComfyUI/custom_nodes
git clone https://github.com/Creepybits/ComfyUI-Creepy_nodes.git
Restart ComfyUI, or install "Creepy" via ComfyUI Manager. No model downloads, nothing to configure. It's a two-line idea wrapped in a node - but for "use this if it exists, otherwise fall back," it saves you from building the branchy mess that idea would otherwise require.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image1opt | IMAGE | — | |
| image2opt | IMAGE | — | |
| image3opt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| show_help | STRING | — |