|
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, |
|
) |
|
|