|
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel |
|
from diffusers import UniPCMultistepScheduler |
|
import gradio as gr |
|
import torch |
|
from gradio.components import Markdown |
|
|
|
|
|
controlnet_pose = ControlNetModel.from_pretrained( |
|
"lllyasviel/sd-controlnet-openpose", torch_dtype=torch.float16 |
|
) |
|
controlnet_canny = ControlNetModel.from_pretrained( |
|
"lllyasviel/sd-controlnet-canny", torch_dtype=torch.float16 |
|
) |
|
|
|
pipe = StableDiffusionControlNetPipeline.from_pretrained( |
|
"dreamlike-art/dreamlike-anime-1.0", |
|
controlnet=[controlnet_pose, controlnet_canny], |
|
safety_checker=None, torch_dtype=torch.float16 |
|
).to('cuda') |
|
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config) |
|
|
|
|
|
|
|
|
|
|
|
|
|
pipe.enable_xformers_memory_efficient_attention() |
|
|
|
|
|
generator = torch.manual_seed(1) |
|
|
|
negative_prompt = ("worst quality, low quality, lowres, bad anatomy, bad hands, " |
|
"missing fingers, extra digit, fewer digits") |
|
|
|
markdown = """ |
|
## Generate controlled outputs with Mult-ControlNet and Stable Diffusion using π€Diffusers |
|
|
|
This Space uses pose lines and canny edged image as the additional conditioning. Please refer to the "Examples" for what kind of images are appropriate. |
|
The Followings are tools available to create such images. In this example, tool 1 is being used. |
|
1. [Character bones that look like Openpose for blender Ver4.7 Depth+Canny](https://toyxyz.gumroad.com/l/ciojz) |
|
2. [open-pose-editor](https://github.com/ZhUyU1997/open-pose-editor) |
|
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
def generate_images(pose_image, canny_image, prompt): |
|
output = pipe( |
|
prompt=prompt, |
|
negative_prompt=negative_prompt, |
|
image=[pose_image, canny_image], |
|
generator=generator, |
|
num_images_per_prompt=2, |
|
num_inference_steps=20, |
|
) |
|
all_outputs = [] |
|
all_outputs.append(pose_image) |
|
all_outputs.append(canny_image) |
|
for image in output.images: |
|
all_outputs.append(image) |
|
return all_outputs |
|
|
|
|
|
gr.Interface( |
|
generate_images, |
|
inputs=[ |
|
gr.Image(type="pil"), |
|
gr.Image(type="pil"), |
|
gr.Textbox( |
|
label="Enter your prompt", |
|
max_lines=1, |
|
placeholder="Enter your prompt", |
|
), |
|
], |
|
outputs=gr.Gallery().style(grid=[2], height="auto"), |
|
description=markdown, |
|
examples=[ |
|
["p11_clip.png", |
|
"c11_clip.png", |
|
"masterpiece, a professional portrait of woman wearing white shirts, smile, heart hand sign" |
|
], |
|
|
|
|
|
|
|
|
|
["p12_clip.png", |
|
"c12_clip.png", |
|
"masterpiece, a professional portrait of woman wearing white shirts, smile" |
|
], |
|
], |
|
allow_flagging=False, |
|
).launch(enable_queue=True) |
|
|