Spaces:
Runtime error
Runtime error
"""HiDiffusion demo for sd1.5 and sdxl.""" | |
from functools import lru_cache | |
import gradio as gr | |
import PIL | |
import torch | |
from diffusers import DDIMScheduler, DiffusionPipeline, StableDiffusionPipeline, StableDiffusionXLPipeline | |
from hidiffusion import apply_hidiffusion | |
pretrained_models = { | |
"sd1.5": "runwayml/stable-diffusion-v1-5", | |
"sdxl": "stabilityai/stable-diffusion-xl-base-1.0", | |
} | |
pipeline_types = { | |
"sd1.5": StableDiffusionPipeline, | |
"sdxl": StableDiffusionXLPipeline, | |
} | |
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
def load_pipeline(model_type: str) -> DiffusionPipeline: | |
"""Load a pretrained model""" | |
pretrained_model, pipeline_cls = pretrained_models[model_type], pipeline_types[model_type] | |
scheduler = DDIMScheduler.from_pretrained(pretrained_model, subfolder="scheduler") | |
pipe = pipeline_cls.from_pretrained( | |
pretrained_model, scheduler=scheduler, torch_dtype=torch.float16, variant="fp16" | |
).to(device) | |
pipe.enable_vae_tiling() | |
if torch.cuda.is_available(): | |
pipe.enable_xformers_memory_efficient_attention() | |
return pipe | |
def generate( | |
model_type: str, use_hidiffusion: bool, positive: str, negative: str, width: int, height: int, guidance_scale: float | |
) -> PIL.Image.Image: | |
pipe = load_pipeline(model_type) | |
print(f"{model_type} pipeline is loaded") | |
if use_hidiffusion: | |
apply_hidiffusion(pipe) | |
print("hidiffusion is applied") | |
image = pipe( | |
positive, negative_prompt=negative, guidance_scale=guidance_scale, height=height, width=width, eta=1.0 | |
).images[0] | |
print("generation is done") | |
return image | |
demo = gr.Interface( | |
fn=generate, | |
inputs=[ | |
gr.Radio(choices=["sd1.5", "sdxl"], label="Model Type", value="sd1.5"), | |
gr.Checkbox(value=True, label="Use HiDiffusion"), | |
gr.Textbox(label="Positive Prompt"), | |
gr.Textbox(label="Negative Prompt"), | |
gr.Slider(512, 4096, value=1024, step=1, label="width"), | |
gr.Slider(512, 4096, value=1024, step=1, label="height"), | |
gr.Slider(0.0, 20.0, value=7.5, step=0.1, label="Guidance Scale"), | |
], | |
outputs=gr.Image(), | |
allow_flagging="never", | |
title="HiDiffusion Demo", | |
description=""" | |
HiDiffusion is a training-free method that increases the resolution and speed of pretrained diffusion models.\n | |
It is designed as a plug-and-play implementation. It can be integrated into diffusion pipelines by only adding a single line of code!\n | |
More information: https://github.com/megvii-research/HiDiffusion | |
""", | |
examples=[ | |
[ | |
"sd1.5", | |
True, | |
# positive | |
"thick strokes, bright colors, an exotic fox, cute, chibi kawaii," | |
"detailed fur, hyperdetailed , big reflective eyes, fairytale, artstation," | |
"centered composition, perfect composition, centered, vibrant colors, muted colors, high detailed, 8k.", | |
# negative | |
"ugly, tiling, poorly drawn face, out of frame, disfigured, deformed, blurry, bad anatomy, blurred", | |
# width | |
1024, | |
# height | |
1024, | |
# guidance scale | |
7.5, | |
], | |
[ | |
"sdxl", | |
True, | |
# positive | |
"thick strokes, bright colors, an exotic fox, cute, chibi kawaii," | |
"detailed fur, hyperdetailed , big reflective eyes, fairytale, artstation," | |
"centered composition, perfect composition, centered, vibrant colors, muted colors, high detailed, 8k.", | |
# negative | |
"blurry, ugly, duplicate, poorly drawn, deformed, mosaic", | |
# width | |
2048, | |
# height | |
2048, | |
# guidance scale | |
7.5, | |
], | |
], | |
) | |
if __name__ == "__main__": | |
demo.launch(server_name="0.0.0.0") | |