From 9743c8e4bfb60875f3cc542135cb3f121d1eda36 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 31 Aug 2025 15:20:15 -0400 Subject: [PATCH] keep previous processed state Signed-off-by: Vladimir Mandic --- modules/face/__init__.py | 2 +- modules/img2img.py | 2 +- modules/processing.py | 29 ++++++++++++++--------- modules/sdnq/common.py | 2 +- modules/sdnq/layers/linear/linear_int8.py | 3 +-- scripts/cogvideo.py | 2 +- scripts/consistory_ext.py | 2 +- scripts/custom_code.py | 4 ++-- scripts/hdr.py | 4 ++-- scripts/ipinstruct.py | 2 +- scripts/lbm_ext.py | 2 +- scripts/outpainting_mk_2.py | 4 ++-- scripts/poor_mans_outpainting.py | 4 ++-- scripts/prompts_from_file.py | 4 ++-- scripts/pulid_ext.py | 2 +- scripts/sd_upscale.py | 4 ++-- 16 files changed, 39 insertions(+), 33 deletions(-) diff --git a/modules/face/__init__.py b/modules/face/__init__.py index e4c2ddd50..41fdddcdc 100644 --- a/modules/face/__init__.py +++ b/modules/face/__init__.py @@ -134,7 +134,7 @@ class Script(scripts_manager.Script): app = get_app('buffalo_l') from modules.face.faceid import face_id processed_images = face_id(p, app=app, source_images=input_images, model=ip_model, override=ip_override, cache=ip_cache, scale=ip_strength, structure=ip_structure) # run faceid pipeline - processed = processing.Processed(p, images_list=processed_images, seed=p.seed, subseed=p.subseed, index_of_first_image=0) # manually created processed object + processed = processing.get_processed(p, images_list=processed_images, seed=p.seed, subseed=p.subseed, index_of_first_image=0) # manually created processed object elif mode == 'PhotoMaker': # photomaker creates pipeline and triggers original process_images from modules.face.insightface import get_app app = get_app('buffalo_l') diff --git a/modules/img2img.py b/modules/img2img.py index b3c0880aa..4798671f8 100644 --- a/modules/img2img.py +++ b/modules/img2img.py @@ -317,7 +317,7 @@ def img2img(id_task: str, state: str, mode: int, p.is_batch = mode == 5 if p.is_batch: process_batch(p, img2img_batch_files, img2img_batch_input_dir, img2img_batch_output_dir, img2img_batch_inpaint_mask_dir, args) - processed = processing.Processed(p, [], p.seed, "") + processed = processing.get_processed(p, [], p.seed, "") else: processed = scripts_manager.scripts_img2img.run(p, *args) if processed is None: diff --git a/modules/processing.py b/modules/processing.py index 6e1585fa6..7a33031d4 100644 --- a/modules/processing.py +++ b/modules/processing.py @@ -27,6 +27,7 @@ get_sampler_index = processing_helpers.get_sampler_index validate_sample = processing_helpers.validate_sample decode_first_stage = processing_helpers.decode_first_stage images_tensor_to_samples = processing_helpers.images_tensor_to_samples +processed = None # last known processed results class Processed: @@ -113,6 +114,12 @@ class Processed: return f'{self.__class__.__name__}: {self.__dict__}' +def get_processed(*args, **kwargs): + global processed # pylint: disable=global-statement + processed = Processed(*args, **kwargs) + return processed + + def process_images(p: StableDiffusionProcessing) -> Processed: timer.process.reset() debug(f'Process images: {vars(p)}') @@ -133,7 +140,7 @@ def process_images(p: StableDiffusionProcessing) -> Processed: p.override_settings.pop(k, None) for k in p.override_settings.keys(): stored_opts[k] = shared.opts.data.get(k, None) or shared.opts.data_labels[k].default - processed = None + results = None try: # if no checkpoint override or the override checkpoint can't be found, remove override entry and load opts checkpoint if p.override_settings.get('sd_model_checkpoint', None) is not None and sd_checkpoint.checkpoint_aliases.get(p.override_settings.get('sd_model_checkpoint')) is None: @@ -196,11 +203,11 @@ def process_images(p: StableDiffusionProcessing) -> Processed: shared.log.debug(f'Torch profile: {profile_args}') shared.profiler = torch.profiler.profile(**profile_args) shared.profiler.start() - processed = process_images_inner(p) + results = process_images_inner(p) errors.profile_torch(shared.profiler, 'Process') else: with context_hypertile_vae(p), context_hypertile_unet(p): - processed = process_images_inner(p) + results = process_images_inner(p) finally: script_callbacks.after_process_callback(p) @@ -215,7 +222,7 @@ def process_images(p: StableDiffusionProcessing) -> Processed: if k == 'sd_vae': sd_vae.reload_vae_weights() timer.process.record('post') - return processed + return results def process_init(p: StableDiffusionProcessing): @@ -399,10 +406,10 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed: samples = None timer.process.record('init') if p.scripts is not None and isinstance(p.scripts, scripts_manager.ScriptRunner): - processed = p.scripts.process_images(p) - if processed is not None: - samples = processed.images - for script_image, script_infotext in zip(processed.images, processed.infotexts): + results = p.scripts.process_images(p) + if results is not None: + samples = results.images + for script_image, script_infotext in zip(results.images, results.infotexts): output_images.append(script_image) infotexts.append(script_infotext) if samples is None: @@ -453,7 +460,7 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed: if shared.opts.grid_save: images.save_image(grid, p.outpath_grids, "", p.all_seeds[0], p.all_prompts[0], shared.opts.grid_format, info=grid_info, p=p, grid=True) # main save grid - processed = Processed( + results = Processed( p, images_list=output_images, seed=p.all_seeds[0], @@ -464,7 +471,7 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed: infotexts=infotexts, ) if p.scripts is not None and isinstance(p.scripts, scripts_manager.ScriptRunner) and not (shared.state.interrupted or shared.state.skipped): - p.scripts.postprocess(p, processed) + p.scripts.postprocess(p, results) timer.process.record('post') p.ops = list(set(p.ops)) if not p.disable_extra_networks: @@ -474,4 +481,4 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed: if shared.cmd_opts.lowvram or shared.cmd_opts.medvram: devices.torch_gc(force=True, reason='final') - return processed + return results diff --git a/modules/sdnq/common.py b/modules/sdnq/common.py index 079a2705c..fab48c4b9 100644 --- a/modules/sdnq/common.py +++ b/modules/sdnq/common.py @@ -2,7 +2,7 @@ import os import torch -from modules import devices, shared +from modules import shared torch_version = float(torch.__version__[:3]) diff --git a/modules/sdnq/layers/linear/linear_int8.py b/modules/sdnq/layers/linear/linear_int8.py index d82ee02f7..ca202ea6e 100644 --- a/modules/sdnq/layers/linear/linear_int8.py +++ b/modules/sdnq/layers/linear/linear_int8.py @@ -1,7 +1,6 @@ # pylint: disable=relative-beyond-top-level,redefined-builtin,protected-access -from typing import Tuple, Optional - +from typing import Tuple import torch from ...common import use_torch_compile # noqa: TID252 diff --git a/scripts/cogvideo.py b/scripts/cogvideo.py index d4d1dfd1f..cf72742df 100644 --- a/scripts/cogvideo.py +++ b/scripts/cogvideo.py @@ -205,7 +205,7 @@ class Script(scripts_manager.Script): self.offload(offload) frames = self.generate(p, model) devices.torch_gc() - processed = processing.Processed(p, images_list=frames) + processed = processing.get_processed(p, images_list=frames) shared.state.end() return processed diff --git a/scripts/consistory_ext.py b/scripts/consistory_ext.py index 0b7ed9e7b..0042e348f 100644 --- a/scripts/consistory_ext.py +++ b/scripts/consistory_ext.py @@ -210,7 +210,7 @@ class Script(scripts_manager.Script): images.append(image) shared.sd_model.disable_freeu() - processed = processing.Processed(p, images) + processed = processing.get_processed(p, images) return processed def after(self, p: processing.StableDiffusionProcessing, processed: processing.Processed, *args): # pylint: disable=arguments-differ, unused-argument diff --git a/scripts/custom_code.py b/scripts/custom_code.py index 4c79463db..30ad81cf2 100644 --- a/scripts/custom_code.py +++ b/scripts/custom_code.py @@ -2,7 +2,7 @@ import copy import ast import gradio as gr from modules import scripts_manager -from modules.processing import Processed +from modules.processing import Processed, get_processed from modules.shared import opts, cmd_opts, state # pylint: disable=unused-import @@ -87,4 +87,4 @@ __webuitemp__()""" if isinstance(result, Processed): return result - return Processed(p, *display_result_data) + return get_processed(p, *display_result_data) diff --git a/scripts/hdr.py b/scripts/hdr.py index 7daf3e3a0..70d3a6655 100644 --- a/scripts/hdr.py +++ b/scripts/hdr.py @@ -4,7 +4,7 @@ import numpy as np import gradio as gr from PIL import Image from modules import images, processing, shared, scripts_manager -from modules.processing import Processed +from modules.processing import get_processed from modules.shared import opts, state @@ -95,5 +95,5 @@ class Script(scripts_manager.Script): grid = [images.image_grid(imgs, rows=1)] if opts.return_grid else [] imgs = [img] + grid - processed = Processed(p, images_list=imgs, seed=p.seed, info=info) + processed = get_processed(p, images_list=imgs, seed=p.seed, info=info) return processed diff --git a/scripts/ipinstruct.py b/scripts/ipinstruct.py index 6861b8638..244030ff3 100644 --- a/scripts/ipinstruct.py +++ b/scripts/ipinstruct.py @@ -101,7 +101,7 @@ class Script(scripts_manager.Script): auto_scale = False, simple_cfg_mode = False, ) - processed = processing.Processed(p, images_list=image_list, seed=p.seed, subseed=p.subseed, index_of_first_image=0) # manually created processed object + processed = processing.get_processed(p, images_list=image_list, seed=p.seed, subseed=p.subseed, index_of_first_image=0) # manually created processed object # p.extra_generation_params["IPInstruct"] = f'' return processed diff --git a/scripts/lbm_ext.py b/scripts/lbm_ext.py index 7b1fbf811..3c268fb26 100644 --- a/scripts/lbm_ext.py +++ b/scripts/lbm_ext.py @@ -131,6 +131,6 @@ class Script(scripts_manager.Script): if output_image is not None: output_image.resize((ori_h_bg, ori_w_bg)) - return processing.Processed(p, [output_image]) + return processing.get_processed(p, [output_image]) else: return processing.Processed(p, []) diff --git a/scripts/outpainting_mk_2.py b/scripts/outpainting_mk_2.py index 257bc6ec9..28f71a221 100644 --- a/scripts/outpainting_mk_2.py +++ b/scripts/outpainting_mk_2.py @@ -3,7 +3,7 @@ import numpy as np import gradio as gr from PIL import Image, ImageDraw from modules import images, scripts_manager -from modules.processing import Processed, process_images +from modules.processing import get_processed, process_images from modules.shared import opts, state @@ -222,7 +222,7 @@ class Script(scripts_manager.Script): combined_grid_image = images.image_grid(all_processed_images) if opts.return_grid and len(all_processed_images) > 1: all_images = [combined_grid_image] + all_processed_images - res = Processed(p, all_images, initial_seed_and_info[0], initial_seed_and_info[1]) + res = get_processed(p, all_images, initial_seed_and_info[0], initial_seed_and_info[1]) if opts.samples_save: for img in all_processed_images: images.save_image(img, p.outpath_samples, "", res.seed, p.prompt, opts.samples_format, info=res.info, p=p) diff --git a/scripts/poor_mans_outpainting.py b/scripts/poor_mans_outpainting.py index 19b857fb4..209811678 100644 --- a/scripts/poor_mans_outpainting.py +++ b/scripts/poor_mans_outpainting.py @@ -2,7 +2,7 @@ import math import gradio as gr from PIL import Image, ImageDraw from modules import images, devices, scripts_manager -from modules.processing import Processed, process_images +from modules.processing import get_processed, process_images from modules.shared import opts, state, log @@ -108,5 +108,5 @@ class Script(scripts_manager.Script): combined_image = images.combine_grid(grid) if opts.samples_save: images.save_image(combined_image, p.outpath_samples, "", initial_seed, p.prompt, opts.samples_format, info=initial_info, p=p) - processed = Processed(p, [combined_image], initial_seed, initial_info) + processed = get_processed(p, [combined_image], initial_seed, initial_info) return processed diff --git a/scripts/prompts_from_file.py b/scripts/prompts_from_file.py index 6e55a8ebb..dea8ced6f 100644 --- a/scripts/prompts_from_file.py +++ b/scripts/prompts_from_file.py @@ -3,7 +3,7 @@ import random import shlex import gradio as gr from modules import sd_samplers, errors, scripts_manager -from modules.processing import Processed, process_images +from modules.processing import get_processed, process_images from modules.shared import state, log @@ -148,4 +148,4 @@ class Script(scripts_manager.Script): all_negative += proc.all_negative_prompts images += proc.images infotexts += proc.infotexts - return Processed(p, images, p.seed, "", all_prompts=all_prompts, all_seeds=all_seeds, all_negative_prompts=all_negative, infotexts=infotexts) + return get_processed(p, images, p.seed, "", all_prompts=all_prompts, all_seeds=all_seeds, all_negative_prompts=all_negative, infotexts=infotexts) diff --git a/scripts/pulid_ext.py b/scripts/pulid_ext.py index 7003daf19..0c8b55f23 100644 --- a/scripts/pulid_ext.py +++ b/scripts/pulid_ext.py @@ -273,7 +273,7 @@ class Script(scripts_manager.Script): id_scale=strength, )[0] info = processing.create_infotext(p) - processed = processing.Processed(p, [output], info=info) + processed = processing.get_processed(p, [output], info=info) shared.state.end() else: # let processing run the pipeline p.task_args['id_embedding'] = id_embedding diff --git a/scripts/sd_upscale.py b/scripts/sd_upscale.py index 3665bcfc5..0e71ff7d5 100644 --- a/scripts/sd_upscale.py +++ b/scripts/sd_upscale.py @@ -2,7 +2,7 @@ import math import gradio as gr from PIL import Image from modules import processing, shared, images, devices, scripts_manager -from modules.processing import Processed +from modules.processing import get_processed from modules.shared import opts, state, log @@ -89,6 +89,6 @@ class Script(scripts_manager.Script): if opts.samples_save: images.save_image(combined_image, p.outpath_samples, "", start_seed, p.prompt, opts.samples_format, info=initial_info, p=p) - processed = Processed(p, result_images, seed, initial_info) + processed = get_processed(p, result_images, seed, initial_info) log.info(f"SD upscale: images={result_images}") return processed