diff options
-rw-r--r-- | modules/img2img.py | 3 | ||||
-rw-r--r-- | modules/processing.py | 10 | ||||
-rw-r--r-- | modules/ui.py | 10 |
3 files changed, 18 insertions, 5 deletions
diff --git a/modules/img2img.py b/modules/img2img.py index f14226f7..06de2db3 100644 --- a/modules/img2img.py +++ b/modules/img2img.py @@ -9,7 +9,7 @@ from modules.ui import plaintext_to_html import modules.images as images
import modules.scripts
-def img2img(prompt: str, init_img, init_img_with_mask, steps: int, sampler_index: int, mask_blur: int, inpainting_fill: int, use_GFPGAN: bool, mode: int, n_iter: int, batch_size: int, cfg_scale: float, denoising_strength: float, seed: int, height: int, width: int, resize_mode: int, upscaler_name: str, upscale_overlap: int, inpaint_full_res: bool, *args):
+def img2img(prompt: str, init_img, init_img_with_mask, steps: int, sampler_index: int, mask_blur: int, inpainting_fill: int, use_GFPGAN: bool, mode: int, n_iter: int, batch_size: int, cfg_scale: float, denoising_strength: float, seed: int, height: int, width: int, resize_mode: int, upscaler_name: str, upscale_overlap: int, inpaint_full_res: bool, inpainting_mask_invert: int, *args):
is_inpaint = mode == 1
is_loopback = mode == 2
is_upscale = mode == 3
@@ -44,6 +44,7 @@ def img2img(prompt: str, init_img, init_img_with_mask, steps: int, sampler_index resize_mode=resize_mode,
denoising_strength=denoising_strength,
inpaint_full_res=inpaint_full_res,
+ inpainting_mask_invert=inpainting_mask_invert,
extra_generation_params={"Denoising Strength": denoising_strength}
)
diff --git a/modules/processing.py b/modules/processing.py index cab79b4c..2830209e 100644 --- a/modules/processing.py +++ b/modules/processing.py @@ -282,7 +282,7 @@ def fill(image, mask): class StableDiffusionProcessingImg2Img(StableDiffusionProcessing):
sampler = None
- def __init__(self, init_images=None, resize_mode=0, denoising_strength=0.75, mask=None, mask_blur=4, inpainting_fill=0, inpaint_full_res=True, **kwargs):
+ def __init__(self, init_images=None, resize_mode=0, denoising_strength=0.75, mask=None, mask_blur=4, inpainting_fill=0, inpaint_full_res=True, inpainting_mask_invert=0, **kwargs):
super().__init__(**kwargs)
self.init_images = init_images
@@ -294,6 +294,7 @@ class StableDiffusionProcessingImg2Img(StableDiffusionProcessing): self.mask_blur = mask_blur
self.inpainting_fill = inpainting_fill
self.inpaint_full_res = inpaint_full_res
+ self.inpainting_mask_invert = inpainting_mask_invert
self.mask = None
self.nmask = None
@@ -302,8 +303,13 @@ class StableDiffusionProcessingImg2Img(StableDiffusionProcessing): crop_region = None
if self.image_mask is not None:
+ self.image_mask = self.image_mask.convert('L')
+
+ if self.inpainting_mask_invert:
+ self.image_mask = ImageOps.invert(self.image_mask)
+
if self.mask_blur > 0:
- self.image_mask = self.image_mask.filter(ImageFilter.GaussianBlur(self.mask_blur)).convert('L')
+ self.image_mask = self.image_mask.filter(ImageFilter.GaussianBlur(self.mask_blur))
if self.inpaint_full_res:
self.mask_for_overlay = self.image_mask
diff --git a/modules/ui.py b/modules/ui.py index 4256cdac..72a0687c 100644 --- a/modules/ui.py +++ b/modules/ui.py @@ -241,11 +241,14 @@ def create_ui(txt2img, img2img, run_extras, run_pnginfo): steps = gr.Slider(minimum=1, maximum=150, step=1, label="Sampling Steps", value=20)
sampler_index = gr.Radio(label='Sampling method', choices=[x.name for x in samplers_for_img2img], value=samplers_for_img2img[0].name, type="index")
mask_blur = gr.Slider(label='Mask blur', minimum=0, maximum=64, step=1, value=4, visible=False)
- inpainting_fill = gr.Radio(label='Msked content', choices=['fill', 'original', 'latent noise', 'latent nothing'], value='fill', type="index", visible=False)
+ inpainting_fill = gr.Radio(label='Masked content', choices=['fill', 'original', 'latent noise', 'latent nothing'], value='fill', type="index", visible=False)
with gr.Row():
- use_gfpgan = gr.Checkbox(label='GFPGAN', value=False, visible=gfpgan.have_gfpgan)
inpaint_full_res = gr.Checkbox(label='Inpaint at full resolution', value=True, visible=False)
+ inpainting_mask_invert = gr.Radio(label='Masking mode', choices=['Inpaint masked', 'Inpaint not masked'], value='Inpaint masked', type="index", visible=False)
+
+ with gr.Row():
+ use_gfpgan = gr.Checkbox(label='GFPGAN', value=False, visible=gfpgan.have_gfpgan)
with gr.Row():
sd_upscale_upscaler_name = gr.Radio(label='Upscaler', choices=list(shared.sd_upscalers.keys()), value=list(shared.sd_upscalers.keys())[0], visible=False)
@@ -299,6 +302,7 @@ def create_ui(txt2img, img2img, run_extras, run_pnginfo): sd_upscale_upscaler_name: gr_show(is_upscale),
sd_upscale_overlap: gr_show(is_upscale),
inpaint_full_res: gr_show(is_inpaint),
+ inpainting_mask_invert: gr_show(is_inpaint),
}
switch_mode.change(
@@ -314,6 +318,7 @@ def create_ui(txt2img, img2img, run_extras, run_pnginfo): sd_upscale_upscaler_name,
sd_upscale_overlap,
inpaint_full_res,
+ inpainting_mask_invert,
]
)
@@ -340,6 +345,7 @@ def create_ui(txt2img, img2img, run_extras, run_pnginfo): sd_upscale_upscaler_name,
sd_upscale_overlap,
inpaint_full_res,
+ inpainting_mask_invert,
] + custom_inputs,
outputs=[
img2img_gallery,
|