Icy ConditioningSetAreaPercentage
Your prompt, but only inside a box
- conditioning
- CONDITIONING
First, the thing nobody tells you about this node's name: the "Icy" isn't a feature. ComfyUI-IcyHider is a privacy extension that hides node content until you hover over it, and at startup it walks ComfyUI's own nodes module and re-creates every core node as an Icy<Name> subclass. So IcyConditioningSetAreaPercentage is ComfyUI's built-in ConditioningSetAreaPercentage with a snowflake hat - identical inputs, identical math, just filed under the "IcyHider Comfy Core" category so the hiding extension knows to treat it as one of its own.
That caveat out of the way, the node itself is a workhorse of regional prompting. It confines a piece of conditioning to a rectangular region of the image, so the text in that conditioning only gets to influence what's drawn inside the box. This is how you put two characters in one frame without their prompts bleeding into each other - character A's prompt gets a box on the left, character B's gets one on the right, and each sampler step asks each prompt to only speak for its own territory. It's the technique the KB's character-consistency doc calls out as the standard answer to "how do I keep two subjects separate?"
The inputs that matter
All five numbers are floats between 0 and 1, and that's the classic beginner trap:
- width / height - the box size as a fraction of the image, not pixels.
width: 0.5is half the canvas, not 512. - x / y - the box's top-left corner as a fraction.
x: 0.5starts the box at the horizontal midpoint. - strength - how hard the region's prompt is enforced (0–10, default 1). Lower it when a region bleeds; crank it when the model ignores it.
So a box covering the right half of the frame is x: 0.5, y: 0, width: 0.5, height: 1.0. The single CONDITIONING output carries the conditioning plus the area metadata, and it wires straight into your positive (or negative) input on the sampler. Note there's no separate area-something node needed for the basic case - but if you want to tune the strength of a region independently of its geometry, that's ConditioningSetAreaStrength (also wrapped as IcyConditioningSetAreaStrength).
The gotchas
- Fractions, not pixels. I'd bet half the people who first try this node set
width: 0.5and expect 512 pixels. On a 1024px canvas that box is half the image either way, but at other resolutions it'll be nowhere near what you pictured. Think in proportions and you're fine. - It's literally the core node. If you don't use IcyHider's hiding, the plain
ConditioningSetAreaPercentagedoes the exact same thing. The wrapper adds nothing to the math.
Installing it
You don't install this node, you install its pack:
cd ComfyUI/custom_nodes
git clone https://github.com/icekiub-ai/ComfyUI-IcyHider
then restart ComfyUI. ComfyUI Manager users can just search "IcyHider". There are no pip dependencies (pyproject.toml lists dependencies = []) and no model files to download - the whole thing is one JS file plus a Python wrapper that generates these nodes from your installed ComfyUI version at startup.
Common issues
- Missing node errors. If you load a workflow that references
IcyConditioningSetAreaPercentagewithout IcyHider installed, ComfyUI reports it as missing. Swap in the core node - the inputs are identical - or install the pack. - Region has no effect. Check you're feeding the right conditioning (the one with the area attached) into the sampler's positive or negative, not a sibling node.
- Updates change these nodes. Because they're generated from core ComfyUI at boot, updating ComfyUI can alter their input lists. The wrapper tracks whatever's in your
nodesmodule.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| conditioning | CONDITIONING | — | |
| width | FLOAT | 1.000–1 | — |
| height | FLOAT | 1.000–1 | — |
| x | FLOAT | 0.000–1 | — |
| y | FLOAT | 0.000–1 | — |
| strength | FLOAT | 1.000–10 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |