This commit is contained in:
Haoming 2026-05-25 11:43:54 +08:00
parent 52c21579b0
commit 37a4599f61

View File

@ -90,11 +90,11 @@ class ControlNetForForgeOfficial(scripts.Script):
return enabled_units
@staticmethod
def try_crop_image_with_a1111_mask(p: StableDiffusionProcessing, unit: ControlNetUnit, input_image: np.ndarray, resize_mode: external_code.ResizeMode, preprocessor) -> np.ndarray:
def try_crop_image_with_a1111_mask(p: StableDiffusionProcessing, unit: ControlNetUnit, input_image: np.ndarray, resize_mode: external_code.ResizeMode, preprocessor, *, _is_mask: bool = False) -> np.ndarray:
a1111_mask_image: Optional[Image.Image] = getattr(p, "image_mask", None)
is_only_masked_inpaint = issubclass(type(p), StableDiffusionProcessingImg2Img) and p.inpaint_full_res and a1111_mask_image is not None
if preprocessor.corp_image_with_a1111_mask_when_in_img2img_inpaint_tab and is_only_masked_inpaint:
logger.info("Crop input image based on A1111 mask.")
logger.info(f"Cropping input {'mask' if _is_mask else 'image'} based on WebUI mask")
input_image = [input_image[:, :, i] for i in range(input_image.shape[2])]
input_image = [Image.fromarray(x) for x in input_image]
@ -206,7 +206,7 @@ class ControlNetForForgeOfficial(scripts.Script):
if mask is not None:
mask = cv2.resize(HWC3(mask), (image.shape[1], image.shape[0]), interpolation=cv2.INTER_NEAREST)
mask = self.try_crop_image_with_a1111_mask(p, unit, mask, resize_mode, preprocessor)
mask = self.try_crop_image_with_a1111_mask(p, unit, mask, resize_mode, preprocessor, _is_mask=True)
image_list = [[image, mask]]