Commit 59bb1d36 authored by kavorite's avatar kavorite
Browse files

blur mask with color-sketch + add paint transparency slider

parent c34542a4
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@ import sys
import traceback

import numpy as np
from PIL import Image, ImageOps, ImageChops
from PIL import Image, ImageOps, ImageFilter, ImageEnhance

from modules import devices
from modules.processing import Processed, StableDiffusionProcessingImg2Img, process_images
@@ -59,7 +59,7 @@ def process_batch(p, input_dir, output_dir, args):
                processed_image.save(os.path.join(output_dir, filename))


def img2img(mode: int, prompt: str, negative_prompt: str, prompt_style: str, prompt_style2: str, init_img, init_img_with_mask, init_img_with_mask_orig, init_img_inpaint, init_mask_inpaint, mask_mode, steps: int, sampler_index: int, mask_blur: int, inpainting_fill: int, restore_faces: bool, tiling: bool, n_iter: int, batch_size: int, cfg_scale: float, denoising_strength: float, seed: int, subseed: int, subseed_strength: float, seed_resize_from_h: int, seed_resize_from_w: int, seed_enable_extras: bool, height: int, width: int, resize_mode: int, inpaint_full_res: bool, inpaint_full_res_padding: int, inpainting_mask_invert: int, img2img_batch_input_dir: str, img2img_batch_output_dir: str, *args):
def img2img(mode: int, prompt: str, negative_prompt: str, prompt_style: str, prompt_style2: str, init_img, init_img_with_mask, init_img_with_mask_orig, init_img_inpaint, init_mask_inpaint, mask_mode, steps: int, sampler_index: int, mask_blur: int, mask_alpha: float, inpainting_fill: int, restore_faces: bool, tiling: bool, n_iter: int, batch_size: int, cfg_scale: float, denoising_strength: float, seed: int, subseed: int, subseed_strength: float, seed_resize_from_h: int, seed_resize_from_w: int, seed_enable_extras: bool, height: int, width: int, resize_mode: int, inpaint_full_res: bool, inpaint_full_res_padding: int, inpainting_mask_invert: int, img2img_batch_input_dir: str, img2img_batch_output_dir: str, *args):
    is_inpaint = mode == 1
    is_batch = mode == 2

@@ -68,15 +68,20 @@ def img2img(mode: int, prompt: str, negative_prompt: str, prompt_style: str, pro
        if mask_mode == 0:
            image = init_img_with_mask
            is_mask_sketch = isinstance(image, dict)
            is_mask_paint = not is_mask_sketch
            if is_mask_sketch:
                # Sketch: mask iff. not transparent
                image, mask = image["image"], image["mask"]
                mask = np.array(mask)[..., -1] > 0
                pred = np.array(mask)[..., -1] > 0
            else:
                # Color-sketch: mask iff. painted over
                orig = init_img_with_mask_orig or image
                mask = np.any(np.array(image) != np.array(orig), axis=-1)
            mask = Image.fromarray(mask.astype(np.uint8) * 255, "L")
                pred = np.any(np.array(image) != np.array(orig), axis=-1)
            mask = Image.fromarray(pred.astype(np.uint8) * 255, "L")
            if is_mask_paint:
                mask = ImageEnhance.Brightness(mask).enhance(1 - mask_alpha / 100)
                blur = ImageFilter.GaussianBlur(mask_blur)
                image = Image.composite(image.filter(blur), orig, mask.filter(blur))
            image = image.convert("RGB")
        # Uploaded mask
        else:
+3 −0
Original line number Diff line number Diff line
@@ -854,6 +854,8 @@ def create_ui(wrap_gradio_gpu_call):
                        init_img_inpaint = gr.Image(label="Image for img2img", show_label=False, source="upload", interactive=True, type="pil", visible=False, elem_id="img_inpaint_base")
                        init_mask_inpaint = gr.Image(label="Mask", source="upload", interactive=True, type="pil", visible=False, elem_id="img_inpaint_mask")

                        show_mask_alpha = cmd_opts.gradio_inpaint_tool == "color-sketch"
                        mask_alpha = gr.Slider(label="Mask transparency", interactive=show_mask_alpha, visible=show_mask_alpha)
                        mask_blur = gr.Slider(label='Mask blur', minimum=0, maximum=64, step=1, value=4)

                        with gr.Row():
@@ -948,6 +950,7 @@ def create_ui(wrap_gradio_gpu_call):
                    steps,
                    sampler_index,
                    mask_blur,
                    mask_alpha,
                    inpainting_fill,
                    restore_faces,
                    tiling,