import logging import gradio as gr from fastapi import Request from fastapi.responses import JSONResponse import sys sys.path.append("scripts/") from lib import init, refresh_character_thumb_image, get_prompt_manager from lib import TITLE logging.getLogger("gradio").setLevel(logging.ERROR) logging.getLogger("uvicorn.error").setLevel(logging.ERROR) async def security_middleware(request: Request, call_next): if request.method == "POST" and "/api/" in request.url.path: return JSONResponse(status_code=403, content={"error": "Forbidden"}) try: return await call_next(request) except: return JSONResponse(status_code=400, content={"error": "Bad Request"}) if __name__ == '__main__': character_list, character_list_cn, LANG, JAVA_SCRIPT, CSS_SCRIPT = init() with gr.Blocks(js=JAVA_SCRIPT, css=CSS_SCRIPT, title=TITLE) as ui: with gr.Row(): character1 = gr.Dropdown( choices=character_list, label=LANG["character1"], value='none', allow_custom_value=False, ) character2 = gr.Dropdown( choices=character_list, label=LANG["character2"], value='none', allow_custom_value=False, ) character3 = gr.Dropdown( choices=character_list_cn, label=LANG["character3"], value='none', allow_custom_value=False, ) dummy_dropdown = gr.Dropdown(visible=False, allow_custom_value=True) dummy_textbox = gr.Textbox(visible=False) with gr.Row(elem_classes='main_row'): with gr.Column(elem_classes='column_prompts'): thumb_image = gr.Gallery(type="pil", columns=3, show_download_button=False, object_fit='contain', label="Thumb") output_info = gr.Textbox(label="Characters' Info") with gr.Row(): with gr.Column(): custom_prompt = gr.Textbox(value='', label='Semi-auto tag complete test. Try tag* *tag *tag* (e621_sfw.csv@DominikDoom)', elem_id="custom_prompt_text") with gr.Column(): gr.Markdown("

Thumb Image create by waiIllustriousSDXL_v160.safetensors with ComfyUI

",) gr.Markdown(f"Character Select SAA") character1.change(fn=refresh_character_thumb_image, inputs=[character1,character2,character3], outputs=[thumb_image, output_info]) character2.change(fn=refresh_character_thumb_image, inputs=[character1,character2,character3], outputs=[thumb_image, output_info]) character3.change(fn=refresh_character_thumb_image, inputs=[character1,character2,character3], outputs=[thumb_image, output_info]) # Prompt Auto Complete JS # Have to use dummy components # Use custom_prompt, the stupid js console will always report "api_info.ts:423 Too many arguments provided for the endpoint." dummy_textbox.change(fn=get_prompt_manager().update_suggestions_js, inputs=[dummy_textbox], outputs=[dummy_dropdown]) ui.app.middleware("http")(security_middleware) ui.launch(show_api=False, share=False)