diff --git a/modules/img2img.py b/modules/img2img.py index c239230501f9bef598ef76d61085afeb3e0c6dff..a4acdb22523b9a980b71020362db06177c1a831f 100644 --- a/modules/img2img.py +++ b/modules/img2img.py @@ -11,7 +11,7 @@ from modules.ui import plaintext_to_html import modules.images as images import modules.scripts -def img2img(prompt: str, init_img, init_img_with_mask, steps: int, sampler_index: int, mask_blur: int, inpainting_fill: int, restore_faces: bool, tiling: bool, mode: int, n_iter: int, batch_size: int, cfg_scale: float, denoising_strength: float, seed: int, height: int, width: int, resize_mode: int, upscaler_index: str, upscale_overlap: int, inpaint_full_res: bool, inpainting_mask_invert: int, *args): +def img2img(prompt: str, init_img, init_img_with_mask, steps: int, sampler_index: int, mask_blur: int, inpainting_fill: int, restore_faces: bool, tiling: bool, mode: int, n_iter: int, batch_size: int, cfg_scale: float, denoising_strength: float, denoising_strength_change_factor: float, seed: int, height: int, width: int, resize_mode: int, upscaler_index: str, upscale_overlap: int, inpaint_full_res: bool, inpainting_mask_invert: int, *args): is_inpaint = mode == 1 is_loopback = mode == 2 is_upscale = mode == 3 @@ -50,7 +50,10 @@ def img2img(prompt: str, init_img, init_img_with_mask, steps: int, sampler_index denoising_strength=denoising_strength, inpaint_full_res=inpaint_full_res, inpainting_mask_invert=inpainting_mask_invert, - extra_generation_params={"Denoising Strength": denoising_strength} + extra_generation_params={ + "Denoising strength": denoising_strength, + "Denoising strength change factor": denoising_strength_change_factor + } ) if is_loopback: @@ -99,7 +102,7 @@ def img2img(prompt: str, init_img, init_img_with_mask, steps: int, sampler_index p.init_images = [init_img] p.seed = processed.seed + 1 - p.denoising_strength = max(p.denoising_strength * 0.95, 0.1) + p.denoising_strength = min(max(p.denoising_strength * denoising_strength_change_factor, 0.1), 1) history.append(processed.images[0]) grid = images.image_grid(history, batch_size, rows=1) diff --git a/modules/ui.py b/modules/ui.py index b1a8c776dd31d157e50b8f599ed3f06c00a96342..8767d4394f338ea362bfd5746cf4f2ceb31132cf 100644 --- a/modules/ui.py +++ b/modules/ui.py @@ -349,7 +349,8 @@ def create_ui(txt2img, img2img, run_extras, run_pnginfo): with gr.Group(): cfg_scale = gr.Slider(minimum=1.0, maximum=15.0, step=0.5, label='CFG Scale', value=7.0) - denoising_strength = gr.Slider(minimum=0.0, maximum=1.0, step=0.01, label='Denoising Strength', value=0.75) + denoising_strength = gr.Slider(minimum=0.0, maximum=1.0, step=0.01, label='Denoising strength', value=0.75) + denoising_strength_change_factor = gr.Slider(minimum=0.9, maximum=1.1, step=0.01, label='Denoising strength change factor', value=1, visible=False) with gr.Group(): height = gr.Slider(minimum=64, maximum=2048, step=64, label="Height", value=512) @@ -396,6 +397,7 @@ def create_ui(txt2img, img2img, run_extras, run_pnginfo): sd_upscale_overlap: gr_show(is_upscale), inpaint_full_res: gr_show(is_inpaint), inpainting_mask_invert: gr_show(is_inpaint), + denoising_strength_change_factor: gr_show(is_loopback), } switch_mode.change( @@ -412,6 +414,7 @@ def create_ui(txt2img, img2img, run_extras, run_pnginfo): sd_upscale_overlap, inpaint_full_res, inpainting_mask_invert, + denoising_strength_change_factor, ] ) @@ -433,6 +436,7 @@ def create_ui(txt2img, img2img, run_extras, run_pnginfo): batch_size, cfg_scale, denoising_strength, + denoising_strength_change_factor, seed, height, width, diff --git a/script.js b/script.js index f2cd8877e1196e3963b76e0381c97ef6d2102335..1583f2b4384772f9ea936a91d268ba3efef868d0 100644 --- a/script.js +++ b/script.js @@ -26,7 +26,8 @@ titles = { "latent nothing": "fill it with latent space zeroes", "Inpaint at full resolution": "Upscale masked region to target resolution, do inpainting, downscale back and paste into original image", - "Denoising Strength": "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image.", + "Denoising strength": "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image.", + "Denoising strength change factor": "In loopback mode, on each loop the denoising strength is multiplied by this value. <1 means decreasing variety so your sequence will converge on a fixed picture. >1 means increasing variety so your sequence will become more and more chaotic.", "Interrupt": "Stop processing images and return any results accumulated so far.", "Save": "Write image to a directory (default - log/images) and generation parameters into csv file.",