From 7ebc3fe94c7a23e8b8ec73f59d08d9c25a990468 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 4 May 2025 12:53:04 -0400 Subject: [PATCH] t2i-adapter Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + modules/control/units/t2iadapter.py | 10 +++++++++- modules/processing_args.py | 5 ++++- modules/sd_models.py | 10 +++++++++- 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ec9b69933..b9afbaf47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ - Diffusers: slow initial startup - Gated access: obfuscate and log token used for access - SDXL refiner workflow + - Control: t2i-adapter workflow ## Highlights for 2025-04-28 diff --git a/modules/control/units/t2iadapter.py b/modules/control/units/t2iadapter.py index 2c39a54b5..473563d10 100644 --- a/modules/control/units/t2iadapter.py +++ b/modules/control/units/t2iadapter.py @@ -2,7 +2,7 @@ import os import time from typing import Union import threading -from diffusers import StableDiffusionPipeline, StableDiffusionXLPipeline, T2IAdapter, MultiAdapter, StableDiffusionAdapterPipeline, StableDiffusionXLAdapterPipeline # pylint: disable=unused-import +from diffusers import pipelines, StableDiffusionPipeline, StableDiffusionXLPipeline, T2IAdapter, MultiAdapter, StableDiffusionAdapterPipeline, StableDiffusionXLAdapterPipeline # pylint: disable=unused-import from installer import log from modules import errors, sd_models from modules.control.units import detect @@ -142,6 +142,14 @@ class AdapterPipeline(): if isinstance(adapter, list) and len(adapter) > 1: adapter = MultiAdapter(adapter) adapter.to(device=pipeline.device, dtype=pipeline.dtype) + """ + pipelines.auto_pipeline.AUTO_TEXT2IMAGE_PIPELINES_MAPPING["sd-t2iadapter"] = StableDiffusionAdapterPipeline + pipelines.auto_pipeline.AUTO_IMAGE2IMAGE_PIPELINES_MAPPING["sd-t2iadapter"] = StableDiffusionAdapterPipeline + pipelines.auto_pipeline.AUTO_INPAINT_PIPELINES_MAPPING["sd-t2iadapter"] = StableDiffusionAdapterPipeline + pipelines.auto_pipeline.AUTO_TEXT2IMAGE_PIPELINES_MAPPING["sdxl-t2iadapter"] = StableDiffusionXLAdapterPipeline + pipelines.auto_pipeline.AUTO_IMAGE2IMAGE_PIPELINES_MAPPING["sdxl-t2iadapter"] = StableDiffusionXLAdapterPipeline + pipelines.auto_pipeline.AUTO_INPAINT_PIPELINES_MAPPING["sdxl-t2iadapter"] = StableDiffusionXLAdapterPipeline + """ if pipeline.__class__.__name__ == 'StableDiffusionAdapterPipeline' or pipeline.__class__.__name__ == 'StableDiffusionXLAdapterPipeline': pass # already initialized if detect.is_sdxl(pipeline): diff --git a/modules/processing_args.py b/modules/processing_args.py index 4e6ad67b6..85c94d4bb 100644 --- a/modules/processing_args.py +++ b/modules/processing_args.py @@ -35,7 +35,10 @@ def task_specific_kwargs(p, model): } elif (sd_models.get_diffusers_task(model) == sd_models.DiffusersTaskType.IMAGE_2_IMAGE or is_img2img_model) and len(getattr(p, 'init_images', [])) > 0: if shared.sd_model_type == 'sdxl' and hasattr(model, 'register_to_config'): - model.register_to_config(requires_aesthetics_score = False) + if model.__class__.__name__ in ['StableDiffusionAdapterPipeline', 'StableDiffusionXLAdapterPipeline']: + pass + else: + model.register_to_config(requires_aesthetics_score = False) if 'hires' not in p.ops: p.ops.append('img2img') if p.vae_type == 'Remote': diff --git a/modules/sd_models.py b/modules/sd_models.py index 1992787cb..ba6917d2d 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -44,6 +44,7 @@ pipe_switch_task_exclude = [ 'PhotoMakerStableDiffusionXLPipeline', 'StableDiffusionXLInstantIDPipeline', 'LTXConditionPipeline', + 'StableDiffusionXLAdapterPipeline', ] @@ -655,7 +656,14 @@ class DiffusersTaskType(Enum): def get_diffusers_task(pipe: diffusers.DiffusionPipeline) -> DiffusersTaskType: cls = pipe.__class__.__name__ - if cls in ["LEditsPPPipelineStableDiffusion", "LEditsPPPipelineStableDiffusionXL", "OmniGenPipeline"]: # special case + i2i_pipes = [ + 'LEditsPPPipelineStableDiffusion', + 'LEditsPPPipelineStableDiffusionXL', + 'OmniGenPipeline', + 'StableDiffusionAdapterPipeline', + 'StableDiffusionXLAdapterPipeline', + ] + if cls in i2i_pipes: # special case return DiffusersTaskType.IMAGE_2_IMAGE elif 'ImageToVideo' in cls or cls in ['LTXConditionPipeline', 'StableVideoDiffusionPipeline']: # i2v pipelines return DiffusersTaskType.IMAGE_2_IMAGE