aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/img2img.py10
-rw-r--r--modules/processing.py2
-rw-r--r--modules/sd_samplers_cfg_denoiser.py11
-rw-r--r--modules/sd_samplers_common.py2
-rw-r--r--modules/ui.py14
5 files changed, 19 insertions, 20 deletions
diff --git a/modules/img2img.py b/modules/img2img.py
index 240d0588..023808d6 100644
--- a/modules/img2img.py
+++ b/modules/img2img.py
@@ -134,7 +134,7 @@ def img2img(id_task: str,
mask_alpha: float,
mask_blend_power: float,
mask_blend_scale: float,
- mask_blend_offset: float,
+ inpaint_detail_preservation: float,
inpainting_fill: int,
n_iter: int,
batch_size: int,
@@ -216,7 +216,7 @@ def img2img(id_task: str,
mask_blur=mask_blur,
mask_blend_power=mask_blend_power,
mask_blend_scale=mask_blend_scale,
- mask_blend_offset=mask_blend_offset,
+ inpaint_detail_preservation=inpaint_detail_preservation,
inpainting_fill=inpainting_fill,
resize_mode=resize_mode,
denoising_strength=denoising_strength,
@@ -237,9 +237,9 @@ def img2img(id_task: str,
if mask:
p.extra_generation_params["Mask blur"] = mask_blur
- p.extra_generation_params["Mask blend power"] = mask_blend_power
- p.extra_generation_params["Mask blend scale"] = mask_blend_scale
- p.extra_generation_params["Mask blend offset"] = mask_blend_offset
+ p.extra_generation_params["Mask blending bias"] = mask_blend_power
+ p.extra_generation_params["Mask blending preservation"] = mask_blend_scale
+ p.extra_generation_params["Mask blending detail boost"] = inpaint_detail_preservation
with closing(p):
if is_batch:
diff --git a/modules/processing.py b/modules/processing.py
index da4d6fda..361e8b05 100644
--- a/modules/processing.py
+++ b/modules/processing.py
@@ -1351,7 +1351,7 @@ class StableDiffusionProcessingImg2Img(StableDiffusionProcessing):
mask_blur: int = None
mask_blend_power: float = 1
mask_blend_scale: float = 1
- mask_blend_offset: float = 0
+ inpaint_detail_preservation: float = 16
inpainting_fill: int = 0
inpaint_full_res: bool = True
inpaint_full_res_padding: int = 0
diff --git a/modules/sd_samplers_cfg_denoiser.py b/modules/sd_samplers_cfg_denoiser.py
index c4d6fda6..598cd487 100644
--- a/modules/sd_samplers_cfg_denoiser.py
+++ b/modules/sd_samplers_cfg_denoiser.py
@@ -45,7 +45,7 @@ class CFGDenoiser(torch.nn.Module):
self.nmask = None
self.mask_blend_power = 1
self.mask_blend_scale = 1
- self.mask_blend_offset = 0
+ self.inpaint_detail_preservation = 16
self.init_latent = None
self.steps = None
"""number of steps as specified by user in UI"""
@@ -105,14 +105,13 @@ class CFGDenoiser(torch.nn.Module):
# Record the original latent vector magnitudes.
# We bring them to a power so that larger magnitudes are favored over smaller ones.
# 64-bit operations are used here to allow large exponents.
- detail_preservation = 32
- a_magnitude = torch.norm(a, p=2, dim=1).to(torch.float64) ** detail_preservation
- b_magnitude = torch.norm(b, p=2, dim=1).to(torch.float64) ** detail_preservation
+ a_magnitude = torch.norm(a, p=2, dim=1).to(torch.float64) ** self.inpaint_detail_preservation
+ b_magnitude = torch.norm(b, p=2, dim=1).to(torch.float64) ** self.inpaint_detail_preservation
one_minus_t = 1 - t
# Interpolate the powered magnitudes, then un-power them (bring them back to a power of 1).
- interp_magnitude = (a_magnitude * one_minus_t + b_magnitude * t) ** (1 / detail_preservation)
+ interp_magnitude = (a_magnitude * one_minus_t + b_magnitude * t) ** (1 / self.inpaint_detail_preservation)
# Linearly interpolate the image vectors.
image_interp = a * one_minus_t + b * t
@@ -142,7 +141,7 @@ class CFGDenoiser(torch.nn.Module):
NOTE: "mask" is not used
"""
- return torch.pow(nmask, (_sigma ** self.mask_blend_power) * self.mask_blend_scale + self.mask_blend_offset)
+ return torch.pow(nmask, (_sigma ** self.mask_blend_power) * self.mask_blend_scale)
if state.interrupted or state.skipped:
raise sd_samplers_common.InterruptedException
diff --git a/modules/sd_samplers_common.py b/modules/sd_samplers_common.py
index 8904da2f..ecd8ab0a 100644
--- a/modules/sd_samplers_common.py
+++ b/modules/sd_samplers_common.py
@@ -279,7 +279,7 @@ class Sampler:
self.model_wrap_cfg.nmask = p.nmask if hasattr(p, 'nmask') else None
self.model_wrap_cfg.mask_blend_power = p.mask_blend_power if hasattr(p, 'mask_blend_power') else None
self.model_wrap_cfg.mask_blend_scale = p.mask_blend_scale if hasattr(p, 'mask_blend_scale') else None
- self.model_wrap_cfg.mask_blend_offset = p.mask_blend_offset if hasattr(p, 'mask_blend_offset') else None
+ self.model_wrap_cfg.inpaint_detail_preservation = p.inpaint_detail_preservation if hasattr(p, 'inpaint_detail_preservation') else None
self.model_wrap_cfg.step = 0
self.model_wrap_cfg.image_cfg_scale = getattr(p, 'image_cfg_scale', None)
self.eta = p.eta if p.eta is not None else getattr(opts, self.eta_option_field, 0.0)
diff --git a/modules/ui.py b/modules/ui.py
index 86c13086..f5e20147 100644
--- a/modules/ui.py
+++ b/modules/ui.py
@@ -732,9 +732,9 @@ def create_ui():
with FormRow():
mask_blur = gr.Slider(label='Mask blur', minimum=0, maximum=64, step=1, value=4, elem_id="img2img_mask_blur")
mask_alpha = gr.Slider(label="Mask transparency", visible=False, elem_id="img2img_mask_alpha")
- mask_blend_power = gr.Slider(label='Mask blend power', minimum=0, maximum=8, step=0.1, value=1, elem_id="img2img_mask_blend_power")
- mask_blend_scale = gr.Slider(label='Mask blend scale', minimum=0, maximum=8, step=0.1, value=1, elem_id="img2img_mask_blend_scale")
- mask_blend_offset = gr.Slider(label='Mask blend offset', minimum=-4, maximum=4, step=0.1, value=0, elem_id="img2img_mask_blend_offset")
+ mask_blend_power = gr.Slider(label='Blending bias', minimum=0, maximum=8, step=0.1, value=1, elem_id="img2img_mask_blend_power")
+ mask_blend_scale = gr.Slider(label='Blending preservation', minimum=0, maximum=8, step=0.05, value=1, elem_id="img2img_mask_blend_scale")
+ inpaint_detail_preservation = gr.Slider(label='Blending detail boost', minimum=1, maximum=32, step=0.5, value=16, elem_id="img2img_mask_blend_offset")
with FormRow():
inpainting_mask_invert = gr.Radio(label='Mask mode', choices=['Inpaint masked', 'Inpaint not masked'], value='Inpaint masked', type="index", elem_id="img2img_mask_mode")
@@ -786,7 +786,7 @@ def create_ui():
mask_alpha,
mask_blend_power,
mask_blend_scale,
- mask_blend_offset,
+ inpaint_detail_preservation,
inpainting_fill,
batch_count,
batch_size,
@@ -885,9 +885,9 @@ def create_ui():
(toprow.ui_styles.dropdown, lambda d: d["Styles array"] if isinstance(d.get("Styles array"), list) else gr.update()),
(denoising_strength, "Denoising strength"),
(mask_blur, "Mask blur"),
- (mask_blend_power, "Mask blend power"),
- (mask_blend_scale, "Mask blend scale"),
- (mask_blend_offset, "Mask blend offset"),
+ (mask_blend_power, "Mask blending bias"),
+ (mask_blend_scale, "Mask blending preservation"),
+ (inpaint_detail_preservation, "Mask blending detail boost"),
*scripts.scripts_img2img.infotext_fields
]
parameters_copypaste.add_paste_fields("img2img", init_img, img2img_paste_fields, override_settings)