update aci

Signed-off-by: Vladimir Mandic <mandic00@live.com>
This commit is contained in:
Vladimir Mandic
2025-02-14 16:26:25 -05:00
parent 8e5e5926c8
commit 32fe60b594
2 changed files with 35 additions and 22 deletions
+2 -2
View File
@@ -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)
+33 -20
View File
@@ -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