Cond Set Props
The gateway node that actually hands your hooks to the sampler
- cond_NEW
- mask
- hooks
- timesteps
- CONDITIONING
Here's the thing nobody tells you about ComfyUI's hooks: creating a hook is the easy half. CreateHookLora gives you a HOOKS group, but a hook sitting on the canvas does nothing until it's attached to conditioning - and ConditioningSetProperties ("Cond Set Props") is one of the few nodes that knows how to do that attachment. Build a hook, feed it in here, and this node stamps it onto a conditioning so the sampler actually applies it. It's the gateway, and a lot of "my hook does nothing" confusion traces back to skipping exactly this step.
What it does
It takes one conditioning (the cond_NEW input), and applies up to four modifiers to it: a hooks group, a mask (with a strength and a set_cond_area choice), and a timesteps range. What comes out is a single, modified CONDITIONING - the same data your CLIP text encoder produced, now carrying a weight patch and a region and a time window.
The "Set Props" family comes in single and pair variants, and with and without a built-in combine step. This is the plain single-cond one: it modifies the conditioning you give it and returns it as-is, no merging. If your pipeline already manages the merge elsewhere, this is the one you want. If you want the modifier and the merge in one node, grab ConditioningSetPropertiesAndCombine instead - it takes an existing cond, layers the new one on, and returns the blend.
The inputs that matter
cond_NEW- the conditioning to modify. Wire your CLIP text encode output here.hooks- the HOOKS group. This is the whole point. Without it, this node is just a weaker re-implementation of the classic ConditioningSetMask.mask- a MASK defining the region. White is affected, black is not.strength- only applies when a mask is connected. It's the mask strength, how strongly the region blends in. Default 1.0. With no mask, changing it changes nothing.set_cond_area- "default" or "mask bounds". Set it to mask bounds for region work; "default" is the setting that lets influence leak past the mask edge and produce the smeary, boxy artifacts people blame on the whole system.timesteps- a TIMESTEPS_RANGE output fromConditioningTimestepsRange, to restrict the conditioning to part of the sampling run.
Where it fits
Hooks were added to core in December 2024 as a way to mask and schedule LoRA and model weights - regional weights rather than regional prompts. This node is how a regional-prompting-style workflow (left half one LoRA, right half another) gets its patches onto the right conds. It's also the node you reach for when you want a hook to apply only during the first third of sampling: hook + timesteps here, and the weight fades out of the equation once composition has formed.
Common issues
The recurring failure is thinking the hook applies on its own. It doesn't - it must travel on the conditioning into the sampler. If you attached your mask and strength and saw zero change, check two things: is a mask actually connected (strength does nothing without one), and does the conditioning you're modifying actually carry a hook? One more real-world caveat: each hooked conditioning means a separate model pass, so don't be surprised when a one-region hook workflow runs slower than a plain one. That's the price of the feature, not a bug.
Ships with ComfyUI core, nothing to install, marked experimental. Find it under advanced → hooks → cond single.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| cond_NEW | CONDITIONING | — | |
| strength | FLOAT | 1.000–10 | — |
| set_cond_area | COMBO | 2 options: default, mask bounds | |
| maskopt | MASK | — | |
| hooksopt | HOOKS | — | |
| timestepsopt | TIMESTEPS_RANGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |