From ec3d4182ccb461a7c0c356a14ee123bfe3f85f46 Mon Sep 17 00:00:00 2001 From: QualiaRain <44004657+QualiaRain@users.noreply.github.com> Date: Mon, 22 Jun 2026 12:41:14 -0400 Subject: [PATCH] fix(mask): guard zero-area divide in auto-mask Edge mode In get_mask() Edge mode, largest_size is set to 0 when there are no contours, but the luminance loop is also entered when contours exist whose largest has zero area (e.g. thin 1px / degenerate features whose cv2.contourArea is 0). That path divides by largest_size and raises ZeroDivisionError, crashing auto-masking. Guard the divide: when largest_size is 0 the scaled luminance is 0, so the loop breaks on the first iteration and yields an empty mask (the sensible no-region result). Co-Authored-By: Claude --- modules/masking.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/masking.py b/modules/masking.py index ca8db1040..76bd93137 100644 --- a/modules/masking.py +++ b/modules/masking.py @@ -340,7 +340,7 @@ def get_mask(input_image: gr.Image, input_mask: gr.Image): largest_size = cv2.contourArea(contours[0]) if len(contours) > 0 else 0 for i, contour in enumerate(contours): area_size = cv2.contourArea(contour) - luminance = int(255.0 * area_size / largest_size) + luminance = int(255.0 * area_size / largest_size) if largest_size > 0 else 0 if luminance < 1: break cv2.drawContours(output_mask, contours, i, (luminance), -1)