Nodes/jlc-comfyui-nodes/ JLC ControlNet Apply
ComfyUI Node

 JLC ControlNet Apply

Pass the object, keep the chain

By Damkohler·Created 6 months ago·Updated 3 days ago· 25
 JLC ControlNet Apply
  • image
  • positive
  • negative
  • control_net
  • vae
  • positive
  • negative
  • control_net
  • vae
enabledtrue
strength1.00
start_percent0.000
end_percent1.000

Sometimes a node is just an Apply node, and that's fine. JLC ControlNet Apply is the plain, graph-friendly member of JLC's ControlNet family: no internal model loading, no dropdown, no cache to manage. You hand it a CONTROL_NET object from a loader, a hint image, your conditioning, and it does the standard ComfyUI thing - attaches the ControlNet to your conditioning and chains it onto any ControlNet already in the stream.

So why use it instead of ComfyUI's stock ControlNetApplyAdvanced? Three small reasons, and they're all about workflow ergonomics rather than magic. First, an explicit enabled toggle that hard-bypasses the node (no model work when it's off). Second, pass-through outputs for the ControlNet and VAE, which make daisy-chaining and model reuse practical in larger graphs. Third - the one that matters if you buy into JLC's approach at all - it's the intended chain-builder for the pack's JLC ControlNet Composition node, which converts the native chain into non-recursive weighted fusion.

How it works

At heart it's native chaining: it copies the incoming ControlNet, calls set_cond_hint() with your image, strength, and start/end window, and reconnects the chain via set_previous_controlnet(). Nothing exotic. Two behaviors are worth knowing:

  • Hard bypass. enabled off, or strength == 0, and the node returns its inputs untouched - no model load, no hint processing. Perfect for toggling experimental branches.
  • Clear error instead of a silent no-op. If the node is active and the image input is None - a disconnected socket, or a disabled/hidden output from an Aux wrapper upstream - it raises a readable error telling you to connect a hint image or disable the node. That's friendlier than the opaque failures you get from stock Apply nodes.

Because it preserves native previous_controlnet chaining, it behaves exactly like a stock Apply when used alone - the JLC non-recursive stuff only kicks in if you add a Composition node downstream. So you can drop it in as a drop-in replacement and get nothing but the pass-throughs and the bypass.

Inputs and outputs

  • control_net (required) - the ControlNet object. No dropdown here; wire a loader. If you wanted dropdown loading, that's the Apply (Advanced) variant.
  • image - the hint image (canny, depth, pose…).
  • positive / negative - conditioning in.
  • vae, strength (0–10), start_percent / end_percent - the usual suspects.
  • Outputs: positive, negative, control_net, vae - all passed through so you can chain.

Installing it

Part of jlc-comfyui-nodes, installed with the whole pack:

cd ComfyUI/custom_nodes
git clone https://github.com/Damkohler/jlc-comfyui-nodes.git

Restart ComfyUI, or install "jlc-comfyui-nodes" from ComfyUI Manager. No Python dependencies; you still need a ControlNet model loaded elsewhere (e.g. via ControlNetLoader).

Where people get burned

  • No internal loading. If you wire this node and see no dropdown, that's correct behavior - it's the external-input variant by design. The Advanced Apply handles internal loading.
  • The None image error. It's pointing at a real problem: a hint socket that's disconnected or fed by a disabled aux output. Connect a valid image or disable the node.
  • Single-ControlNet fallback. If you chain this into Composition and end up with one control at weight 1.0, it routes native - an optimization, not a bug.

If your graph already uses ComfyUI's Apply node and works, there's no urgent reason to switch. This one earns its place when you want the bypass toggle, the pass-throughs, or a clean first stage for JLC's Composition workflow. For everything else it's simply a competent Apply node that doesn't get in the way.

Categoryconditioning/controlnet

Inputs (9)

NameTypeDefaultDescription
enabledBOOLEANtrue
imageIMAGE
positiveCONDITIONING
negativeCONDITIONING
control_netCONTROL_NET
vaeVAE
strengthFLOAT1.000–10
start_percentFLOAT0.0000–1
end_percentFLOAT1.0000–1

Outputs (4)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING
control_netCONTROL_NET
vaeVAE