Nodes/zsq_prompt/Simple Controlnet
ComfyUI Node

Simple Controlnet

Apply a ControlNet to your conditioning in one node

By windfancy·Created 2 years ago·Updated 5 months ago· 2
Simple Controlnet
  • positive
  • image
  • positive
controlnet_name
controlnet_strength1.00

Simple Controlnet (zsqcontrolnet) from the zsq_prompt pack is the one-stop ControlNet node: feed it a positive conditioning, a reference image, and a ControlNet model, and it returns a new positive conditioning with the ControlNet baked in. For the tiling, edge-following, and pose-following workflows where you'd otherwise string together a loader plus an Apply ControlNet node, this collapses the whole thing into a single node.

How it works

You provide positive (CONDITIONING), image (the control hint - canny edges, depth map, a scribble, whatever your preprocessor produced), controlnet_name (dropdown from your models/controlnet/ folder), and controlnet_strength (0 to 10, default 1.0).

Under the hood it loads the ControlNet via ComfyUI's own load_controlnet, sets the image as the conditioning hint with your strength, and stamps the conditioning so the sampler applies control on the positive side (control_apply_to_uncond is set to false - the negative isn't controlled, which is the standard and usually correct behavior). Two passthrough behaviors are built in: if controlnet_name is "None" or controlnet_strength is 0, it returns your positive untouched. That makes it safe to leave in a workflow while you dial things in.

The output is a single positive (CONDITIONING), ready for a sampler.

Inputs and outputs that matter

  • positive - your existing positive conditioning, usually from a CLIP text encode.
  • image - the control condition image. This is the input where people go wrong: it needs to be a preprocessed control map, not a raw photo, unless you're doing tile/img2img-style control where the photo is the map.
  • controlnet_name - the model, from your controlnet folder.
  • controlnet_strength - how hard the condition bites. The ControlNet playbook: 0.3–0.7 for loose guidance, 0.8–1.2 for strict adherence, and many 2025-26 union models prefer lower numbers than the old SD-era defaults.
  • Output: positive (CONDITIONING).

Where it fits

ControlNet is how you make generation follow structure - edges, depth, pose, or the layout of a reference - and this node is how you apply it inside this pack. It pairs naturally with the pack's imageScaleDown (get a huge reference down to a workable base) and with preprocessors from ComfyUI's ControlNet Aux Preprocessors pack, which is the standard source of the edge/depth/pose maps this node wants.

The honest limitation: there's no start/end step control here. The community's single most-repeated ControlNet tip is that you should often release the condition once composition has formed (start 0.0, end ~0.5). If you need that precision, you want core ControlNet Apply with ControlNetLoader and its start/end controls - this node is the quick version, not the fine-tuned one.

Installing zsq_prompt

Shared pack install. ComfyUI Manager → search zsq_prompt → install, restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/windfancy/zsq_prompt

Restart ComfyUI. Heavy shared deps (transformers, opencv-python, opencv-contrib-python, scikit-image, timm, onnx, ultralytics) come with the pack; if Manager flags "conflicting with zsq_prompt" on a workflow, that's dependency-overlap noise, only meaningful once the pack is installed. ControlNet model files are not downloaded - you need to drop the right .safetensors into models/controlnet/ yourself (and make sure it matches your base model's architecture; an SD 1.5 ControlNet will not work on SDXL or Flux).

Gotchas

  • No start/end step controls - for control-release timing you need core ControlNet nodes.
  • control_apply_to_uncond is false, so control never touches the negative side. That's standard behavior, but worth knowing if you're debugging weak control.
  • Strength up to 10 is allowed by the UI, but anything above ~2 is a sign you're compensating for the wrong condition image, not the wrong strength.
  • If the dropdown is empty, it's not a node bug - it means you have no ControlNet files in models/controlnet/.
CategoryZSQ/Loaders

Inputs (4)

NameTypeDefaultDescription
positiveCONDITIONING
imageIMAGE
controlnet_nameCOMBO1 options: None
controlnet_strengthFLOAT1.000–10

Outputs (1)

NameTypeDescription
positiveCONDITIONING