Skip to content

Commit 069186f

Browse files
Add sdxl controlnet reference community pipeline (#9893)
* Add reference_attn & reference_adain support for sdxl with other controlnet * Update README.md * Update README.md by replacing human example with a cat one Replace human example with a cat one * Replace default human example with a cat one * Use example images from huggingface documentation-images repository --------- Co-authored-by: Sayak Paul <[email protected]>
1 parent 69c83d6 commit 069186f

File tree

2 files changed

+1444
-0
lines changed

2 files changed

+1444
-0
lines changed

examples/community/README.md

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2684,6 +2684,88 @@ Output Image
26842684
`reference_attn=True, reference_adain=True, num_inference_steps=20`
26852685
![output_image](https://github.com/huggingface/diffusers/assets/34944964/9b2f1aca-886f-49c3-89ec-d2031c8e3670)
26862686

2687+
### Stable Diffusion XL ControlNet Reference
2688+
2689+
This pipeline uses the Reference Control and with ControlNet. Refer to the [Stable Diffusion ControlNet Reference](https://github.com/huggingface/diffusers/blob/main/examples/community/README.md#stable-diffusion-controlnet-reference) and [Stable Diffusion XL Reference](https://github.com/huggingface/diffusers/blob/main/examples/community/README.md#stable-diffusion-xl-reference) sections for more information.
2690+
2691+
```py
2692+
from diffusers import ControlNetModel, AutoencoderKL
2693+
from diffusers.schedulers import UniPCMultistepScheduler
2694+
from diffusers.utils import load_image
2695+
import numpy as np
2696+
import torch
2697+
2698+
import cv2
2699+
from PIL import Image
2700+
2701+
from .stable_diffusion_xl_controlnet_reference import StableDiffusionXLControlNetReferencePipeline
2702+
2703+
# download an image
2704+
canny_image = load_image(
2705+
"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl_reference_input_cat.jpg"
2706+
)
2707+
2708+
ref_image = load_image(
2709+
"https://hf.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd_controlnet/hf-logo.png"
2710+
)
2711+
2712+
# initialize the models and pipeline
2713+
controlnet_conditioning_scale = 0.5 # recommended for good generalization
2714+
controlnet = ControlNetModel.from_pretrained(
2715+
"diffusers/controlnet-canny-sdxl-1.0", torch_dtype=torch.float16
2716+
)
2717+
vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16)
2718+
pipe = StableDiffusionXLControlNetReferencePipeline.from_pretrained(
2719+
"stabilityai/stable-diffusion-xl-base-1.0", controlnet=controlnet, vae=vae, torch_dtype=torch.float16
2720+
).to("cuda:0")
2721+
2722+
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
2723+
2724+
# get canny image
2725+
image = np.array(canny_image)
2726+
image = cv2.Canny(image, 100, 200)
2727+
image = image[:, :, None]
2728+
image = np.concatenate([image, image, image], axis=2)
2729+
canny_image = Image.fromarray(image)
2730+
2731+
# generate image
2732+
image = pipe(
2733+
prompt="a cat",
2734+
num_inference_steps=20,
2735+
controlnet_conditioning_scale=controlnet_conditioning_scale,
2736+
image=canny_image,
2737+
ref_image=ref_image,
2738+
reference_attn=False,
2739+
reference_adain=True,
2740+
style_fidelity=1.0,
2741+
generator=torch.Generator("cuda").manual_seed(42)
2742+
).images[0]
2743+
```
2744+
2745+
Canny ControlNet Image
2746+
2747+
![canny_image](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl_reference_input_cat.jpg)
2748+
2749+
Reference Image
2750+
2751+
![ref_image](https://hf.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd_controlnet/hf-logo.png)
2752+
2753+
Output Image
2754+
2755+
`prompt: a cat`
2756+
2757+
`reference_attn=True, reference_adain=True, num_inference_steps=20, style_fidelity=1.0`
2758+
2759+
![Output_image](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl_reference_attn_adain_canny_cat.png)
2760+
2761+
`reference_attn=False, reference_adain=True, num_inference_steps=20, style_fidelity=1.0`
2762+
2763+
![Output_image](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl_reference_adain_canny_cat.png)
2764+
2765+
`reference_attn=True, reference_adain=False, num_inference_steps=20, style_fidelity=1.0`
2766+
2767+
![Output_image](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl_reference_attn_canny_cat.png)
2768+
26872769
### Stable diffusion fabric pipeline
26882770

26892771
FABRIC approach applicable to a wide range of popular diffusion models, which exploits

0 commit comments

Comments
 (0)