Nodes/ComfyUI-WithAnyone/WithAnyone Single Person Conditioning
ComfyUI Node

WithAnyone Single Person Conditioning

The node that bundles a person for the sampler

By okdalto·Created 10 months ago·Updated 9 months ago· 26
WithAnyone Single Person Conditioning
  • withAnyone_pipeline
  • ref_img
  • person_conditioning
  • debug_bbox_image
bbox

If you're building a WithAnyone workflow by hand, this is the node you'll reach for the most - you add one instance per person you're putting in the shot. It takes a reference photo of a single face, does both identity extractions (ArcFace + SigLIP), and bundles them with a placement box into a single PERSON_CONDITIONING object that the sampler eats. It's the one-stop version of the two extractor nodes, and it's the version the shipped example workflows actually use.

Inputs

  • withAnyone_pipeline - from the Model Loader. This is where the face extractor and the SigLIP embedder live.
  • ref_img - your reference image. Critical rule: exactly one face per image. The node takes the first image in the batch and expects it to contain one clean face; a group shot or a blurry face is a hard failure.
  • bbox - optional, a string in the format x1,y1,x2,y2, all values 0-to-1 relative coordinates. This comes from the WithAnyone BBox Calculator. Leave it empty and the sampler will drop the face somewhere random - the README is explicit that you should give it a box.

Outputs

  • person_conditioning - the bundle. Wire it into person1 on the sampler. Add a second conditioning node and wire that into person2, and so on up to four.
  • debug_bbox_image - a preview with the box drawn over the reference, plus a "No BBox provided" placeholder if you left it blank. Useful sanity check before you commit.

How it works under the hood

For each reference, the node runs InsightFace's antelopev2 detector to find and align the face, then produces a 512-d ArcFace embedding (identity) and a 256×768 SigLIP embedding (details). Both get normalized to the shapes the sampler expects, the bbox (if given) gets validated - exactly four comma-separated values, each in 0–1 - and everything is packed into that one object. Inside the sampler, those embeddings are injected through cross-attention masks anchored to the bbox, which is how person A's face stays in A's box and doesn't leak into B's.

Where people get burned

"Failed to extract face from the reference image." The number-one error, and it means InsightFace couldn't confidently find a face. Small crops, heavy blur, extreme angles, faces partly out of frame. Also: this node wants one face - if your reference has two, it grabs the first it finds and you'll wonder why the wrong person keeps showing up.

"Invalid bbox format. Expected 'x1_ratio,y1_ratio,x2_ratio,y2_ratio' (0-1 range)." The node is strict. Exactly four comma-separated numbers, no spaces, all between 0 and 1. If you're copy-pasting from somewhere, this is the failure you'll hit - the BBox Calculator produces the format natively, so wire it instead of typing.

The all-or-nothing bbox rule is sampler-side but you'll feel it here: if you give person 1 a box and person 2 an empty one, the sampler throws. Decide per-workflow whether you're composing every face or letting all of them land randomly.

Installation

Part of the WithAnyone pack:

cd ComfyUI/custom_nodes
git clone https://github.com/okdalto/ComfyUI-WithAnyone
cd ComfyUI-WithAnyone
pip install -r requirements.txt

Or grab "WithAnyone" via ComfyUI Manager and restart. The model setup - Flux, the withanyone adapter, VAE, SigLIP, and the auto-downloaded ArcFace - is shared with the rest of the pack; the Model Loader page has the full download list if you haven't run it yet.

Categorysd

Inputs (3)

NameTypeDefaultDescription
withAnyone_pipelineWITHANYONE_PIPELINE
ref_imgIMAGE
bboxoptSTRING

Outputs (2)

NameTypeDescription
person_conditioningPERSON_CONDITIONING
debug_bbox_imageIMAGE