From c19f95141a28d70f3b80a8eb752ca12247ef1357 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 25 Jan 2024 09:29:11 -0500 Subject: [PATCH] ipadapter interop --- extensions-builtin/sd-webui-controlnet | 2 +- modules/processing.py | 4 ++++ scripts/ipadapter.py | 12 ++++++++---- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/extensions-builtin/sd-webui-controlnet b/extensions-builtin/sd-webui-controlnet index 6a1d882e8..14ab5e4ff 160000 --- a/extensions-builtin/sd-webui-controlnet +++ b/extensions-builtin/sd-webui-controlnet @@ -1 +1 @@ -Subproject commit 6a1d882e891c4b2e7986b9fda825fdbf24f7867e +Subproject commit 14ab5e4ff617275e8ab04cdaed5c3a5251054b58 diff --git a/modules/processing.py b/modules/processing.py index f32a0dd27..f57758397 100644 --- a/modules/processing.py +++ b/modules/processing.py @@ -863,6 +863,10 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed: if p.scripts is not None and isinstance(p.scripts, modules.scripts.ScriptRunner): p.scripts.process(p) + if shared.backend == shared.Backend.DIFFUSERS: + from scripts import ipadapter # pylint: disable=no-name-in-module + ipadapter.apply(shared.sd_model, p) + def get_conds_with_caching(function, required_prompts, steps, cache): if cache[0] is not None and (required_prompts, steps) == cache[0]: return cache[1] diff --git a/scripts/ipadapter.py b/scripts/ipadapter.py index f978501bf..425484d7a 100644 --- a/scripts/ipadapter.py +++ b/scripts/ipadapter.py @@ -33,11 +33,12 @@ ADAPTERS = { } -def apply(pipe, p: processing.StableDiffusionProcessing, adapter_name, scale, image): # pylint: disable=arguments-differ +def apply(pipe, p: processing.StableDiffusionProcessing, adapter_name='None', scale=1.0, image=None): # pylint: disable=arguments-differ # overrides - adapter = ADAPTERS.get(adapter_name, None) if hasattr(p, 'ip_adapter_name'): - adapter = p.ip_adapter_name + adapter = ADAPTERS.get(p.ip_adapter_name, None) + else: + adapter = ADAPTERS.get(adapter_name, None) if hasattr(p, 'ip_adapter_scale'): scale = p.ip_adapter_scale if hasattr(p, 'ip_adapter_image'): @@ -154,4 +155,7 @@ class Script(scripts.Script): def process(self, p: processing.StableDiffusionProcessing, adapter_name, scale, image): # pylint: disable=arguments-differ if shared.backend != shared.Backend.DIFFUSERS: return - apply(shared.sd_model, p, adapter_name, scale, image) + p.ip_adapter_name = adapter_name + p.ip_adapter_scale = scale + p.ip_adapter_image = image + # apply(shared.sd_model, p, adapter_name, scale, image) # called directly from processing.process_images_inner