diff --git a/modules/images.py b/modules/images.py index 8b3c539c3..ce384fd71 100644 --- a/modules/images.py +++ b/modules/images.py @@ -532,39 +532,33 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i params = script_callbacks.ImageSaveParams(image, p, fullfn, pnginfo) script_callbacks.before_image_saved_callback(params) - image = params.image fullfn = params.filename - info = params.pnginfo.get(pnginfo_section_name, None) + + exifinfo_data = params.pnginfo.get('UserComment', '') + if len(exifinfo_data) > 0: + exifinfo_data = exifinfo_data + ', ' + params.pnginfo.get(pnginfo_section_name, '') + else: + exifinfo_data = params.pnginfo.get(pnginfo_section_name, '') def _atomically_save_image(image_to_save, filename_without_extension, extension): # save image with .tmp extension to avoid race condition when another process detects new image in the directory temp_file_path = filename_without_extension + ".tmp" image_format = Image.registered_extensions()[extension] - if extension.lower() == '.png': pnginfo_data = PngImagePlugin.PngInfo() if opts.enable_pnginfo: for k, v in params.pnginfo.items(): pnginfo_data.add_text(k, str(v)) - image_to_save.save(temp_file_path, format=image_format, quality=opts.jpeg_quality, pnginfo=pnginfo_data) - elif extension.lower() in (".jpg", ".jpeg", ".webp"): if image_to_save.mode == 'RGBA': image_to_save = image_to_save.convert("RGB") elif image_to_save.mode == 'I;16': image_to_save = image_to_save.point(lambda p: p * 0.0038910505836576).convert("RGB" if extension.lower() == ".webp" else "L") - image_to_save.save(temp_file_path, format=image_format, quality=opts.jpeg_quality, lossless=opts.webp_lossless) - - if opts.enable_pnginfo and info is not None: - exif_bytes = piexif.dump({ - "Exif": { - piexif.ExifIFD.UserComment: piexif.helper.UserComment.dump(info or "", encoding="unicode") - }, - }) - + if opts.enable_pnginfo: + exif_bytes = piexif.dump({ "Exif": { piexif.ExifIFD.UserComment: piexif.helper.UserComment.dump(exifinfo_data or "", encoding="unicode") } }) piexif.insert(exif_bytes, temp_file_path) else: image_to_save.save(temp_file_path, format=image_format, quality=opts.jpeg_quality) @@ -582,10 +576,10 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i image.already_saved_as = fullfn - if opts.save_txt and info is not None: + if opts.save_txt and len(exifinfo_data) > 0: txt_fullfn = f"{fullfn_without_extension}.txt" with open(txt_fullfn, "w", encoding="utf8") as file: - file.write(info + "\n") + file.write(exifinfo_data + "\n") else: txt_fullfn = None diff --git a/scripts/postprocessing_upscale.py b/scripts/postprocessing_upscale.py index 9ee8878ad..43df74aff 100644 --- a/scripts/postprocessing_upscale.py +++ b/scripts/postprocessing_upscale.py @@ -30,10 +30,10 @@ class ScriptPostprocessingUpscale(scripts_postprocessing.ScriptPostprocessing): upscaling_crop = gr.Checkbox(label='Crop to fit', value=True, elem_id="extras_upscaling_crop") with FormRow(): - extras_upscaler_1 = gr.Dropdown(label='Upscaler 1', elem_id="extras_upscaler_1", choices=[x.name for x in shared.sd_upscalers], value=shared.sd_upscalers[0].name) + extras_upscaler_1 = gr.Dropdown(label='Upscaler', elem_id="extras_upscaler_1", choices=[x.name for x in shared.sd_upscalers], value=shared.sd_upscalers[0].name) with FormRow(): - extras_upscaler_2 = gr.Dropdown(label='Upscaler 2', elem_id="extras_upscaler_2", choices=[x.name for x in shared.sd_upscalers], value=shared.sd_upscalers[0].name) + extras_upscaler_2 = gr.Dropdown(label='Secondary Upscaler', elem_id="extras_upscaler_2", choices=[x.name for x in shared.sd_upscalers], value=shared.sd_upscalers[0].name) extras_upscaler_2_visibility = gr.Slider(minimum=0.0, maximum=1.0, step=0.001, label="Upscaler 2 visibility", value=0.0, elem_id="extras_upscaler_2_visibility") upscaling_res_switch_btn.click(lambda w, h: (h, w), inputs=[upscaling_resize_w, upscaling_resize_h], outputs=[upscaling_resize_w, upscaling_resize_h], show_progress=False)