blur mask with color-sketch + add paint transparency slider
This commit is contained in:
parent
c34542a483
commit
59bb1d36ea
2 changed files with 16 additions and 8 deletions
|
@ -4,7 +4,7 @@ import sys
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from PIL import Image, ImageOps, ImageChops
|
from PIL import Image, ImageOps, ImageFilter, ImageEnhance
|
||||||
|
|
||||||
from modules import devices
|
from modules import devices
|
||||||
from modules.processing import Processed, StableDiffusionProcessingImg2Img, process_images
|
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))
|
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_inpaint = mode == 1
|
||||||
is_batch = mode == 2
|
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:
|
if mask_mode == 0:
|
||||||
image = init_img_with_mask
|
image = init_img_with_mask
|
||||||
is_mask_sketch = isinstance(image, dict)
|
is_mask_sketch = isinstance(image, dict)
|
||||||
|
is_mask_paint = not is_mask_sketch
|
||||||
if is_mask_sketch:
|
if is_mask_sketch:
|
||||||
# Sketch: mask iff. not transparent
|
# Sketch: mask iff. not transparent
|
||||||
image, mask = image["image"], image["mask"]
|
image, mask = image["image"], image["mask"]
|
||||||
mask = np.array(mask)[..., -1] > 0
|
pred = np.array(mask)[..., -1] > 0
|
||||||
else:
|
else:
|
||||||
# Color-sketch: mask iff. painted over
|
# Color-sketch: mask iff. painted over
|
||||||
orig = init_img_with_mask_orig or image
|
orig = init_img_with_mask_orig or image
|
||||||
mask = np.any(np.array(image) != np.array(orig), axis=-1)
|
pred = np.any(np.array(image) != np.array(orig), axis=-1)
|
||||||
mask = Image.fromarray(mask.astype(np.uint8) * 255, "L")
|
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")
|
image = image.convert("RGB")
|
||||||
# Uploaded mask
|
# Uploaded mask
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -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_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")
|
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)
|
mask_blur = gr.Slider(label='Mask blur', minimum=0, maximum=64, step=1, value=4)
|
||||||
|
|
||||||
with gr.Row():
|
with gr.Row():
|
||||||
|
@ -948,6 +950,7 @@ def create_ui(wrap_gradio_gpu_call):
|
||||||
steps,
|
steps,
|
||||||
sampler_index,
|
sampler_index,
|
||||||
mask_blur,
|
mask_blur,
|
||||||
|
mask_alpha,
|
||||||
inpainting_fill,
|
inpainting_fill,
|
||||||
restore_faces,
|
restore_faces,
|
||||||
tiling,
|
tiling,
|
||||||
|
|
Loading…
Reference in a new issue