From e89ab5bc260374f295be76efec4d9904445e2ea2 Mon Sep 17 00:00:00 2001 From: Teriks Date: Mon, 27 Jan 2025 14:53:30 -0600 Subject: [PATCH] SDXL ControlNet Union pipelines, make control_image argument immutible (#10663) 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 Co-authored-by: Teriks --- .../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 d5ecfa8a32..1ee63e5f7d 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 @@ -1350,6 +1350,8 @@ class StableDiffusionXLControlNetUnionInpaintPipeline( 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 d8c5e50276..27e627e5ba 100644 --- a/src/diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl.py +++ b/src/diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl.py @@ -1140,6 +1140,8 @@ class StableDiffusionXLControlNetUnionPipeline( 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 6a535afb1c..8547675426 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 @@ -1286,6 +1286,8 @@ class StableDiffusionXLControlNetUnionImg2ImgPipeline( 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]