File size: 3,660 Bytes
2476bf2
85226b0
2476bf2
 
85226b0
 
e60fe6a
901270b
85226b0
2476bf2
 
 
 
 
 
 
 
 
 
 
 
 
85226b0
901270b
85226b0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8650fd3
85226b0
 
 
b0fc198
85226b0
901270b
 
 
85226b0
 
b0fc198
 
 
e4ad141
901270b
e4ad141
fbd1c26
e4ad141
85226b0
 
 
b0fc198
85226b0
 
b0fc198
85226b0
 
b0fc198
85226b0
901270b
 
 
 
264c7c2
2476bf2
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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("<h2><span style=\"color:orangered\">Thumb Image create by waiIllustriousSDXL_v160.safetensors with ComfyUI</span></h2>",)
                gr.Markdown(f"<a href='https://github.com/mirabarukaso/character_select_stand_alone_app'>Character Select SAA</a>")            
            
        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)