Apply Control Net JK๐
ControlNet that only bites where you want it to
- base_positive
- base_negative
- image
- mask
- vae
- control_net
- base_pos
- base_neg
Stock ComfyUI's ControlNet apply nodes have a hole: no masking. You can paste a canny or depth map over the whole image and dial strength, but you can't say "control this region and leave the rest alone." CR Apply ControlNet JK is the JakeUpgrade wrapper that closes that gap - it's the single-ControlNet apply from the pack's image-gen group nodes, wrapped around the core ControlNetApplyAdvanced with an A1111-style effective mask bolted on.
How it works
ControlNet steers generation by feeding a preprocessed image (edges, depth, pose) into a copy of the model's encoder, and the two knobs that matter are the classic ones from the technique itself: strength (0โ10, default 1.0) decides how hard the condition pulls, and start_percent / end_percent (0โ1) pick the denoising window it's active - the standing advice is to release the condition once composition has formed, e.g. start 0.0, end 0.5 for structure-heavy work.
The interesting input is effective_mask. When it's on and a mask is available, the node splits the conditioning into two halves: inside the mask the ControlNet applies, outside it the base conditioning carries through. That's the "effective mask" trick from the A1111 era, and JakeUpgrade added it in v1.8.6 as an A1111-like ControlNet mask. The mask itself can come from the optional mask input, or it's pulled from the alpha channel of the image you feed in (the node runs SplitImageWithAlpha on it, so an RGBA control image with transparent regions works as a mask automatically).
Inputs and outputs, in brief:
- base_positive / base_negative - the conditioning from your CLIP text encoders.
- image / control_net (optional) - the preprocessed control image and the
.safetensorsfrom a ControlNet loader; if you pass a name string, the node loads it frommodels/controlnetitself. - vae (optional) - used when the condition needs latent encoding.
- Outputs: base_pos and base_neg, the patched conditionings that go to your sampler.
Installing it
Part of ComfyUI-JakeUpgrade:
cd ComfyUI/custom_nodes
git clone https://github.com/jakechai/ComfyUI-JakeUpgrade
cd ComfyUI-JakeUpgrade
# Windows standalone: install.bat
# or: python_embeded\python.exe -s -m pip install -r requirements.txt
pip install -r requirements.txt # non-Windows
Or ComfyUI Manager โ search "JakeUpgrade" โ install โ restart. The ControlNet model files are your own, in ComfyUI/models/controlnet.
Troubleshooting
- "Could not import SplitImageWithAlpha" or an apply that never loads. Newer JakeUpgrade (v2.1.5+) calls
comfy_extras.nodes_compositing.SplitImageWithAlpha, which was renamed - the README is explicit that you need ComfyUI v0.3.64+. Update ComfyUI before touching anything else. - The condition does nothing. Check strength isn't 0 and that start_percent โค end_percent; also that the control image is actually connected - this node no-ops entirely if
imageorcontrol_netis missing. - Mask not doing what you expect. If the image has no alpha channel, the alpha-derived mask is all zeros and the node falls back to your explicit mask input. Feed the mask explicitly when you want region control.
- Manager flags a JakeUpgrade / IPAdapter_plus conflict. The pack's
replacement/folder trips the check; harmless noise. - ComfyUI-MultiGPU causes CUDA errors on recent ComfyUI - the README says to disable it.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| base_positive | CONDITIONING | Positive conditioning input | |
| base_negative | CONDITIONING | Negative conditioning input | |
| effective_mask | BOOLEAN | false | Apply mask to ControlNet effect |
| strength | FLOAT | 1.000โ10 | ControlNet strength multiplier |
| start_percent | FLOAT | 0.0000โ1 | Start percentage of denoising process |
| end_percent | FLOAT | 1.0000โ1 | End percentage of denoising process |
| imageopt | IMAGE | Control image input | |
| maskopt | MASK | Mask for selective application | |
| vaeopt | VAE | VAE for image encoding | |
| control_netopt | CONTROL_NET | ControlNet model to apply |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| base_pos | CONDITIONING | โ |
| base_neg | CONDITIONING | โ |