Nodes/ComfyUI-IcyHider/Icy ControlNetApply
ComfyUI Node

Icy ControlNetApply

Where the ControlNet magic actually happens

By icekiub-ai·Created 9 months ago·Updated 9 months ago· 31
Icy ControlNetApply
  • conditioning
  • control_net
  • image
  • CONDITIONING
strength1.00

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 ControlNetLoader or DiffControlNetLoader.
  • 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.
CategoryIcyHider Comfy Core

Inputs (4)

NameTypeDefaultDescription
conditioningCONDITIONING
control_netCONTROL_NET
imageIMAGE
strengthFLOAT1.000–10

Outputs (1)

NameTypeDescription
CONDITIONINGCONDITIONING