From a76168ba4b91ec6dc80a1eb0bb994a070b472005 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Wed, 12 Nov 2025 09:19:28 -0500 Subject: [PATCH] process tab send-to Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 7 ++++--- extensions-builtin/sdnext-modernui | 2 +- modules/postprocessing.py | 4 ++++ modules/ui_postprocessing.py | 19 +++++++++---------- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 39064590d..5227d872d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,12 @@ # Change Log for SD.Next -## Update for 2025-11-11 +## Update for 2025-11-12 -### Highlights for 2025-11-11 +### Highlights for 2025-11-12 TBD -### Details for 2025-11-11 +### Details for 2025-11-12 - **Features** - **kanvas**: new module for native canvas-based image manipulation @@ -37,6 +37,7 @@ TBD - detailer: using lora in detailer prompt - detailer: fail on unsupported models instead of corrputing results - ui: fix collapsible panels + - process: improve send-to functionality - control: safe load non-sparse controlnet - auth: fix password being shown in clear text during login diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index 37b51427a..635ba9f00 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit 37b51427a974a9410bf42c3858b3abdc820466a9 +Subproject commit 635ba9f00916403b9013c491c7c234d57cc85c40 diff --git a/modules/postprocessing.py b/modules/postprocessing.py index 4f919ea00..296db6eda 100644 --- a/modules/postprocessing.py +++ b/modules/postprocessing.py @@ -77,6 +77,10 @@ def run_postprocessing(extras_mode, image, image_folder: List[tempfile.NamedTemp pp.image.info[k] = v if 'parameters' in items: info = items['parameters'] + ', ' + if (params.get('size-1', 0) != pp.image.width) or (params.get('size-2', 0) != pp.image.height): + params['size-1'] = pp.image.width + params['size-2'] = pp.image.height + info += f"Size: {pp.image.width}x{pp.image.height}, " info = info + ", ".join([k if k == v else f'{k}: {infotext.quote(v)}' for k, v in pp.info.items() if v is not None]) pp.image.info["postprocessing"] = info processed_images.append(pp.image) diff --git a/modules/ui_postprocessing.py b/modules/ui_postprocessing.py index 5ed90446a..92c80697e 100644 --- a/modules/ui_postprocessing.py +++ b/modules/ui_postprocessing.py @@ -1,4 +1,3 @@ -import json import gradio as gr from modules import scripts_manager, shared, ui_common, postprocessing, call_queue, generation_parameters_copypaste @@ -7,12 +6,15 @@ def submit_info(image): from modules.extras import run_pnginfo from modules.ui_common import infotext_to_html _, geninfo, info = run_pnginfo(image) + if hasattr(scripts_manager, 'scripts_postproc'): + scripts_manager.scripts_postproc.image_changed() return infotext_to_html(geninfo), info, geninfo def submit_process(tab_index, extras_image, image_batch, extras_batch_input_dir, extras_batch_output_dir, show_extras_results, save_output, *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, save_output=save_output) - return result_images, geninfo, json.dumps(js_info), '' + from modules.ui_common import infotext_to_html + 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, save_output=save_output) + return result_images, geninfo, infotext_to_html(geninfo) def create_ui(): @@ -44,22 +46,20 @@ def create_ui(): skip.click(fn=shared.state.skip, inputs=[], outputs=[]) pause = gr.Button('Pause', elem_id=f"{id_part}_pause") pause.click(fn=shared.state.pause, _js='checkPaused', inputs=[], outputs=[]) - result_images, generation_info, html_info, html_info_formatted, html_log = ui_common.create_output_panel("extras") + result_images, generation_info, _html_info, html_info_formatted, _html_log = ui_common.create_output_panel("extras") gr.HTML('File metadata') exif_info = gr.HTML(elem_id="pnginfo_html_info") - gen_info = gr.Textbox(elem_id="pnginfo_gen_info", visible=False) with gr.Row(elem_id='copy_buttons_process'): copy_process_buttons = generation_parameters_copypaste.create_buttons(["txt2img", "img2img", "control", "caption"]) for tabname, button in copy_process_buttons.items(): - generation_parameters_copypaste.register_paste_params_button(generation_parameters_copypaste.ParamBinding(paste_button=button, tabname=tabname, source_text_component=gen_info, source_image_component=extras_image)) + generation_parameters_copypaste.register_paste_params_button(generation_parameters_copypaste.ParamBinding(paste_button=button, tabname=tabname, source_text_component=generation_info, source_image_component=extras_image)) generation_parameters_copypaste.add_paste_fields("extras", extras_image, None) tab_single.select(fn=lambda: 0, inputs=[], outputs=[tab_index]) tab_batch.select(fn=lambda: 1, inputs=[], outputs=[tab_index]) tab_batch_dir.select(fn=lambda: 2, inputs=[], outputs=[tab_index]) - extras_image.change(fn=submit_info, inputs=[extras_image], outputs=[html_info_formatted, exif_info, gen_info]) - extras_image.change(fn=scripts_manager.scripts_postproc.image_changed, inputs=[], outputs=[]) + extras_image.change(fn=submit_info, inputs=[extras_image], outputs=[html_info_formatted, exif_info, generation_info]) submit.click( _js="submit_postprocessing", fn=call_queue.wrap_gradio_gpu_call(submit_process, extra_outputs=[None, ''], name='Postprocess'), @@ -75,8 +75,7 @@ def create_ui(): ], outputs=[ result_images, - html_info, generation_info, - html_log, + html_info_formatted, ] )