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 <noreply@anthropic.com>
This commit is contained in:
QualiaRain
2026-06-22 12:41:14 -04:00
parent 0485e8708f
commit ec3d4182cc
+1 -1
View File
@@ -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)