From 7b0a202f89a2d9d24f282694e0d43b29efc8ff18 Mon Sep 17 00:00:00 2001 From: lllyasviel Date: Tue, 30 Jan 2024 12:53:21 -0800 Subject: [PATCH] ini inpaint --- .../preprocessor_compiled.py | 96 +++++++++---------- .../scripts/preprocessor_inpaint.py | 39 ++++++++ .../sd_forge_controlnet/scripts/controlnet.py | 16 +++- modules_forge/supported_controlnet.py | 3 + modules_forge/supported_preprocessor.py | 3 + 5 files changed, 108 insertions(+), 49 deletions(-) create mode 100644 extensions-builtin/forge_preprocessor_inpaint/scripts/preprocessor_inpaint.py diff --git a/extensions-builtin/forge_legacy_preprocessors/legacy_preprocessors/preprocessor_compiled.py b/extensions-builtin/forge_legacy_preprocessors/legacy_preprocessors/preprocessor_compiled.py index 48cb3150..e4afbc4e 100644 --- a/extensions-builtin/forge_legacy_preprocessors/legacy_preprocessors/preprocessor_compiled.py +++ b/extensions-builtin/forge_legacy_preprocessors/legacy_preprocessors/preprocessor_compiled.py @@ -313,54 +313,54 @@ legacy_preprocessors = { "OpenPose" ] }, - "inpaint_global_harmonious": { - "label": "inpaint_global_harmonious", - "call_function": identity, - "unload_function": None, - "managed_model": None, - "model_free": False, - "no_control_mode": False, - "resolution": None, - "slider_1": None, - "slider_2": None, - "slider_3": None, - "priority": 0, - "tags": [ - "Inpaint" - ] - }, - "inpaint_only": { - "label": "inpaint_only", - "call_function": identity, - "unload_function": None, - "managed_model": None, - "model_free": False, - "no_control_mode": False, - "resolution": None, - "slider_1": None, - "slider_2": None, - "slider_3": None, - "priority": 100, - "tags": [ - "Inpaint" - ] - }, - "inpaint_only+lama": { - "label": "inpaint_only+lama", - "call_function": lama_inpaint, - "unload_function": unload_lama_inpaint, - "managed_model": "model_lama", - "model_free": False, - "no_control_mode": False, - "resolution": None, - "slider_1": None, - "slider_2": None, - "slider_3": None, - "priority": 0, - "tags": [ - "Inpaint" - ] - }, + # "inpaint_global_harmonious": { + # "label": "inpaint_global_harmonious", + # "call_function": identity, + # "unload_function": None, + # "managed_model": None, + # "model_free": False, + # "no_control_mode": False, + # "resolution": None, + # "slider_1": None, + # "slider_2": None, + # "slider_3": None, + # "priority": 0, + # "tags": [ + # "Inpaint" + # ] + # }, + # "inpaint_only": { + # "label": "inpaint_only", + # "call_function": identity, + # "unload_function": None, + # "managed_model": None, + # "model_free": False, + # "no_control_mode": False, + # "resolution": None, + # "slider_1": None, + # "slider_2": None, + # "slider_3": None, + # "priority": 100, + # "tags": [ + # "Inpaint" + # ] + # }, + # "inpaint_only+lama": { + # "label": "inpaint_only+lama", + # "call_function": lama_inpaint, + # "unload_function": unload_lama_inpaint, + # "managed_model": "model_lama", + # "model_free": False, + # "no_control_mode": False, + # "resolution": None, + # "slider_1": None, + # "slider_2": None, + # "slider_3": None, + # "priority": 0, + # "tags": [ + # "Inpaint" + # ] + # }, "instant_id_face_embedding": { "label": "instant_id_face_embedding", "call_function": functools.partial(g_insight_face_instant_id_model.run_model_instant_id, return_keypoints=False), diff --git a/extensions-builtin/forge_preprocessor_inpaint/scripts/preprocessor_inpaint.py b/extensions-builtin/forge_preprocessor_inpaint/scripts/preprocessor_inpaint.py new file mode 100644 index 00000000..bd42805c --- /dev/null +++ b/extensions-builtin/forge_preprocessor_inpaint/scripts/preprocessor_inpaint.py @@ -0,0 +1,39 @@ +from modules_forge.supported_preprocessor import Preprocessor, PreprocessorParameter +from modules_forge.shared import add_supported_preprocessor +from modules_forge.forge_util import numpy_to_pytorch + + +class PreprocessorInpaint(Preprocessor): + def __init__(self, name, use_inpaint_sampler=False, use_lama=False): + super().__init__() + self.name = name + self.use_inpaint_sampler = use_inpaint_sampler + self.use_lama = use_lama + self.tags = ['Inpaint'] + self.model_filename_filters = ['inpaint'] + self.slider_resolution = PreprocessorParameter(visible=False) + + def process_before_every_sampling(self, process, cond, *args, **kwargs): + return + + def process_after_every_sampling(self, process, params, *args, **kwargs): + return + + +add_supported_preprocessor(PreprocessorInpaint( + name='inpaint_global_harmonious', + use_inpaint_sampler=False, + use_lama=False +)) + +add_supported_preprocessor(PreprocessorInpaint( + name='inpaint_only', + use_inpaint_sampler=False, + use_lama=False +)) + +add_supported_preprocessor(PreprocessorInpaint( + name='inpaint_only+lama', + use_inpaint_sampler=False, + use_lama=False +)) diff --git a/extensions-builtin/sd_forge_controlnet/scripts/controlnet.py b/extensions-builtin/sd_forge_controlnet/scripts/controlnet.py index 34078cdb..f418e5c6 100644 --- a/extensions-builtin/sd_forge_controlnet/scripts/controlnet.py +++ b/extensions-builtin/sd_forge_controlnet/scripts/controlnet.py @@ -535,6 +535,18 @@ class ControlNetForForgeOfficial(scripts.Script): logger.info(f"ControlNet Method {params.preprocessor.name} patched.") return + @torch.no_grad() + @torch.inference_mode() + def process_unit_after_every_sampling(self, + p: StableDiffusionProcessing, + unit: external_code.ControlNetUnit, + params: ControlNetCachedParameters, + *args, **kwargs): + + params.preprocessor.process_after_every_sampling(process=p, params=params, **kwargs) + params.model.process_after_every_sampling(process=p, params=params, **kwargs) + return + def process(self, p, *args, **kwargs): self.current_params = {} for i, unit in enumerate(self.get_enabled_units(p)): @@ -549,7 +561,9 @@ class ControlNetForForgeOfficial(scripts.Script): self.process_unit_before_every_sampling(p, unit, self.current_params[i], *args, **kwargs) return - def postprocess(self, p, processed, *args): + def postprocess_batch(self, p, *args, **kwargs): + for i, unit in enumerate(self.get_enabled_units(p)): + self.process_unit_after_every_sampling(p, unit, self.current_params[i], *args, **kwargs) self.current_params = {} return diff --git a/modules_forge/supported_controlnet.py b/modules_forge/supported_controlnet.py index 90c3e59c..8881488d 100644 --- a/modules_forge/supported_controlnet.py +++ b/modules_forge/supported_controlnet.py @@ -29,6 +29,9 @@ class ControlModelPatcher: def process_before_every_sampling(self, process, cond, *args, **kwargs): return + def process_after_every_sampling(self, process, params, *args, **kwargs): + return + class ControlNetPatcher(ControlModelPatcher): @staticmethod diff --git a/modules_forge/supported_preprocessor.py b/modules_forge/supported_preprocessor.py index 9be7ca45..8a688290 100644 --- a/modules_forge/supported_preprocessor.py +++ b/modules_forge/supported_preprocessor.py @@ -62,6 +62,9 @@ class Preprocessor: def process_before_every_sampling(self, process, cond, *args, **kwargs): return + def process_after_every_sampling(self, process, params, *args, **kwargs): + return + def __call__(self, input_image, resolution, slider_1=None, slider_2=None, slider_3=None, **kwargs): return input_image