Nodes/ComfyUI/Cond Pair Set Props Combine
ComfyUI Node Runs on cloud

Cond Pair Set Props Combine

Two LoRAs in one image, each locked to its own side

By Comfy-Org·Created 4 years ago·Updated about an hour ago· 129,964
Cond Pair Set Props Combine
  • positive
  • negative
  • positive_NEW
  • negative_NEW
  • mask
  • hooks
  • timesteps
  • positive
  • negative
strength1.00
set_cond_area

You want character A on the left half and character B on the right half, each with their own LoRA, no attribute bleeding. A normal LoRA loader applies one LoRA to the whole model for the whole run, so that's off the table. PairConditioningSetPropertiesAndCombine (display name "Cond Pair Set Props Combine") is the node that makes it work: it takes your existing positive/negative pair, takes a new positive/negative pair, applies whatever region or scheduling you want to the new one, and merges them - all in one node that hands you back a combined pos/neg pair.

What it's actually doing

This is ComfyUI's native hooks system doing the heavy lifting, and it landed in core around December 2024 (kosinkadink, the AnimateDiff-Evolved author, is the one who wired model-patching into core). Hooks are weight patches - LoRAs, or even a whole checkpoint - that ride along on the conditioning. When the sampler runs, each conditioning that carries a different hook gets its own model pass, so the left region genuinely runs with character A's weights and the right with character B's. That's a real difference from prompt-level regional conditioning (ConditioningSetArea etc.): this is regional weights, not regional text.

So the typical flow is: wire one CreateHookLora into this node's hooks input along with a mask that covers the left half, another into a second instance with the right-half mask, and keep one branch plain. Three cond pairs, three regions, one image.

The inputs that matter

Four conditioning inputs, two of them you care about:

  • positive / negative - your existing conditioning, the thing you're layering on top of.
  • positive_NEW / negative_NEW - the new conditioning that gets the treatment. This is where the hooked/region LoRA prompt goes.

Then the dials:

  • hooks - the HOOKS group (a CreateHookLora output) that adds the weight patch to the _NEW conds.
  • mask - the region. White = where the new conditioning acts.
  • strength - this only does anything when a mask is connected. It's the mask strength, the blend amount of the masked region. No mask, no effect; a lot of people set it and wonder why nothing changed.
  • set_cond_area - "default" or "mask bounds". Use mask bounds. That's the setting that keeps the masked region's influence from spilling past its edges, and it's the difference between a clean split and the boxy seams people post about.
  • timesteps - a TIMESTEPS_RANGE to limit the new conditioning to part of the sampling run (e.g. only the early composition phase).

Outputs: a combined positive and negative, ready for the sampler.

The gotchas, from people who've run it

This is where the community reports get real. First: expect a slowdown. Each hooked region is a separate model forward pass, so a two-region run can be several times slower than a plain one - one user on a 4070 Ti reported roughly 6x and called it unusable. Budget for it.

Second: regions that never talk to each other look stitched. If your output has a hard split down the middle with two differently-scaled subjects, you need a third, global conditioning that fills the space the masks don't cover - that's exactly what the "Set Default Combine" sibling nodes are for. Add one prompt describing the whole scene and the seams mostly vanish.

Third: GGUF. The hook system's LoRA loading didn't support GGUF-format LoRAs early on, and Flux users hit errors; if you're on GGUF Flux you may need the .safetensors LoRA instead.

How you get it

It ships with ComfyUI core - no install, no Manager. It's marked experimental, so expect occasional changes as the hooks API settles. You'll find it under advanced → hooks → cond pair in the node menu.

Categoryadvanced/hooks/cond pair

Inputs (9)

NameTypeDefaultDescription
positiveCONDITIONING
negativeCONDITIONING
positive_NEWCONDITIONING
negative_NEWCONDITIONING
strengthFLOAT1.000–10
set_cond_areaCOMBO2 options: default, mask bounds
maskoptMASK
hooksoptHOOKS
timestepsoptTIMESTEPS_RANGE

Outputs (2)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING