Merge Warps
The abandoned node for merging two face streams (read this before trusting it)
- crop0
- mask0
- warp0
- crop1
- mask1
- warp1
- IMAGE
- MASK
- WARP
Let's be upfront, because the pack's own author is: Merge Warps "probably doesn't work anymore." That's a direct quote from the README. The node was written to combine two separate face crops - think two DetectFaces/CropFaces streams feeding two different refine passes - into a single crops/masks/warps bundle so WarpFacesBack could paste both results back in one go. But the author changed WarpFacesBack and FaceDetailer after writing it, the glue stopped lining up, and it's been sitting in the repo since with a "needs more testing" note rather than a fix.
So this article is half documentation, half warning label.
What it's supposed to do
Six inputs, in matched pairs: crop0/mask0/warp0 and crop1/mask1/warp1. Its entire logic, per the source, is:
crops = torch.vstack((crop0, crop1))
masks = torch.vstack((mask0, mask1))
warps = warp0 + warp1
Concatenate the two crop batches, concatenate the two mask batches, concatenate the two warp lists, and emit them as IMAGE, MASK, and WARP. That's it - there's no blending or normalization, just stacking. The intent was a router: two independent face pipelines converge into one stream that the paste-back node can handle as a single list.
The problem is the contract it assumes. It concatenates warps as plain lists and stacks tensors positionally, and the downstream paste-back now expects crops/masks/warps to all be aligned with the same face metadata the way CropFaces emits them. Merged streams don't carry that alignment, so the paste-back can land crops in the wrong slots or choke on the shape mismatch. The author knows; that's why the disclaimer is in the README.
How to use it today
Short version: don't build a new workflow on it. If you're combining two face streams, the robust path is to run two detect-crop-refine-warp chains side by side and composite their outputs - each WarpFacesBack gets its own untouched original, then merge the two results with a standard image-composite node. That's more nodes but it uses the supported machinery instead of a half-abandoned one.
If you still want to experiment with Merge Warps (it ships, it imports, it might just work in your case), keep the bar low: identical crop_size on both streams so the vstack shapes match, and verify the paste-back output visually before trusting it on a production batch. And test it first with one face per stream - the happy path - before anything fancier.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/dchatel/comfyui_facetools
or ComfyUI Manager → search facetools → restart. No extra models or packages beyond the pack's shared install. Then, honestly, the most useful thing you can do with this node is understand why you probably don't need it.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| crop0 | IMAGE | — | |
| mask0 | MASK | — | |
| warp0 | WARP | — | |
| crop1 | IMAGE | — | |
| mask1 | MASK | — | |
| warp1 | WARP | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| MASK | MASK | — |
| WARP | WARP | — |