From 773a5087ccfabc9090fe0991a8d0776e0150ba1e Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 9 Jun 2024 09:25:52 -0400 Subject: [PATCH] control add before after sizing to metadata --- cli/image-exif.py | 2 +- modules/control/run.py | 24 +++++++++++++++++++++++- modules/processing_class.py | 18 ++++++++++++++++++ modules/processing_info.py | 15 +++++++++++++++ modules/ui_control.py | 18 +++++++++++++++++- 5 files changed, 74 insertions(+), 3 deletions(-) diff --git a/cli/image-exif.py b/cli/image-exif.py index 0aa7ffc55..c3954204a 100755 --- a/cli/image-exif.py +++ b/cli/image-exif.py @@ -4,7 +4,7 @@ import os import io import re import sys -import importlib +import importlib.util from PIL import Image, ExifTags, TiffImagePlugin, PngImagePlugin from rich import print # pylint: disable=redefined-builtin diff --git a/modules/control/run.py b/modules/control/run.py index aa606e66a..5a41b87e4 100644 --- a/modules/control/run.py +++ b/modules/control/run.py @@ -149,12 +149,34 @@ def control_run(units: List[unit.Unit] = [], inputs: List[Image.Image] = [], ini shared.log.debug('Control: override resize mode=mask') selected_scale_tab_mask = 1 - # set initial resolution + # set control sizing if resize_mode_before != 0 or inputs is None or inputs == [None]: p.width, p.height = width_before, height_before # pylint: disable=attribute-defined-outside-init + p.width_before = width_before + p.height_before = height_before + if resize_name_before != 'None': + p.resize_mode_before = resize_mode_before + p.resize_name_before = resize_name_before + p.scale_by_before = scale_by_before + p.selected_scale_tab_before = selected_scale_tab_before else: del p.width del p.height + if resize_name_after != 'None': + p.resize_mode_after = resize_mode_after + p.resize_name_after = resize_name_after + p.width_after = width_after + p.height_after = height_after + p.scale_by_after = scale_by_after + p.selected_scale_tab_after = selected_scale_tab_after + if resize_name_mask != 'None': + p.resize_mode_mask = resize_mode_mask + p.resize_name_mask = resize_name_mask + p.width_mask = width_mask + p.height_mask = height_mask + p.scale_by_mask = scale_by_mask + p.selected_scale_tab_mask = selected_scale_tab_mask + # hires/refine defined outside of main init p.enable_hr = enable_hr p.hr_sampler_name = processing.get_sampler_name(hr_sampler_index) diff --git a/modules/processing_class.py b/modules/processing_class.py index 9f8ac7792..bf37c8e2d 100644 --- a/modules/processing_class.py +++ b/modules/processing_class.py @@ -469,6 +469,24 @@ class StableDiffusionProcessingControl(StableDiffusionProcessingImg2Img): self.fidelity = 0.5 self.mask_image = None self.override = None + self.resize_mode_before = None + self.resize_name_before = None + self.width_before = None + self.height_before = None + self.scale_by_before = None + self.selected_scale_tab_before = None + self.resize_mode_after = None + self.resize_name_after = None + self.width_after = None + self.height_after = None + self.scale_by_after = None + self.selected_scale_tab_after = None + self.resize_mode_mask = None + self.resize_name_mask = None + self.width_mask = None + self.height_mask = None + self.scale_by_mask = None + self.selected_scale_tab_mask = None def sample(self, conditioning, unconditional_conditioning, seeds, subseeds, subseed_strength, prompts): # abstract pass diff --git a/modules/processing_info.py b/modules/processing_info.py index fb376627f..c6f572dae 100644 --- a/modules/processing_info.py +++ b/modules/processing_info.py @@ -98,6 +98,21 @@ def create_infotext(p: StableDiffusionProcessing, all_prompts=None, all_seeds=No # lookup by index if getattr(p, 'resize_mode', None) is not None: args['Resize mode'] = shared.resize_modes[p.resize_mode] if shared.resize_modes[p.resize_mode] != 'None' else None + if getattr(p, 'resize_mode_before', None) is not None: + args['Size before'] = f"{p.width_before}x{p.height_before}" if hasattr(p, 'width_before') and hasattr(p, 'height_before') else None + args['Size mode before'] = p.resize_mode_before + args['Size scale before'] = p.scale_by_before + args['Size name before'] = p.resize_name_before + if getattr(p, 'resize_mode_after', None) is not None: + args['Size after'] = f"{p.width_after}x{p.height_after}" if hasattr(p, 'width_after') and hasattr(p, 'height_after') else None + args['Size mode after'] = p.resize_mode_after + args['Size scale after'] = p.scale_by_after + args['Size name after'] = p.resize_name_after + if getattr(p, 'resize_mode_mask', None) is not None: + args['Size mask'] = f"{p.width_mask}x{p.height_mask}" if hasattr(p, 'width_mask') and hasattr(p, 'height_mask') else None + args['Size mode mask'] = p.resize_mode_mask + args['Size scale mask'] = p.scale_by_mask + args['Size name mask'] = p.resize_name_mask if 'face' in p.ops: args["Face restoration"] = shared.opts.face_restoration_model if 'color' in p.ops: diff --git a/modules/ui_control.py b/modules/ui_control.py index 1bf378656..c4aa25bd3 100644 --- a/modules/ui_control.py +++ b/modules/ui_control.py @@ -533,11 +533,27 @@ def create_ui(_blocks: gr.Blocks=None): (negative, "Negative prompt"), # input (denoising_strength, "Denoising strength"), - # resize + # size basic (width_before, "Size-1"), (height_before, "Size-2"), (resize_mode_before, "Resize mode"), (scale_by_before, "Resize scale"), + # size control + (width_before, "Size before-1"), + (height_before, "Size before-2"), + (resize_mode_before, "Size mode before"), + (scale_by_before, "Size scale before"), + (resize_name_before, "Size name before"), + (width_after, "Size after-1"), + (height_after, "Size after-2"), + (resize_mode_after, "Size mode after"), + (scale_by_after, "Size scale after"), + (resize_name_after, "Size name after"), + (width_mask, "Size mask-1"), + (height_mask, "Size mask-2"), + (resize_mode_mask, "Size mode mask"), + (scale_by_mask, "Size scale mask"), + (resize_name_mask, "Size name mask"), # sampler (sampler_index, "Sampler"), (steps, "Steps"),