ποΈ Apply ControlNet
The ControlNet node you'll wire up first
- positive
- negative
- control_net
- image
- vae
- positive
- negative
If you've come here from a ControlNet workflow, this is the node that makes the whole thing happen. Apply ControlNet takes the conditioning from your text encoder, the control image you prepared (canny edges, a depth map, a pose skeleton, whatever), and a ControlNet checkpoint - and fuses them into the conditioning that actually steers the sampler. No Apply ControlNet, no control. The prompt still decides what appears; this node is how the structure decides where it goes.
It's worth being straight about one thing: this node is shaped almost exactly like ComfyUI core's ControlNetApplyAdvanced. Same positive/negative conditioning in, same pair out, same strength and start/end percent dials, same optional VAE. If you already have core ComfyUI, you already have this capability - the pack version just lives under the ComfyUI-NeuralMedia/ControlNets menu so you can keep a NeuralMedia workflow self-contained. That's the honest reason it exists, and it's a fine one.
How it works
ControlNet works by running a trainable copy of the model's encoder alongside the frozen main model. The condition image gets fed into that copy, and its outputs are added into the main model's layers, steering denoising toward the structure you supplied without erasing what the prompt said. It's why sampling gets slower when a ControlNet is in the path - you're now running a second, smaller model on top of the first.
That's the whole mechanism, and it's why the node sits between your CLIP encoder and your KSampler rather than anywhere else. You wire your positive and negative text conditioning in, get the same two out, and both go to the sampler.
The inputs that matter
For a beginner there are really three to think about:
- control_net - the checkpoint. Wire this from a ControlNetLoader (or the pack's own loaders); it reads
.safetensorsfiles frommodels/controlnet. - image - the condition. This is the preprocessed map, not the raw photo. Canny edges for line work, depth for layout, openpose for people.
- strength - how hard the condition pushes, default 1.0.
The two you'll tune later are start_percent and end_percent: the window of denoising where the condition applies. Ending it around 0.5β0.7 is the community's standing trick - hold the structure while composition forms, then let the model add its own detail. If you're on a modern union model, ignore the old 1.0 default and start near 0.65β0.9; the current generation of ControlNets is trained to be run lighter.
vae is optional and you can ignore it. It's there for advanced wiring where the control image needs to be processed relative to a specific VAE; most workflows leave it empty.
Install
ComfyUI Manager β Install Custom Nodes β search ComfyUI-NeuralMedia, or:
cd ComfyUI/custom_nodes
git clone https://github.com/YarvixPA/ComfyUI-NeuralMedia
cd ComfyUI-NeuralMedia
pip install -r requirements.txt
Then restart ComfyUI. The pack is a broad grab-bag by YarvixPA (also the person behind the popular FLUX.1-Fill-dev-GGUF quant on HuggingFace), so you'll get a whole menu of nodes alongside this one. One heads-up: the repo has been renamed or moved around a couple of times, so if the clone 404s, install via Manager instead - it carries its own registry entry.
Common issues
- Nothing visibly changes. Check that the image you're feeding matches the ControlNet's expectation. A canny model wants edges, not a raw photo; feeding the wrong condition type quietly does nothing useful.
- Overcooked results at 1.0. On modern union models the old default over-saturates the condition. Dial strength down first, then adjust the end percent.
- The node errors on load. Usually a missing ControlNet file or a model in the wrong folder. Confirm the
.safetensorsis actually inmodels/controlnetand matches the architecture you're sampling (SDXL ControlNets don't load on Flux, and vice versa).
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | β | |
| negative | CONDITIONING | β | |
| control_net | CONTROL_NET | β | |
| image | IMAGE | β | |
| strength | FLOAT | 1.000β10 | β |
| start_percent | FLOAT | 0.0000β1 | β |
| end_percent | FLOAT | 1.0000β1 | β |
| vaeopt | VAE | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | β |
| negative | CONDITIONING | β |