fastsdcpu / frontend /webui /text_to_image_ui.py
rupeshs's picture
App update
8c39361
raw
history blame
5.96 kB
from typing import Any
import gradio as gr
from backend.models.lcmdiffusion_setting import LCMDiffusionSetting
from context import Context
from models.interface_types import InterfaceType
from app_settings import Settings
from constants import LCM_DEFAULT_MODEL, LCM_DEFAULT_MODEL_OPENVINO
from frontend.utils import is_reshape_required
from app_settings import AppSettings
from constants import DEVICE
from frontend.utils import enable_openvino_controls
random_enabled = True
context = Context(InterfaceType.WEBUI)
previous_width = 0
previous_height = 0
previous_model_id = ""
previous_num_of_images = 0
def generate_text_to_image(
prompt,
image_height,
image_width,
inference_steps,
guidance_scale,
num_images,
seed,
use_openvino,
use_safety_checker,
tiny_auto_encoder_checkbox,
) -> Any:
global previous_height, previous_width, previous_model_id, previous_num_of_images
model_id = LCM_DEFAULT_MODEL
if use_openvino:
model_id = LCM_DEFAULT_MODEL_OPENVINO
use_seed = True if seed != -1 else False
lcm_diffusion_settings = LCMDiffusionSetting(
lcm_model_id=model_id,
prompt=prompt,
image_height=image_height,
image_width=image_width,
inference_steps=inference_steps,
guidance_scale=guidance_scale,
number_of_images=num_images,
seed=seed,
use_openvino=use_openvino,
use_safety_checker=use_safety_checker,
use_seed=use_seed,
use_tiny_auto_encoder=tiny_auto_encoder_checkbox,
)
settings = Settings(
lcm_diffusion_setting=lcm_diffusion_settings,
)
reshape = False
if use_openvino:
reshape = is_reshape_required(
previous_width,
image_width,
previous_height,
image_height,
previous_model_id,
model_id,
previous_num_of_images,
num_images,
)
images = context.generate_text_to_image(
settings,
reshape,
DEVICE,
)
previous_width = image_width
previous_height = image_height
previous_model_id = model_id
previous_num_of_images = num_images
return images
def get_text_to_image_ui(app_settings: AppSettings) -> None:
with gr.Blocks():
with gr.Row():
with gr.Column():
def random_seed():
global random_enabled
random_enabled = not random_enabled
seed_val = -1
if not random_enabled:
seed_val = 42
return gr.Number.update(
interactive=not random_enabled, value=seed_val
)
with gr.Row():
prompt = gr.Textbox(
label="Describe the image you'd like to see",
lines=3,
placeholder="A fantasy landscape",
)
generate_btn = gr.Button(
"Generate",
elem_id="generate_button",
scale=0,
)
num_inference_steps = gr.Slider(
1, 25, value=4, step=1, label="Inference Steps"
)
image_height = gr.Slider(
256, 768, value=512, step=256, label="Image Height"
)
image_width = gr.Slider(
256, 768, value=512, step=256, label="Image Width"
)
num_images = gr.Slider(
1,
50,
value=1,
step=1,
label="Number of images to generate",
)
with gr.Accordion("Advanced options", open=False):
guidance_scale = gr.Slider(
1.0, 2.0, value=1.0, step=0.5, label="Guidance Scale"
)
seed = gr.Number(
label="Seed",
value=-1,
precision=0,
interactive=False,
)
seed_checkbox = gr.Checkbox(
label="Use random seed",
value=True,
interactive=True,
)
openvino_checkbox = gr.Checkbox(
label="Use OpenVINO",
value=False,
interactive=enable_openvino_controls(),
)
safety_checker_checkbox = gr.Checkbox(
label="Use Safety Checker",
value=True,
interactive=True,
)
tiny_auto_encoder_checkbox = gr.Checkbox(
label="Use tiny auto encoder for SD",
value=False,
interactive=True,
)
input_params = [
prompt,
image_height,
image_width,
num_inference_steps,
guidance_scale,
num_images,
seed,
openvino_checkbox,
safety_checker_checkbox,
tiny_auto_encoder_checkbox,
]
with gr.Column():
output = gr.Gallery(
label="Generated images",
show_label=True,
elem_id="gallery",
columns=2,
)
seed_checkbox.change(fn=random_seed, outputs=seed)
generate_btn.click(
fn=generate_text_to_image,
inputs=input_params,
outputs=output,
)