import gradio as gr from typing import Any from backend.models.lcmdiffusion_setting import DiffusionTask from models.interface_types import InterfaceType from constants import DEVICE from state import get_settings, get_context from frontend.utils import is_reshape_required from concurrent.futures import ThreadPoolExecutor from pprint import pprint app_settings = get_settings() context = get_context(InterfaceType.WEBUI) previous_width = 0 previous_height = 0 previous_model_id = "" previous_num_of_images = 0 def generate_text_to_image( prompt, neg_prompt, ) -> Any: global previous_height, previous_width, previous_model_id, previous_num_of_images, app_settings app_settings.settings.lcm_diffusion_setting.prompt = prompt app_settings.settings.lcm_diffusion_setting.negative_prompt = neg_prompt app_settings.settings.lcm_diffusion_setting.diffusion_task = ( DiffusionTask.text_to_image.value ) model_id = app_settings.settings.lcm_diffusion_setting.openvino_lcm_model_id reshape = False image_width = app_settings.settings.lcm_diffusion_setting.image_width image_height = app_settings.settings.lcm_diffusion_setting.image_height num_images = app_settings.settings.lcm_diffusion_setting.number_of_images if app_settings.settings.lcm_diffusion_setting.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, ) with ThreadPoolExecutor(max_workers=1) as executor: future = executor.submit( context.generate_text_to_image, app_settings.settings, reshape, DEVICE, ) images = future.result() # images = context.generate_text_to_image( # app_settings.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() -> None: with gr.Blocks(): with gr.Row(): with gr.Column(): with gr.Row(): prompt = gr.Textbox( show_label=False, lines=3, placeholder="A fantasy landscape", container=False, ) generate_btn = gr.Button( "Generate", elem_id="generate_button", scale=0, ) negative_prompt = gr.Textbox( label="Negative prompt (Works in LCM-LoRA mode, set guidance > 1.0) :", lines=1, placeholder="", ) input_params = [prompt, negative_prompt] with gr.Column(): output = gr.Gallery( label="Generated images", show_label=True, elem_id="gallery", columns=2, height=512, ) generate_btn.click( fn=generate_text_to_image, inputs=input_params, outputs=output, )