Stand-In VideoInputPreprocessor
The node that actually builds Stand-In's identity-conditioned input
- face_processor
- images
- face_rgba
- processed_images
- denoise_strength
This is the node the whole pack is actually named after. When the README says "Only images processed with this official preprocessor can fully unleash the power of Stand-In," this is the preprocessor it means - the one doing the real per-frame identity work, not just loading a model or cropping a photo.
Some context first, because this node makes a lot more sense once you know what it's feeding. Stand-In is WeChat Vision/Tencent's identity-preserving adapter for Wan video, released August 2025. It's notably lightweight - Kijai, who wrote ComfyUI-WanVideoWrapper and built his own support for it independently, noted only about 1% of the base model got retrained to make it work, and called it "pretty accurate," though "not quite as versatile as the bigger models such as Phantom." On his hardware it added roughly half a step of sampling overhead and a bit more VRAM from the KV cache - about 30 seconds extra on a 4090 for an 81-frame clip at 832×480 with optimizations on. The catch: the authors felt Kijai's implementation of the preprocessing step didn't quite match theirs, so they published this repo as the corrected, official version. This node is that correction.
How it works
Feed it your face_processor (from FaceProcessorLoader), your video frames (images), and an identity reference (face_rgba, from ApplyFaceProcessor). Per frame, it detects the face, matches the reference face's angle and size to it (match_angle_and_size), and blends the reference identity in through a feathered, dilated mask (dilation_kernel_size, feather_amount) so the paste doesn't look like a paste. There's also a small chance per frame of a random horizontal flip (random_horizontal_flip_chance) - read that as light augmentation, keeping the conditioning from locking onto one exact orientation across an entire clip. What comes out (processed_images) is the actual sequence you hand to your Stand-In-aware Wan sampler.
The inputs and outputs that matter
face_processor,images,face_rgba- the three required inputs. Everything else has a workable default.denoise_strength(0.1–1, default 0.5) - the setting you'll actually tune. Too high and the model drifts away from your source frames; too low and it barely touches anything. Start at 0.5 and nudge in small steps. It's also an output, relayed straight through - wire it directly into your KSampler's denoise widget instead of typing the same number in two places.confidence_threshold,face_crop_scale,dilation_kernel_size,feather_amount- fine at defaults for a first pass; come back to these once you can see what's not blending cleanly.with_neckandface_only_mode- make sure these agree with whatever you set onApplyFaceProcessor. Wiring a sharedFaceOnlyModeSwitchinto both nodes is the cleaner way to guarantee that.
Output: processed_images, which continues on toward your sampler, and the passthrough denoise_strength described above.
How to install it
cd ComfyUI/custom_nodes
git clone https://github.com/WeChatCV/Stand-In_Preprocessor_ComfyUI.git
cd Stand-In_Preprocessor_ComfyUI
pip install -r requirements.txt
Restart ComfyUI, or search "Stand-In Official Preprocessor ComfyUI Nodes" in ComfyUI Manager. The README's own prompt advice is worth carrying over here too: if you don't want to alter the subject's facial features, keep your text prompt as plain as "a man" or "a woman" rather than adding your own appearance description, and aim for frontal, medium-to-close-up framing - that's what Stand-In was tuned around.
Common issues & troubleshooting
You're not sure what mode you're even running. When Stand-In first launched, a fair number of people on r/comfyui were confused about what it actually did, with one comment admitting "I'm having trouble imagining how it's useful if it doesn't work with I2V." This node isn't plain text-to-video with a reference photo - it's specifically for prepping a driving video plus a reference face for a face-focused edit, closer to what another commenter called "basically face-id support in WAN... you can faceswap with it."
Output looks slower or heavier than the benchmarks you've seen. The README states plainly that this is a temporary node - KV cache and advanced attention mechanisms aren't implemented here yet, unlike Kijai's fuller wrapper integration. That's expected overhead for this pack, not a misconfiguration.
One frame in a batch looks mirrored for no obvious reason. That's random_horizontal_flip_chance doing exactly what it says on the default 0.05 chance per frame. Set it to 0 if you want fully deterministic output across a clip.
Identity drifts or barely shows up at all. That's almost always denoise_strength - walk it up or down in increments of 0.1 rather than jumping straight to the extremes.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| face_processor | FACE_PROCESSOR | — | |
| images | IMAGE | — | |
| face_rgba | IMAGE | — | |
| denoise_strength | FLOAT | 0.500.1–1 | — |
| confidence_threshold | FLOAT | 0.500.1–1 | — |
| face_crop_scale | FLOAT | 1.51–3 | — |
| dilation_kernel_size | INT | 100–50 | — |
| with_neck | BOOLEAN | true | — |
| face_only_mode | BOOLEAN | true | — |
| feather_amount | INT | 210–151 | — |
| random_horizontal_flip_chance | FLOAT | 0.050–1 | — |
| match_angle_and_size | BOOLEAN | true | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| processed_images | IMAGE | — |
| denoise_strength | FLOAT | — |