Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 17 additions & 4 deletions modules/processing.py
Original file line number Diff line number Diff line change
Expand Up @@ -1150,7 +1150,7 @@ def parse_extra_network_prompts(self):
class StableDiffusionProcessingImg2Img(StableDiffusionProcessing):
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)

self.init_images = init_images
Expand All @@ -1161,7 +1161,11 @@ def __init__(self, init_images: list = None, resize_mode: int = 0, denoising_str
self.image_mask = mask
self.latent_mask = 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
Comment on lines -1164 to +1168
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dmzkrsk As best I can tell, this section of code should prevent the failure mode you described. Do you see anything obviously wrong here?

self.inpainting_fill = inpainting_fill
self.inpaint_full_res = inpaint_full_res
self.inpaint_full_res_padding = inpaint_full_res_padding
Expand All @@ -1183,8 +1187,17 @@ def init(self, all_prompts, all_seeds, all_subseeds):
if self.inpainting_mask_invert:
image_mask = ImageOps.invert(image_mask)

if self.mask_blur > 0:
image_mask = image_mask.filter(ImageFilter.GaussianBlur(self.mask_blur))
if self.mask_blur_x > 0:
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:
self.mask_for_overlay = image_mask
Expand Down
30 changes: 21 additions & 9 deletions scripts/outpainting_mk_2.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,6 @@ def run(self, p, _, pixels, mask_blur, direction, noise_q, color_variation):
process_width = p.width
process_height = p.height

p.mask_blur = mask_blur*4
p.inpaint_full_res = False
p.inpainting_fill = 1
p.do_not_save_samples = True
Expand All @@ -156,6 +155,19 @@ def run(self, p, _, pixels, mask_blur, direction, noise_q, color_variation):
up = pixels if "up" 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]
target_w = math.ceil((init_img.width + left + right) / 64) * 64
target_h = math.ceil((init_img.height + up + down) / 64) * 64
Expand Down Expand Up @@ -191,10 +203,10 @@ def expand(init, count, expand_pixels, is_left=False, is_right=False, is_top=Fal
mask = Image.new("RGB", (process_res_w, process_res_h), "white")
draw = ImageDraw.Draw(mask)
draw.rectangle((
expand_pixels + mask_blur if is_left else 0,
expand_pixels + mask_blur if is_top else 0,
mask.width - expand_pixels - mask_blur if is_right else res_w,
mask.height - expand_pixels - mask_blur if is_bottom else res_h,
expand_pixels + mask_blur_x if is_left else 0,
expand_pixels + mask_blur_y if is_top else 0,
mask.width - expand_pixels - mask_blur_x if is_right else res_w,
mask.height - expand_pixels - mask_blur_y if is_bottom else res_h,
), fill="black")

np_image = (np.asarray(img) / 255.0).astype(np.float64)
Expand Down Expand Up @@ -224,10 +236,10 @@ def expand(init, count, expand_pixels, is_left=False, is_right=False, is_top=Fal
latent_mask = Image.new("RGB", (p.width, p.height), "white")
draw = ImageDraw.Draw(latent_mask)
draw.rectangle((
expand_pixels + mask_blur * 2 if is_left else 0,
expand_pixels + mask_blur * 2 if is_top else 0,
mask.width - expand_pixels - mask_blur * 2 if is_right else res_w,
mask.height - expand_pixels - mask_blur * 2 if is_bottom else res_h,
expand_pixels + mask_blur_x * 2 if is_left else 0,
expand_pixels + mask_blur_y * 2 if is_top else 0,
mask.width - expand_pixels - mask_blur_x * 2 if is_right else res_w,
mask.height - expand_pixels - mask_blur_y * 2 if is_bottom else res_h,
), fill="black")
p.latent_mask = latent_mask

Expand Down