Open
Description
Describe the bug
When using StableDiffusion3ControlNetInpaintingPipeline
with SD3MultiControlNetModel
, I receive an error:
NotImplementedError: MultiControlNetModel is not supported for SD3ControlNetInpaintingPipeline.
Reproduction
Example reproduction code:
import os
import torch
from diffusers.utils import load_image
from diffusers.pipelines import StableDiffusion3ControlNetInpaintingPipeline
from diffusers.models import SD3ControlNetModel, SD3MultiControlNetModel
from diffusers import BitsAndBytesConfig, SD3Transformer2DModel
from transformers import T5EncoderModel
# Load images
image = load_image(
"https://huggingface.co/alimama-creative/SD3-Controlnet-Inpainting/resolve/main/images/dog.png"
)
mask = load_image(
"https://huggingface.co/alimama-creative/SD3-Controlnet-Inpainting/resolve/main/images/dog_mask.png"
)
# Initialize ControlNet models
controlnetA = SD3ControlNetModel.from_pretrained("InstantX/SD3-Controlnet-Pose")
controlnetB = SD3ControlNetModel.from_pretrained("alimama-creative/SD3-Controlnet-Inpainting", use_safetensors=True, extra_conditioning_channels=1)
controlnet = SD3MultiControlNetModel([controlnetA, controlnetB])
# Load transformer and text encoder
nf4_config = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16)
model_id = "stabilityai/stable-diffusion-3.5-large-turbo"
model_nf4 = SD3Transformer2DModel.from_pretrained(model_id, subfolder="transformer", quantization_config=nf4_config, torch_dtype=torch.bfloat16)
t5_nf4 = T5EncoderModel.from_pretrained("diffusers/t5-nf4", torch_dtype=torch.bfloat16)
# Initialize pipeline
pipe = StableDiffusion3ControlNetInpaintingPipeline.from_pretrained(
"stabilityai/stable-diffusion-3.5-large-turbo",
token=os.getenv("HF_TOKEN"),
controlnet=controlnet,
transformer=model_nf4,
text_encoder_3=t5_nf4,
torch_dtype=torch.bfloat16
)
pipe.enable_model_cpu_offload()
# This fails with NotImplementedError
result_image = pipe(
prompt="a cute dog with a hat",
negative_prompt="low quality, bad anatomy",
control_image=[image, image],
num_inference_steps=30,
guidance_scale=7.5,
controlnet_conditioning_scale=[1.0, 1.0],
output_type="pil",
).images[0]
Logs
Error
NotImplementedError: MultiControlNetModel is not supported for SD3ControlNetInpaintingPipeline.
Error occurs in `diffusers/pipelines/controlnet_sd3/pipeline_stable_diffusion_3_controlnet_inpainting.py` at line 1026. *Full error code*:
---------------------------------------------------------------------------
NotImplementedError Traceback (most recent call last)
Cell In[1], line 41
38 pipe.enable_model_cpu_offload()
40 # This fails with NotImplementedError
---> 41 result_image = pipe(
42 prompt="a cute dog with a hat",
43 negative_prompt="low quality, bad anatomy",
44 control_image=[image, image],
45 num_inference_steps=30,
46 guidance_scale=7.5,
47 controlnet_conditioning_scale=[1.0, 1.0],
48 output_type="pil",
49 ).images[0]
File ~/miniconda3/envs/bnb310/lib/python3.10/site-packages/torch/utils/_contextlib.py:115, in context_decorator.<locals>.decorate_context(*args, **kwargs)
112 @functools.wraps(func)
113 def decorate_context(*args, **kwargs):
114 with ctx_factory():
--> 115 return func(*args, **kwargs)
File ~/miniconda3/envs/bnb310/lib/python3.10/site-packages/diffusers/pipelines/controlnet_sd3/pipeline_stable_diffusion_3_controlnet_inpainting.py:1026, in StableDiffusion3ControlNetInpaintingPipeline.__call__(self, prompt, prompt_2, prompt_3, height, width, num_inference_steps, sigmas, guidance_scale, control_guidance_start, control_guidance_end, control_image, control_mask, controlnet_conditioning_scale, controlnet_pooled_projections, negative_prompt, negative_prompt_2, negative_prompt_3, num_images_per_prompt, generator, latents, prompt_embeds, negative_prompt_embeds, pooled_prompt_embeds, negative_pooled_prompt_embeds, output_type, return_dict, joint_attention_kwargs, clip_skip, callback_on_step_end, callback_on_step_end_tensor_inputs, max_sequence_length)
1023 width = latent_width * self.vae_scale_factor
1025 elif isinstance(self.controlnet, SD3MultiControlNetModel):
-> 1026 raise NotImplementedError("MultiControlNetModel is not supported for SD3ControlNetInpaintingPipeline.")
1027 else:
1028 assert False
NotImplementedError: MultiControlNetModel is not supported for SD3ControlNetInpaintingPipeline.
Expected Behavior
I expect `StableDiffusion3ControlNetInpaintingPipeline` to support `SD3MultiControlNetModel`
System Info
Versions
Python version: 3.10.16 (main, Dec 11 2024, 16:24:50) [GCC 11.2.0]
PyTorch version: 2.2.0+cu118
CUDA version: 11.8
Diffusers version: 0.32.2
Transformers version: 4.50.3
Accelerate version: 1.7.0.dev0