Update ComfyUI/custom_nodes/ComfyUI-BrushNet/brushnet_nodes.py
Browse files
ComfyUI/custom_nodes/ComfyUI-BrushNet/brushnet_nodes.py
CHANGED
@@ -493,26 +493,31 @@ class BlendInpaint:
|
|
493 |
cut_width = min(cut_width, width - x0)
|
494 |
cut_height = min(cut_height, height - y0)
|
495 |
|
|
|
496 |
scaled_inpaint = F.interpolate(inpaint[i].permute(2, 0, 1).unsqueeze(0), size=(cut_height, cut_width), mode='bilinear', align_corners=False).squeeze(0).permute(1, 2, 0)
|
497 |
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
# Create a new mask for blending
|
502 |
-
blend_mask = torch.zeros((height, width), device=mask.device, dtype=mask.dtype)
|
503 |
-
blend_mask[y0:y0+cut_height, x0:x0+cut_width] = 1.0
|
504 |
|
505 |
-
# Apply Gaussian blur to the
|
506 |
-
blurred_mask = transform(
|
507 |
blurred.append(blurred_mask)
|
508 |
|
509 |
-
#
|
510 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
511 |
|
512 |
return (torch.stack(ret), torch.stack(blurred))
|
513 |
|
514 |
|
515 |
|
|
|
516 |
def scale_mask_and_image(image, mask, width, height):
|
517 |
h0, w0 = mask.shape
|
518 |
iy, ix = (mask == 1).nonzero(as_tuple=True)
|
|
|
493 |
cut_width = min(cut_width, width - x0)
|
494 |
cut_height = min(cut_height, height - y0)
|
495 |
|
496 |
+
# Scale inpainted image to match the cut size
|
497 |
scaled_inpaint = F.interpolate(inpaint[i].permute(2, 0, 1).unsqueeze(0), size=(cut_height, cut_width), mode='bilinear', align_corners=False).squeeze(0).permute(1, 2, 0)
|
498 |
|
499 |
+
# Create a mask for the inpainted region
|
500 |
+
inpaint_mask = torch.zeros((height, width), device=mask.device, dtype=mask.dtype)
|
501 |
+
inpaint_mask[y0:y0+cut_height, x0:x0+cut_width] = F.interpolate(mask[i][None, None, :, :], size=(cut_height, cut_width), mode='nearest').squeeze()
|
|
|
|
|
|
|
502 |
|
503 |
+
# Apply Gaussian blur to the inpaint mask
|
504 |
+
blurred_mask = transform(inpaint_mask.unsqueeze(0).unsqueeze(0)).squeeze(0).squeeze(0)
|
505 |
blurred.append(blurred_mask)
|
506 |
|
507 |
+
# Create the result by blending only the masked area
|
508 |
+
result = original[i].clone()
|
509 |
+
result[y0:y0+cut_height, x0:x0+cut_width] = (
|
510 |
+
original[i][y0:y0+cut_height, x0:x0+cut_width] * (1 - blurred_mask[y0:y0+cut_height, x0:x0+cut_width, None]) +
|
511 |
+
scaled_inpaint * blurred_mask[y0:y0+cut_height, x0:x0+cut_width, None]
|
512 |
+
)
|
513 |
+
|
514 |
+
ret.append(result)
|
515 |
|
516 |
return (torch.stack(ret), torch.stack(blurred))
|
517 |
|
518 |
|
519 |
|
520 |
+
|
521 |
def scale_mask_and_image(image, mask, width, height):
|
522 |
h0, w0 = mask.shape
|
523 |
iy, ix = (mask == 1).nonzero(as_tuple=True)
|