From e576ea43193dc4706be2effcec745674698e7dc4 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 18 Jul 2025 18:19:56 -0400 Subject: [PATCH] cn always generate blended processed image Signed-off-by: Vladimir Mandic --- modules/control/processor.py | 3 ++- modules/control/run.py | 4 +++- modules/ui_control.py | 20 ++++++++++---------- scripts/xyz/xyz_grid_shared.py | 2 +- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/modules/control/processor.py b/modules/control/processor.py index d6f0e1a62..34f214ed1 100644 --- a/modules/control/processor.py +++ b/modules/control/processor.py @@ -94,6 +94,7 @@ def preprocess_image( # run image processors processed_images = [] + blended_image = None for i, process in enumerate(active_process): # list[image] debug_log(f'Control: i={i+1} process="{process.processor_id}" input={masked_image} override={process.override}') processed_image = process( @@ -244,4 +245,4 @@ def preprocess_image( t1 = time.time() process_timer.add('proc', t1-t0) - return processed_image + return processed_image, blended_image diff --git a/modules/control/run.py b/modules/control/run.py index c7353db96..0db88891e 100644 --- a/modules/control/run.py +++ b/modules/control/run.py @@ -506,7 +506,9 @@ def control_run(state: str = '', # pylint: disable=keyword-arg-before-vararg continue index += 1 - processed_image = preprocess_image(p, pipe, input_image, init_image, mask, input_type, unit_type, active_process, active_model, selected_models, has_models) + processed_image, blended_image = preprocess_image(p, pipe, input_image, init_image, mask, input_type, unit_type, active_process, active_model, selected_models, has_models) + if is_generator: + yield (None, blended_image, '') # result is control_output, proces_output # final check if has_models: diff --git a/modules/ui_control.py b/modules/ui_control.py index 88f4911e1..779255579 100644 --- a/modules/ui_control.py +++ b/modules/ui_control.py @@ -253,7 +253,7 @@ def create_ui(_blocks: gr.Blocks=None): reset_btn = ui_components.ToolButton(value=ui_symbols.reset) image_upload = gr.UploadButton(label=ui_symbols.upload, file_types=['image'], elem_classes=['form', 'gradio-button', 'tool']) image_reuse= ui_components.ToolButton(value=ui_symbols.reuse) - process_btn= ui_components.ToolButton(value=ui_symbols.preview) + btn_preview= ui_components.ToolButton(value=ui_symbols.preview) image_preview = gr.Image(label="Input", type="pil", height=128, width=128, visible=False, interactive=True, show_label=False, show_download_button=False, container=False, elem_id=f'control_unit-{i}-override') controlnet_ui_units.append(unit_ui) units.append(unit.Unit( @@ -267,7 +267,7 @@ def create_ui(_blocks: gr.Blocks=None): model_id = model_id, model_strength = model_strength, preview_process = preview_process, - preview_btn = process_btn, + preview_btn = btn_preview, image_upload = image_upload, image_reuse = image_reuse, image_preview = image_preview, @@ -302,7 +302,7 @@ def create_ui(_blocks: gr.Blocks=None): reset_btn = ui_components.ToolButton(value=ui_symbols.reset) image_upload = gr.UploadButton(label=ui_symbols.upload, file_types=['image'], elem_classes=['form', 'gradio-button', 'tool']) image_reuse= ui_components.ToolButton(value=ui_symbols.reuse) - process_btn= ui_components.ToolButton(value=ui_symbols.preview) + btn_preview= ui_components.ToolButton(value=ui_symbols.preview) image_preview = gr.Image(label="Input", show_label=False, type="pil", interactive=False, height=128, width=128, visible=False, elem_id=f'control_unit-{i}-override') adapter_ui_units.append(unit_ui) units.append(unit.Unit( @@ -316,7 +316,7 @@ def create_ui(_blocks: gr.Blocks=None): model_id = model_id, model_strength = model_strength, preview_process = preview_process, - preview_btn = process_btn, + preview_btn = btn_preview, image_upload = image_upload, image_reuse = image_reuse, image_preview = image_preview, @@ -349,7 +349,7 @@ def create_ui(_blocks: gr.Blocks=None): reset_btn = ui_components.ToolButton(value=ui_symbols.reset) image_upload = gr.UploadButton(label=ui_symbols.upload, file_types=['image'], elem_classes=['form', 'gradio-button', 'tool']) image_reuse= ui_components.ToolButton(value=ui_symbols.reuse) - process_btn= ui_components.ToolButton(value=ui_symbols.preview) + btn_preview= ui_components.ToolButton(value=ui_symbols.preview) image_preview = gr.Image(label="Input", show_label=False, type="pil", interactive=False, height=128, width=128, visible=False, elem_id=f'control_unit-{i}-override') controlnetxs_ui_units.append(unit_ui) units.append(unit.Unit( @@ -363,7 +363,7 @@ def create_ui(_blocks: gr.Blocks=None): model_id = model_id, model_strength = model_strength, preview_process = preview_process, - preview_btn = process_btn, + preview_btn = btn_preview, image_upload = image_upload, image_reuse = image_reuse, image_preview = image_preview, @@ -396,7 +396,7 @@ def create_ui(_blocks: gr.Blocks=None): image_upload = gr.UploadButton(label=ui_symbols.upload, file_types=['image'], elem_classes=['form', 'gradio-button', 'tool']) image_reuse= ui_components.ToolButton(value=ui_symbols.reuse) image_preview = gr.Image(label="Input", show_label=False, type="pil", interactive=False, height=128, width=128, visible=False, elem_id=f'control_unit-{i}-override') - process_btn= ui_components.ToolButton(value=ui_symbols.preview) + btn_preview= ui_components.ToolButton(value=ui_symbols.preview) lite_ui_units.append(unit_ui) units.append(unit.Unit( unit_type = 'lite', @@ -409,7 +409,7 @@ def create_ui(_blocks: gr.Blocks=None): model_id = model_id, model_strength = model_strength, preview_process = preview_process, - preview_btn = process_btn, + preview_btn = btn_preview, image_upload = image_upload, image_reuse = image_reuse, image_preview = image_preview, @@ -440,7 +440,7 @@ def create_ui(_blocks: gr.Blocks=None): image_upload = gr.UploadButton(label=ui_symbols.upload, file_types=['image'], elem_classes=['form', 'gradio-button', 'tool']) image_reuse= ui_components.ToolButton(value=ui_symbols.reuse) image_preview = gr.Image(label="Input", show_label=False, type="pil", interactive=False, height=128, width=128, visible=False, elem_id=f'control_unit-{i}-override') - process_btn= ui_components.ToolButton(value=ui_symbols.preview) + btn_preview= ui_components.ToolButton(value=ui_symbols.preview) units.append(unit.Unit( unit_type = 'reference', index = i, @@ -452,7 +452,7 @@ def create_ui(_blocks: gr.Blocks=None): model_id = model_id, model_strength = model_strength, preview_process = preview_process, - preview_btn = process_btn, + preview_btn = btn_preview, image_upload = image_upload, image_reuse = image_reuse, image_preview = image_preview, diff --git a/scripts/xyz/xyz_grid_shared.py b/scripts/xyz/xyz_grid_shared.py index 80cb2f260..0c95d14de 100644 --- a/scripts/xyz/xyz_grid_shared.py +++ b/scripts/xyz/xyz_grid_shared.py @@ -330,7 +330,7 @@ def apply_control(field): active_process, active_model, active_strength, active_start, active_end = run.check_active(p, unit.type, run.unit.current) has_models, selected_models, control_conditioning, control_guidance_start, control_guidance_end = run.check_enabled(p, unit.type, run.unit.current, active_model, active_strength, active_start, active_end) pipe = run.set_pipe(p, has_models, unit.type, selected_models, active_model, active_strength, control_conditioning, control_guidance_start, control_guidance_end) - _processed_image = processor.preprocess_image(p, pipe, input_image=init_images[0], unit_type=unit.type, active_process=active_process, active_model=active_model, selected_models=selected_models, has_models=has_models) + _processed_image, _blended_image = processor.preprocess_image(p, pipe, input_image=init_images[0], unit_type=unit.type, active_process=active_process, active_model=active_model, selected_models=selected_models, has_models=has_models) if pipe is not None: shared.sd_model = pipe elif field == 'control_start':