JLC ControlNet Apply
Pass the object, keep the chain
- image
- positive
- negative
- control_net
- vae
- positive
- negative
- control_net
- vae
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.
enabledoff, orstrength == 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
Noneimage 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.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| enabled | BOOLEAN | true | — |
| image | IMAGE | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| control_net | CONTROL_NET | — | |
| vae | VAE | — | |
| strength | FLOAT | 1.000–10 | — |
| start_percent | FLOAT | 0.0000–1 | — |
| end_percent | FLOAT | 1.0000–1 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| control_net | CONTROL_NET | — |
| vae | VAE | — |