diff --git a/extensions-builtin/stable-diffusion-webui-images-browser b/extensions-builtin/stable-diffusion-webui-images-browser index 342efe98c..40ddbfbe0 160000 --- a/extensions-builtin/stable-diffusion-webui-images-browser +++ b/extensions-builtin/stable-diffusion-webui-images-browser @@ -1 +1 @@ -Subproject commit 342efe98c747aecbdde35144d017f9eaf2dd025a +Subproject commit 40ddbfbe0aeea48896ffd2b1ec7987dab0030b5a diff --git a/modules/api/api.py b/modules/api/api.py index 81dfc5d6c..420e774f2 100644 --- a/modules/api/api.py +++ b/modules/api/api.py @@ -89,7 +89,6 @@ def save_image(image, fn, ext): def encode_pil_to_base64(image): - # TODO jpeg with io.BytesIO() as output_bytes: save_image(image, output_bytes, shared.opts.samples_format) bytes_data = output_bytes.getvalue() diff --git a/modules/images.py b/modules/images.py index db812eb38..6e2b60acd 100644 --- a/modules/images.py +++ b/modules/images.py @@ -403,8 +403,8 @@ class FilenameGenerator: elif replacement is not None: res += text + str(replacement) continue - res += f'{text}[{pattern}]' - res = res.split('?')[0] + res += f'{text}' + res = res.split('?')[0].strip() return res diff --git a/modules/postprocessing.py b/modules/postprocessing.py index 63d0f359e..29c6bc204 100644 --- a/modules/postprocessing.py +++ b/modules/postprocessing.py @@ -62,7 +62,8 @@ def run_postprocessing(extras_mode, image, image_folder: List[tempfile.NamedTemp basename = os.path.splitext(os.path.basename(name))[0] else: basename = '' - _geninfo, items = images.read_info_from_image(image) + geninfo, items = images.read_info_from_image(image) + params = generation_parameters_copypaste.parse_generation_parameters(geninfo) for k, v in items.items(): pp.image.info[k] = v if 'parameters' in items: @@ -75,7 +76,7 @@ def run_postprocessing(extras_mode, image, image_folder: List[tempfile.NamedTemp outputs.append(pp.image) devices.torch_gc() - return outputs, ui_common.infotext_to_html(infotext), pp.image.info + return outputs, ui_common.infotext_to_html(infotext), params def run_extras(extras_mode, resize_mode, image, image_folder, input_dir, output_dir, show_extras_results, gfpgan_visibility, codeformer_visibility, codeformer_weight, upscaling_resize, upscaling_resize_w, upscaling_resize_h, upscaling_crop, extras_upscaler_1, extras_upscaler_2, extras_upscaler_2_visibility, upscale_first: bool, save_output: bool = True): #pylint: disable=unused-argument diff --git a/modules/sd_hijack_optimizations.py b/modules/sd_hijack_optimizations.py index cef0d8a6a..49519ea2a 100644 --- a/modules/sd_hijack_optimizations.py +++ b/modules/sd_hijack_optimizations.py @@ -511,7 +511,7 @@ def sdp_attnblock_forward(self, x): q, k, v = map(lambda t: rearrange(t, 'b c h w -> b (h w) c'), (q, k, v)) dtype = q.dtype if shared.opts.upcast_attn: - q, k = q.float(), k.float() + q, k, v = q.float(), k.float(), v.float() q = q.contiguous() k = k.contiguous() v = v.contiguous() diff --git a/modules/ui_common.py b/modules/ui_common.py index 8ce3c409d..f421d3dfc 100644 --- a/modules/ui_common.py +++ b/modules/ui_common.py @@ -68,17 +68,22 @@ def delete_files(js_data, images, _do_make_zip, index): def save_files(js_data, images, do_make_zip, index): os.makedirs(shared.opts.outdir_save, exist_ok=True) - class MyObject: #quick dictionary to class object conversion. Its necessary due apply_filename_pattern requiring it + class PObject: #quick dictionary to class object conversion. Its necessary due apply_filename_pattern requiring it def __init__(self, d=None): if d is not None: for key, value in d.items(): setattr(self, key, value) - + self.seed = getattr(self, 'seed', None) or getattr(self, 'Seed', None) + self.prompt = getattr(self, 'prompt', None) or getattr(self, 'Prompt', None) + self.all_seeds = getattr(self, 'all_seeds', [self.seed]) + self.all_prompts = getattr(self, 'all_prompts', [self.prompt]) + self.infotexts = getattr(self, 'infotext', [json.dumps(d)]) + self.index_of_first_image = getattr(self, 'index_of_first_image', 0) try: data = json.loads(js_data) except Exception: - data = { 'index_of_first_image': 0 } - p = MyObject(data) + data = {} + p = PObject(data) start_index = 0 if index > -1 and shared.opts.save_selected_only and (index >= data['index_of_first_image']): # ensures we are looking at a specific non-grid picture, and we have save_selected_only # pylint: disable=no-member images = [images[index]] diff --git a/modules/ui_postprocessing.py b/modules/ui_postprocessing.py index 990b05e23..208cffe43 100644 --- a/modules/ui_postprocessing.py +++ b/modules/ui_postprocessing.py @@ -1,3 +1,4 @@ +import json import gradio as gr from modules import scripts_postprocessing, scripts, shared, gfpgan_model, codeformer_model, ui_common, postprocessing, call_queue # pylint: disable=unused-import import modules.generation_parameters_copypaste as parameters_copypaste @@ -13,8 +14,8 @@ def wrap_pnginfo(image): def submit_click(tab_index, extras_image, image_batch, extras_batch_input_dir, extras_batch_output_dir, show_extras_results, *script_inputs): - result_images, geninfo, _js_info = postprocessing.run_postprocessing(tab_index, extras_image, image_batch, extras_batch_input_dir, extras_batch_output_dir, show_extras_results, *script_inputs) - return result_images, geninfo, '{}', '' + result_images, geninfo, js_info = postprocessing.run_postprocessing(tab_index, extras_image, image_batch, extras_batch_input_dir, extras_batch_output_dir, show_extras_results, *script_inputs) + return result_images, geninfo, json.dumps(js_info), '' def create_ui():