Extract Face Pose Image
The cheap trick that buys you pose control
- face_detector
- image
- mask
- IMAGE
InfiniteYou is two conditions stacked: who (the identity embedding) and how (the pose). The second one is optional - the pack's example workflow literally feeds a blank image to Apply InfuseNet by default, which is the README's "empty face-pose control image" path and gives you full compositional freedom. Extract Face Pose Image is the node you swap in when you want the person at a particular angle, or holding a particular expression.
It's the same landmark trick InstantID popularized. You feed it a reference face photo, it finds the face with the same AntelopeV2 detector the rest of the pack uses, and it draws the five facial keypoints - eyes, nose, mouth corners - as colored dots connected by little sticks. You know this image: it's the skeleton you've seen in a thousand face-conditioning workflows, usually cyan, magenta, and yellow. That skeleton, resized and padded to your generation resolution, is what constrains head angle and tilt while the identity embedding handles who it is. Structure from the dots, likeness from the vector.
How it works
Under the hood it's short and boring, which is the compliment. It resizes your image to width × height with LANCZOS and white padding (so aspect ratio never distorts the face), runs the detector, picks the largest face in the frame, and draws the keypoints onto the canvas. The output is a plain IMAGE - no special type, no hidden state, exactly what you'd expect to wire anywhere.
The inputs that matter
- face_detector - the
FACE_DETECTORoutput of ID Embedding Model Loader. Don't substitute a random face-detection model; it's this pack's detector or nothing. - image - your control photo.
- width (default 864) and height (default 1152) - keep these matching your EmptyLatentImage. The pose map has to line up with the latent being generated, or the constraint lands on the wrong part of the canvas.
- mask (optional) - when a photo has several faces, the mask tells the detector which region is the one you care about. This is also how the pack's multi-ID workflow keeps two people from interfering.
Output and where it goes
One IMAGE out, and its only sane destination is Apply InfuseNet's image input, replacing the blank image in the default graph. That single swap is the difference between "a person who looks like them" and "a person who looks like them, at this angle."
Installing
Same pack, same steps as the rest of the family:
cd ComfyUI/custom_nodes
git clone https://github.com/bytedance/ComfyUI_InfiniteYou.git
cd ComfyUI_InfiniteYou
pip install -r requirements.txt
Then restart. ComfyUI Manager also finds it by searching ComfyUI_InfiniteYou.
Where people get burned
- "No face detected in the input pose image" kills the run, hard. It's a
ValueError, not a soft warning - the node refuses to draw a skeleton it can't find. A cleaner, more frontal reference fixes most cases; the det-size knob on ID Embedding Model Loader fixes the rest. - It's easy to over-constrain. You don't have to use this node at all. If your outputs all share the reference photo's expression or tilt and you wanted variety, the fix isn't a weaker pose - it's disconnecting the node and going back to the blank image.
- Mask gotcha: the mask is applied to the source image before detection, so a sloppy mask can crop out the face entirely and produce the "no face" error above.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| face_detector | MODEL | — | |
| image | IMAGE | — | |
| width | INT | 8640–2048 | — |
| height | INT | 11520–2048 | — |
| maskopt | MASK | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |