From 32fe60b594fb009db6f6d4432aa868675c3a702f Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 14 Feb 2025 16:26:25 -0500 Subject: [PATCH] update aci Signed-off-by: Vladimir Mandic --- modules/masking.py | 4 +-- scripts/automatic_color_inpaint.py | 53 +++++++++++++++++++----------- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/modules/masking.py b/modules/masking.py index c317240b1..8364e9369 100644 --- a/modules/masking.py +++ b/modules/masking.py @@ -408,6 +408,7 @@ def run_mask(input_image: Image.Image, input_mask: Image.Image = None, return_ty debug(f'Mask args legacy: blur={mask_blur} padding={mask_padding}') if invert is not None: opts.invert = invert + print('HERE', opts.mask_blur, mask_blur) if mask_blur is not None: # compatibility with old img2img values which uses px values opts.mask_blur = round(4 * mask_blur / size, 3) if mask_padding is not None: # compatibility with old img2img values which uses px values @@ -421,7 +422,7 @@ def run_mask(input_image: Image.Image, input_mask: Image.Image = None, return_ty mask = run_segment(input_image, input_mask) mask = cv2.resize(mask, (input_image.width, input_image.height), interpolation=cv2.INTER_LANCZOS4) - debug(f'Mask shape={mask.shape} opts={opts}') + shared.log.trace(f'Mask shape={mask.shape} opts={opts} fn={fn}') if opts.mask_erode > 0: try: kernel = np.ones((int(opts.mask_erode * size / 4) + 1, int(opts.mask_erode * size / 4) + 1), np.uint8) @@ -446,7 +447,6 @@ def run_mask(input_image: Image.Image, input_mask: Image.Image = None, return_ty if opts.invert: mask = np.invert(mask) - return_type = return_type or opts.preview_type # mask_size = np.count_nonzero(mask) diff --git a/scripts/automatic_color_inpaint.py b/scripts/automatic_color_inpaint.py index 095631a80..227a445fa 100644 --- a/scripts/automatic_color_inpaint.py +++ b/scripts/automatic_color_inpaint.py @@ -1,7 +1,7 @@ import gradio as gr from PIL import Image import numpy as np -from modules import shared, scripts, processing +from modules import shared, scripts, processing, masking """ Automatic Color Inpaint Script for SD.NEXT - SD & SDXL Support @@ -51,46 +51,56 @@ class Script(scripts.Script): minimum=0, maximum=100, step=1, - value=25, - label="ACI: Color Tolerance", + value=65, + label="ACI: Color tolerance", ) denoising_slider = gr.Slider( minimum=0.01, maximum=1, step=0.01, - value=1, - label="ACI: Denoising Strength", + value=0.9, + label="ACI: Denoising strength", ) with gr.Row(): - padding_slider = gr.Slider( + dilate_slider = gr.Slider( minimum=0, - maximum=256, - step=1, - value=2, - label="ACI: Mask Padding", + maximum=1, + step=0.01, + value=0.0, + label="ACI: Mask dilate", # info="(Recommended value = 2 to remove leftovers at edges)" ) + erode_slider = gr.Slider( + minimum=0, + maximum=1, + step=0.01, + value=0, + label="ACI: Mask erode", + # info="(Recommended value = 0 for sharpness)" + ) blur_slider = gr.Slider( minimum=0, - maximum=64, - step=1, - value=0, - label="ACI: Mask Blur", + maximum=1, + step=0.01, + value=0.15, + label="ACI: Mask blur", # info="(Recommended value = 0 for sharpness)" ) - return [color_picker, tolerance_slider, padding_slider, blur_slider, denoising_slider] + return [color_picker, tolerance_slider, dilate_slider, erode_slider, blur_slider, denoising_slider] # Run pipeline def run(self, p: processing.StableDiffusionProcessing, *args): # pylint: disable=arguments-differ if shared.sd_model_type not in supported_models: shared.log.warning(f'MoD: class={shared.sd_model.__class__.__name__} model={shared.sd_model_type} required={supported_models}') return None - color_to_mask_hex, mask_tolerance, mask_padding, mask_blur, inpaint_denoising_strength = args + if not hasattr(p, 'init_images') or p.init_images is None or len(p.init_images) == 0: + return None + color_to_mask_hex, mask_tolerance, mask_dilate, mask_erode, mask_blur, inpaint_denoising_strength = args # Convert hex color to RGB tuple (0-255) color_to_mask_rgb = tuple(int(color_to_mask_hex[i:i+2], 16) for i in (1, 3, 5)) - shared.log.debug(f'ACI: rgb={color_to_mask_rgb} tolerance={mask_tolerance} padding={mask_padding} blur={mask_blur} denoise={inpaint_denoising_strength}') + shared.log.debug(f'ACI: rgb={color_to_mask_rgb} tolerance={mask_tolerance} dilate={mask_dilate} erode={mask_erode} blur={mask_blur} denoise={inpaint_denoising_strength}') # Create Color Mask using vectorized operations init_image = p.init_images[0].convert("RGB") @@ -115,9 +125,12 @@ class Script(scripts.Script): p.image_mask = mask_image # override inpaint parameters - p.inpaint_full_res = True - p.inpaint_full_res_padding = mask_padding - p.mask_blur = mask_blur + p.inpaint_full_res = False # always use full res p.denoising_strength = inpaint_denoising_strength + p.mask_blur = None # do not use legacy mask blur + p.inpaint_full_res_padding = None # do not use legacy mask blur + masking.opts.mask_blur = mask_blur # new masking params triggers masking.py:run_mask + masking.opts.mask_erode = mask_erode + masking.opts.mask_dilate = mask_dilate return None