hsuwill000's picture
Update app.py
190a4b0 verified
raw
history blame
3.04 kB
import gradio as gr
import torch
from optimum.intel.openvino.modeling_diffusion import OVModelVaeDecoder, OVBaseModel, OVStableDiffusionPipeline
from huggingface_hub import snapshot_download
import openvino.runtime as ov
from typing import Optional, Dict
model_id = "hsuwill000/Fluently-v4-LCM-openvino"
HIGH = 1024
WIDTH = 512
batch_size = -1 # Or set it to a specific positive integer if needed
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, # More standard dtype for speed
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()