|
import gradio as gr |
|
import torch |
|
from optimum.intel.openvino.modeling_diffusion import OVModelVaeDecoder, OVBaseModel, OVStableDiffusionPipeline |
|
from huggingface_hub import snapshot_download |
|
|
|
model_id = "hsuwill000/Fluently-v4-LCM-openvino" |
|
|
|
HIGH = 1024 |
|
WIDTH = 512 |
|
|
|
batch_size = -1 |
|
|
|
class CustomOVModelVaeDecoder(OVModelVaeDecoder): |
|
def __init__( |
|
self, model: ov.Model, parent_model: OVBaseModel, ov_config: Optional[Dict[str, str]] = None, model_dir: str = None, |
|
): |
|
super(OVModelVaeDecoder, self).__init__(model, parent_model, ov_config, "vae_decoder", model_dir) |
|
|
|
|
|
|
|
pipe = OVStableDiffusionPipeline.from_pretrained( |
|
model_id, |
|
compile=False, |
|
ov_config={"CACHE_DIR": ""}, |
|
torch_dtype=torch.bfloat16, |
|
safety_checker=None, |
|
use_safetensors=False, |
|
) |
|
|
|
taesd_dir = snapshot_download(repo_id="deinferno/taesd-openvino") |
|
|
|
pipe.vae_decoder = CustomOVModelVaeDecoder(model = OVBaseModel.load_model(f"{taesd_dir}/vae_decoder/openvino_model.xml"), |
|
parent_model = pipe, |
|
model_dir = taesd_dir |
|
) |
|
|
|
print(pipe.scheduler.compatibles) |
|
|
|
pipe.reshape(batch_size=batch_size, height=HIGH, width=WIDTH, num_images_per_prompt=1) |
|
|
|
pipe.compile() |
|
|
|
prompt = "" |
|
negative_prompt = "Easy Negative, worst quality, low quality, normal quality, lowers, monochrome, grayscales, skin spots, acnes, skin blemishes, age spot, 6 more fingers on one hand, deformity, bad legs, error legs, bad feet, malformed limbs, extra limbs, ugly, poorly drawn hands, poorly drawn feet, poorly drawn face, text, mutilated, extra fingers, mutated hands, mutation, bad anatomy, cloned face, disfigured, fused fingers" |
|
|
|
def infer(prompt, negative_prompt, num_inference_steps=8): |
|
image = pipe( |
|
prompt=prompt, |
|
negative_prompt=negative_prompt, |
|
width=WIDTH, |
|
height=HIGH, |
|
guidance_scale=1.0, |
|
num_inference_steps=num_inference_steps, |
|
num_images_per_prompt=1, |
|
).images[0] |
|
|
|
return image |
|
|
|
css = """ |
|
#col-container { |
|
margin: 0 auto; |
|
max-width: 520px; |
|
} |
|
""" |
|
|
|
power_device = "CPU" |
|
|
|
with gr.Blocks(css=css) as demo: |
|
|
|
with gr.Column(elem_id="col-container"): |
|
gr.Markdown(f""" |
|
# {model_id.split('/')[1]} {WIDTH}x{HIGH} |
|
Currently running on {power_device}. |
|
""") |
|
|
|
with gr.Row(): |
|
prompt = gr.Text( |
|
label="Prompt", |
|
show_label=False, |
|
max_lines=1, |
|
placeholder="Enter your prompt", |
|
container=False, |
|
) |
|
run_button = gr.Button("Run", scale=1) |
|
|
|
result = gr.Image(label="Result", show_label=False) |
|
|
|
run_button.click( |
|
fn=infer, |
|
inputs=[prompt], |
|
outputs=[result] |
|
) |
|
|
|
demo.queue().launch() |
|
|