Zenkai Control Prompt V1
Whole ControlNet bundles from one folder
- image
- mask
- depth
- pose
- canny
- prompt
Here's the thing about ControlNet workflows: they're hungry for companion images. For one "proper" generation you might want a base image, a depth map, a pose skeleton, a canny edge map, a mask, and a prompt - six wires of setup before you even sample. Zenkai Control Prompt V1 is the DJZ-Nodes answer: it loads the whole bundle out of one folder entry, keyed by a seed, and hands you image, mask, depth, pose, canny, and prompt all at once. Set up the folder once, and your ControlNet builds become a seed change.
It's the most ambitious of the Zenkai loader nodes, and the one that pays off most if you work with control conditions regularly.
How it works
The node reads from controlprompts/ subfolders in the pack install. Each entry is a base image plus its matching .txt prompt, and the control variants are named with suffix conventions:
_M→ the mask_D→ the depth map_P→ the pose skeleton_C→ the canny edge map
So scene.png pairs with scene.txt, scene_M.png, scene_D.png, scene_P.png, and scene_C.png. Missing control files don't break anything - the node substitutes a black placeholder of the same shape, so you can have a folder where only some entries carry a depth map and the rest just get black depth (which you'd then ignore or disable in the ControlNet node).
Selection works like the rest of the family: mode is sequential (seed walks the sorted folder, looping) or random (seed-seeded, reproducible), num_images (1–10) batches multiple sets, and the optional blacklist drops prompts containing listed terms before selection. The suffix convention and the placeholder behavior are both grounded in the node's source - you can also use any common image format (jpg, jpeg, png) for any of the variants.
The outputs
image(IMAGE) - the base image, for img2img or as the prompt-facing frame.mask(IMAGE) - for inpaint-style or masking work.depth,pose,canny(IMAGE) - the three most-used ControlNet conditions, each ready to feed a ControlNet application node. (The KB's ControlNet essay is worth a read on when to lean on which condition.)prompt(STRING) - the matching text, joined with|whennum_images> 1.
Wire the condition you care about into your ControlNet loader and the prompt into your text encoder, and you've collapsed a six-node setup into one.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/MushroomFleet/DJZ-Nodes
cd DJZ-Nodes
pip install -r requirements.txt
Restart ComfyUI, or search "DJZ-Nodes" in ComfyUI Manager. First run creates controlprompts/default/.
Troubleshooting
- Black images come out of the depth/pose/canny outputs. That's the placeholder - the file with the matching suffix doesn't exist for that entry. Either add it or route around it.
- Only "default" in the dropdown. Fresh install behavior - you create the categories (
controlprompts/action/,controlprompts/portrait/, whatever) and restart. - The mask/depth outputs are IMAGE, not MASK. Don't try to plug the
maskoutput into a MASK slot - it's an IMAGE tensor. Convert it (or use it where an image mask is expected). - ControlNet "ignores" the condition. Usual ControlNet gotchas apply here - check your control weight and start/end steps rather than blaming the loader. The node's job is just to get the images out of the folder.
If you're building character/scene libraries with control conditions, this node turns "reproduce this composition" into a one-knob operation. That's a genuinely good use of a folder.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt_folder | COMBO | 1 options: default | |
| seed | INT | 00–4294967295 | — |
| mode | COMBO | 2 options: sequential, random | |
| num_images | INT | 11–10 | — |
| blacklistopt | STRING | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | IMAGE | — |
| depth | IMAGE | — |
| pose | IMAGE | — |
| canny | IMAGE | — |
| prompt | STRING | — |