|
|
|
## Generate Example: |
|
- Model: [andite/anything-v4.0](https://hf.co/andite/anything-v4.0) |
|
- Prompt: `best quality, extremely detailed, cowboy shot` |
|
- Negative_prompt: `cowboy, monochrome, lowres, bad anatomy, worst quality, low quality` |
|
- Seed: 19 (cherry-picked) |
|
|
|
|Control Image1|Control Image2|Generated| |
|
|---|---|---| |
|
|<img width="200" src="https://huggingface.co/takuma104/controlnet_dev/resolve/main/multi_controlnet/pac_pose_512x512.png">|<img width="200" src="https://huggingface.co/takuma104/controlnet_dev/resolve/main/multi_controlnet/pac_canny_512x512.png">|<img width="200" src="https://huggingface.co/takuma104/controlnet_dev/resolve/main/multi_controlnet/mc_pose_and_canny_result_19.png">| |
|
|<img width="200" src="https://huggingface.co/takuma104/controlnet_dev/resolve/main/multi_controlnet/pac_pose_512x512.png">|(none)|<img width="200" src="https://huggingface.co/takuma104/controlnet_dev/resolve/main/multi_controlnet/mc_pose_only_result_19.png">| |
|
|<img width="200" src="https://huggingface.co/takuma104/controlnet_dev/resolve/main/multi_controlnet/pac_canny_512x512.png">|(none)|<img width="200" src="https://huggingface.co/takuma104/controlnet_dev/resolve/main/multi_controlnet/mc_canny_only_result_19.png">| |
|
|
|
- Pose & Canny Control Image Generated by [*Character bones that look like Openpose for blender _ Ver_4.7 Depth+Canny*](https://toyxyz.gumroad.com/l/ciojz) |
|
|
|
|
|
## Code |
|
Using deveploment version [`StableDiffusionMultiControlNetPipeline`](https://github.com/takuma104/diffusers/tree/multi_controlnet) |
|
|
|
```py |
|
from stable_diffusion_multi_controlnet import StableDiffusionMultiControlNetPipeline |
|
from stable_diffusion_multi_controlnet import ControlNetProcessor |
|
from diffusers import ControlNetModel |
|
import torch |
|
from diffusers.utils import load_image |
|
|
|
pipe = StableDiffusionMultiControlNetPipeline.from_pretrained( |
|
"andite/anything-v4.0", safety_checker=None, torch_dtype=torch.float16 |
|
).to("cuda") |
|
pipe.scheduler = EulerDiscreteScheduler.from_config("andite/anything-v4.0", subfolder="scheduler") |
|
pipe.enable_xformers_memory_efficient_attention() |
|
|
|
controlnet_canny = ControlNetModel.from_pretrained( |
|
"lllyasviel/sd-controlnet-canny", torch_dtype=torch.float16 |
|
).to("cuda") |
|
controlnet_pose = ControlNetModel.from_pretrained( |
|
"lllyasviel/sd-controlnet-openpose", torch_dtype=torch.float16 |
|
).to("cuda") |
|
|
|
canny_image = load_image('https://huggingface.co/takuma104/controlnet_dev/resolve/main/multi_controlnet/pac_canny_512x512.png').convert('RGB') |
|
pose_image = load_image('https://huggingface.co/takuma104/controlnet_dev/resolve/main/multi_controlnet/pac_pose_512x512.png').convert('RGB') |
|
|
|
prompt = "best quality, extremely detailed, cowboy shot" |
|
negative_prompt = "cowboy, monochrome, lowres, bad anatomy, worst quality, low quality" |
|
seed = 19 |
|
|
|
image = pipe( |
|
prompt=prompt, |
|
negative_prompt=negative_prompt, |
|
processors=[ |
|
ControlNetProcessor(controlnet_pose, pose_image), |
|
# ControlNetProcessor(controlnet_canny, canny_image), |
|
], |
|
generator=torch.Generator(device="cpu").manual_seed(seed), |
|
num_inference_steps=30, |
|
width=512, |
|
height=512, |
|
).images[0] |
|
image.save(f"./mc_pose_only_result_{seed}.png") |
|
|
|
image = pipe( |
|
prompt=prompt, |
|
negative_prompt=negative_prompt, |
|
processors=[ |
|
# ControlNetProcessor(controlnet_pose, pose_image), |
|
ControlNetProcessor(controlnet_canny, canny_image), |
|
], |
|
generator=torch.Generator(device="cpu").manual_seed(seed), |
|
num_inference_steps=30, |
|
width=512, |
|
height=512, |
|
).images[0] |
|
image.save(f"./mc_canny_only_result_{seed}.png") |
|
|
|
image = pipe( |
|
prompt=prompt, |
|
negative_prompt=negative_prompt, |
|
processors=[ |
|
ControlNetProcessor(controlnet_pose, pose_image), |
|
ControlNetProcessor(controlnet_canny, canny_image), |
|
], |
|
generator=torch.Generator(device="cpu").manual_seed(seed), |
|
num_inference_steps=30, |
|
width=512, |
|
height=512, |
|
).images[0] |
|
image.save(f"./mc_pose_and_canny_result_{seed}.png") |
|
|
|
|
|
``` |
|
|
|
|