None1145's picture
Update app.py
99b53b8 verified
raw
history blame
5.17 kB
import gradio as gr
import numpy as np
import random
import time
from optimum.intel import OVStableDiffusionXLPipeline
import torch
from diffusers import EulerDiscreteScheduler
from io import BytesIO
from PIL import Image
import base64
model_id = "None1145/noobai-XL-Vpred-0.65s-openvino"
prev_height = 1216
prev_width = 832
MAX_SEED = np.iinfo(np.int32).max
MAX_IMAGE_SIZE = 2048
def reload_model(new_model_id):
global pipe, model_id, prev_height, prev_width
model_id = new_model_id
try:
print(f"{model_id}...")
pipe = OVStableDiffusionXLPipeline.from_pretrained(model_id, compile=False)
if model_id == "None1145/noobai-XL-Vpred-0.65s-openvino":
scheduler_args = {"prediction_type": "v_prediction", "rescale_betas_zero_snr": True}
pipe.scheduler = EulerDiscreteScheduler.from_config(pipe.scheduler.config, **scheduler_args)
pipe.reshape(batch_size=1, height=prev_height, width=prev_width, num_images_per_prompt=1)
pipe.compile()
print(f"{model_id}!!!")
return f"Model successfully loaded: {model_id}"
except Exception as e:
return f"Failed to load model: {str(e)}"
reload_model(model_id)
def infer(
prompt,
negative_prompt,
seed,
randomize_seed,
width,
height,
guidance_scale,
num_inference_steps,
):
global prev_width, prev_height, pipe
if randomize_seed:
seed = random.randint(0, MAX_SEED)
generator = torch.Generator().manual_seed(seed)
if prev_width != width or prev_height != height:
pipe.reshape(batch_size=1, height=height, width=width, num_images_per_prompt=1)
pipe.compile()
prev_width = width
prev_height = height
image = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
guidance_scale=guidance_scale,
num_inference_steps=num_inference_steps,
width=width,
height=height,
generator=generator,
).images[0]
return image, seed
examples = ["murasame \(senren\), senren banka",]
with gr.Blocks() as img:
gr.Markdown("# OpenVINO Text to Image")
gr.Markdown("### It usually takes 2200 seconds to generate an 832x1216 image (28 steps) (CPU).")
with gr.Column(elem_id="col-container"):
with gr.Row():
prompt = gr.Text(
label="Prompt",
show_label=False,
max_lines=1,
placeholder="Enter your prompt",
container=False,
value="murasame \(senren\), senren banka"
)
num_inference_steps = gr.Slider(
label="Number of inference steps",
minimum=1,
maximum=60,
step=1,
value=28,
)
run_button = gr.Button("Run", scale=0, variant="primary")
result = gr.Image(label="Result", show_label=False, value=Image.open(requests.get("https://huggingface.co/None1145/noobai-XL-Vpred-0.65s-openvino/blob/main/example.webp").content))
with gr.Accordion("Advanced Settings", open=False):
negative_prompt = gr.Text(
label="Negative prompt",
max_lines=1,
placeholder="Enter a negative prompt",
visible=False,
)
seed = gr.Slider(
label="Seed",
minimum=0,
maximum=MAX_SEED,
step=1,
value=0,
)
randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
with gr.Row():
width = gr.Slider(
label="Width",
minimum=512,
maximum=MAX_IMAGE_SIZE,
step=32,
value=832,
)
height = gr.Slider(
label="Height",
minimum=512,
maximum=MAX_IMAGE_SIZE,
step=32,
value=1216,
)
with gr.Row():
guidance_scale = gr.Slider(
label="Guidance scale",
minimum=0.0,
maximum=10.0,
step=0.1,
value=5.0,
)
gr.Examples(examples=examples, inputs=[prompt])
gr.Markdown("### Model Reload")
with gr.Row():
new_model_id = gr.Text(label="New Model ID", placeholder="Enter model ID", value=model_id)
reload_button = gr.Button("Reload Model", variant="primary")
reload_status = gr.Text(label="Status", interactive=False)
reload_button.click(
fn=reload_model,
inputs=new_model_id,
outputs=reload_status,
)
run_button.click(
fn=infer,
inputs=[
prompt,
negative_prompt,
seed,
randomize_seed,
width,
height,
guidance_scale,
num_inference_steps,
],
outputs=[result, seed],
)
if __name__ == "__main__":
img.queue(max_size=10).launch()