Icy ControlNetApply
Where the ControlNet magic actually happens
- conditioning
- control_net
- image
- CONDITIONING
Don't let the snowflake confuse you: IcyControlNetApply is ComfyUI's built-in ControlNetApply node. The ComfyUI-IcyHider extension (a preview-hiding privacy pack) auto-wraps every core node into an Icy subclass at startup, so this is the same apply node with a renamed class so the hiding logic can cover it. If you don't use the hiding, use the core node - the math is identical.
Now, the actual job. This is the node that takes a loaded ControlNet, a conditioning image, and your prompt-conditioning, and fuses them into the conditioning you hand to the sampler. It's the application step in every ControlNet workflow - the loader puts the ControlNet file in your graph, this node puts it to work. As the KB's ControlNet doc puts it: ControlNet conditions on spatial structure (edges, depth, pose) extracted from a reference image, so the prompt decides what and the ControlNet decides where.
Inputs that matter
- conditioning (CONDITIONING) - your CLIP-encoded prompt conditioning. The classic pattern is two of these nodes, one feeding positive and one feeding negative, since the basic apply node handles a single conditioning per call.
- control_net (CONTROL_NET) - the output of a
ControlNetLoaderorDiffControlNetLoader. - image (IMAGE) - the preprocessed condition map: a canny edge map, depth map, pose skeleton, whatever your control type needs. Feeding raw photos in here is the #1 mistake - you usually need a preprocessor node first (the ControlNet Aux preprocessors pack is effectively required for serious work).
- strength (FLOAT, 0–10, default 1) - the control weight. This is the dial everyone fights with. The KB notes that 2026's union ControlNets publish lower recommended weights (0.65–0.8 on Flux 2, 0.8–1.0 on Qwen); starting at the old 1.0 default tends to overcook a modern union model.
Output is a single CONDITIONING, wired into your sampler's positive or negative input.
Why you'd reach for it
Structure control: pose that doesn't drift, depth that holds, a composition that doesn't wander between seeds. If you've ever tried to keep a character's pose consistent with pure prompt text, you know why this node exists. The KB's whole ControlNet essay is the context - the "controlling where things go" half of generation, complementary to IP-Adapter-style "what things look like."
Installing it
Via ComfyUI Manager (search "IcyHider") or:
cd ComfyUI/custom_nodes
git clone https://github.com/icekiub-ai/ComfyUI-IcyHider
Restart. No pip dependencies, no model files - the ControlNet model itself you still have to download and drop into models/controlnet; the pack only provides the wrapper.
Common issues
- Missing node on load. Install the pack or swap in core
ControlNetApply(identical). - No effect at any strength. You're almost certainly feeding an unprocessed image, or a ControlNet trained for a different architecture (SD 1.5 files don't load meaningfully on SDXL, let alone Flux). Check both.
- Preview privacy bonus. Since this is an Icy node, its image widget is hidden until you hover - handy if you don't want your condition maps on display, which is the pack's actual purpose.
- Strength feels weak on modern unions. Lower your mental baseline. 0.65–0.8 is normal now, not a sign the node is broken.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| conditioning | CONDITIONING | — | |
| control_net | CONTROL_NET | — | |
| image | IMAGE | — | |
| strength | FLOAT | 1.000–10 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |