From f086cbe6d2e36e817296beb671fef3c9b1bc5daa Mon Sep 17 00:00:00 2001 From: Teriks Date: Mon, 27 Jan 2025 03:22:33 -0600 Subject: [PATCH] controlnet union XL, make control_image immutible when this argument is passed a list, __call__ modifies its content, since it is pass by reference the list passed by the caller gets its content modified unexpectedly make a copy at method intro so this does not happen --- .../controlnet/pipeline_controlnet_union_inpaint_sd_xl.py | 2 ++ .../pipelines/controlnet/pipeline_controlnet_union_sd_xl.py | 2 ++ .../controlnet/pipeline_controlnet_union_sd_xl_img2img.py | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/diffusers/pipelines/controlnet/pipeline_controlnet_union_inpaint_sd_xl.py b/src/diffusers/pipelines/controlnet/pipeline_controlnet_union_inpaint_sd_xl.py index 56f6c9149c6e..aa877ed5d0f5 100644 --- a/src/diffusers/pipelines/controlnet/pipeline_controlnet_union_inpaint_sd_xl.py +++ b/src/diffusers/pipelines/controlnet/pipeline_controlnet_union_inpaint_sd_xl.py @@ -1370,6 +1370,8 @@ def __call__( if not isinstance(control_image, list): control_image = [control_image] + else: + control_image = control_image.copy() if not isinstance(control_mode, list): control_mode = [control_mode] diff --git a/src/diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl.py b/src/diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl.py index a2e50d4f3e09..f7cf8ca85664 100644 --- a/src/diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl.py +++ b/src/diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl.py @@ -1160,6 +1160,8 @@ def __call__( if not isinstance(control_image, list): control_image = [control_image] + else: + control_image = control_image.copy() if not isinstance(control_mode, list): control_mode = [control_mode] diff --git a/src/diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl_img2img.py b/src/diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl_img2img.py index d4409c54b01c..36dd2cc33825 100644 --- a/src/diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl_img2img.py +++ b/src/diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl_img2img.py @@ -1306,6 +1306,8 @@ def __call__( if not isinstance(control_image, list): control_image = [control_image] + else: + control_image = control_image.copy() if not isinstance(control_mode, list): control_mode = [control_mode]