Merge pull request #10295 from Splendide-Imaginarius/mk2-blur-mask
Split mask blur into X and Y components, patch Outpainting MK2 accordingly
This commit is contained in:
commit
f9606b8826
@ -1150,7 +1150,7 @@ class StableDiffusionProcessingTxt2Img(StableDiffusionProcessing):
|
|||||||
class StableDiffusionProcessingImg2Img(StableDiffusionProcessing):
|
class StableDiffusionProcessingImg2Img(StableDiffusionProcessing):
|
||||||
sampler = None
|
sampler = None
|
||||||
|
|
||||||
def __init__(self, init_images: list = None, resize_mode: int = 0, denoising_strength: float = 0.75, image_cfg_scale: float = None, mask: Any = None, mask_blur: int = 4, inpainting_fill: int = 0, inpaint_full_res: bool = True, inpaint_full_res_padding: int = 0, inpainting_mask_invert: int = 0, initial_noise_multiplier: float = None, **kwargs):
|
def __init__(self, init_images: list = None, resize_mode: int = 0, denoising_strength: float = 0.75, image_cfg_scale: float = None, mask: Any = None, mask_blur: int = None, mask_blur_x: int = 4, mask_blur_y: int = 4, inpainting_fill: int = 0, inpaint_full_res: bool = True, inpaint_full_res_padding: int = 0, inpainting_mask_invert: int = 0, initial_noise_multiplier: float = None, **kwargs):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
self.init_images = init_images
|
self.init_images = init_images
|
||||||
@ -1161,7 +1161,11 @@ class StableDiffusionProcessingImg2Img(StableDiffusionProcessing):
|
|||||||
self.image_mask = mask
|
self.image_mask = mask
|
||||||
self.latent_mask = None
|
self.latent_mask = None
|
||||||
self.mask_for_overlay = None
|
self.mask_for_overlay = None
|
||||||
self.mask_blur = mask_blur
|
if mask_blur is not None:
|
||||||
|
mask_blur_x = mask_blur
|
||||||
|
mask_blur_y = mask_blur
|
||||||
|
self.mask_blur_x = mask_blur_x
|
||||||
|
self.mask_blur_y = mask_blur_y
|
||||||
self.inpainting_fill = inpainting_fill
|
self.inpainting_fill = inpainting_fill
|
||||||
self.inpaint_full_res = inpaint_full_res
|
self.inpaint_full_res = inpaint_full_res
|
||||||
self.inpaint_full_res_padding = inpaint_full_res_padding
|
self.inpaint_full_res_padding = inpaint_full_res_padding
|
||||||
@ -1183,8 +1187,17 @@ class StableDiffusionProcessingImg2Img(StableDiffusionProcessing):
|
|||||||
if self.inpainting_mask_invert:
|
if self.inpainting_mask_invert:
|
||||||
image_mask = ImageOps.invert(image_mask)
|
image_mask = ImageOps.invert(image_mask)
|
||||||
|
|
||||||
if self.mask_blur > 0:
|
if self.mask_blur_x > 0:
|
||||||
image_mask = image_mask.filter(ImageFilter.GaussianBlur(self.mask_blur))
|
np_mask = np.array(image_mask)
|
||||||
|
kernel_size = 2 * int(4 * self.mask_blur_x + 0.5) + 1
|
||||||
|
np_mask = cv2.GaussianBlur(np_mask, (kernel_size, 1), self.mask_blur_x)
|
||||||
|
image_mask = Image.fromarray(np_mask)
|
||||||
|
|
||||||
|
if self.mask_blur_y > 0:
|
||||||
|
np_mask = np.array(image_mask)
|
||||||
|
kernel_size = 2 * int(4 * self.mask_blur_y + 0.5) + 1
|
||||||
|
np_mask = cv2.GaussianBlur(np_mask, (1, kernel_size), self.mask_blur_y)
|
||||||
|
image_mask = Image.fromarray(np_mask)
|
||||||
|
|
||||||
if self.inpaint_full_res:
|
if self.inpaint_full_res:
|
||||||
self.mask_for_overlay = image_mask
|
self.mask_for_overlay = image_mask
|
||||||
|
@ -145,7 +145,6 @@ class Script(scripts.Script):
|
|||||||
process_width = p.width
|
process_width = p.width
|
||||||
process_height = p.height
|
process_height = p.height
|
||||||
|
|
||||||
p.mask_blur = mask_blur*4
|
|
||||||
p.inpaint_full_res = False
|
p.inpaint_full_res = False
|
||||||
p.inpainting_fill = 1
|
p.inpainting_fill = 1
|
||||||
p.do_not_save_samples = True
|
p.do_not_save_samples = True
|
||||||
@ -156,6 +155,19 @@ class Script(scripts.Script):
|
|||||||
up = pixels if "up" in direction else 0
|
up = pixels if "up" in direction else 0
|
||||||
down = pixels if "down" in direction else 0
|
down = pixels if "down" in direction else 0
|
||||||
|
|
||||||
|
if left > 0 or right > 0:
|
||||||
|
mask_blur_x = mask_blur
|
||||||
|
else:
|
||||||
|
mask_blur_x = 0
|
||||||
|
|
||||||
|
if up > 0 or down > 0:
|
||||||
|
mask_blur_y = mask_blur
|
||||||
|
else:
|
||||||
|
mask_blur_y = 0
|
||||||
|
|
||||||
|
p.mask_blur_x = mask_blur_x*4
|
||||||
|
p.mask_blur_y = mask_blur_y*4
|
||||||
|
|
||||||
init_img = p.init_images[0]
|
init_img = p.init_images[0]
|
||||||
target_w = math.ceil((init_img.width + left + right) / 64) * 64
|
target_w = math.ceil((init_img.width + left + right) / 64) * 64
|
||||||
target_h = math.ceil((init_img.height + up + down) / 64) * 64
|
target_h = math.ceil((init_img.height + up + down) / 64) * 64
|
||||||
@ -191,10 +203,10 @@ class Script(scripts.Script):
|
|||||||
mask = Image.new("RGB", (process_res_w, process_res_h), "white")
|
mask = Image.new("RGB", (process_res_w, process_res_h), "white")
|
||||||
draw = ImageDraw.Draw(mask)
|
draw = ImageDraw.Draw(mask)
|
||||||
draw.rectangle((
|
draw.rectangle((
|
||||||
expand_pixels + mask_blur if is_left else 0,
|
expand_pixels + mask_blur_x if is_left else 0,
|
||||||
expand_pixels + mask_blur if is_top else 0,
|
expand_pixels + mask_blur_y if is_top else 0,
|
||||||
mask.width - expand_pixels - mask_blur if is_right else res_w,
|
mask.width - expand_pixels - mask_blur_x if is_right else res_w,
|
||||||
mask.height - expand_pixels - mask_blur if is_bottom else res_h,
|
mask.height - expand_pixels - mask_blur_y if is_bottom else res_h,
|
||||||
), fill="black")
|
), fill="black")
|
||||||
|
|
||||||
np_image = (np.asarray(img) / 255.0).astype(np.float64)
|
np_image = (np.asarray(img) / 255.0).astype(np.float64)
|
||||||
@ -224,10 +236,10 @@ class Script(scripts.Script):
|
|||||||
latent_mask = Image.new("RGB", (p.width, p.height), "white")
|
latent_mask = Image.new("RGB", (p.width, p.height), "white")
|
||||||
draw = ImageDraw.Draw(latent_mask)
|
draw = ImageDraw.Draw(latent_mask)
|
||||||
draw.rectangle((
|
draw.rectangle((
|
||||||
expand_pixels + mask_blur * 2 if is_left else 0,
|
expand_pixels + mask_blur_x * 2 if is_left else 0,
|
||||||
expand_pixels + mask_blur * 2 if is_top else 0,
|
expand_pixels + mask_blur_y * 2 if is_top else 0,
|
||||||
mask.width - expand_pixels - mask_blur * 2 if is_right else res_w,
|
mask.width - expand_pixels - mask_blur_x * 2 if is_right else res_w,
|
||||||
mask.height - expand_pixels - mask_blur * 2 if is_bottom else res_h,
|
mask.height - expand_pixels - mask_blur_y * 2 if is_bottom else res_h,
|
||||||
), fill="black")
|
), fill="black")
|
||||||
p.latent_mask = latent_mask
|
p.latent_mask = latent_mask
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user