File size: 3,784 Bytes
c416731
 
 
 
 
d309125
c416731
 
 
 
075612c
c416731
9972695
c416731
9972695
 
c416731
 
 
 
 
 
d309125
 
 
 
 
 
c416731
9972695
 
c416731
9972695
 
 
 
c416731
d309125
c416731
 
 
 
 
 
 
 
 
 
 
 
 
 
9972695
c416731
 
 
 
 
 
 
 
 
d309125
9972695
075612c
d309125
 
 
c416731
 
 
 
 
 
9972695
 
c416731
 
 
 
 
 
9972695
075612c
 
9972695
075612c
 
5a4cb69
075612c
 
 
9972695
c416731
 
 
 
 
d309125
 
 
 
 
 
 
c416731
5a4cb69
c416731
9972695
 
c416731
 
 
9655a3b
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import gradio as gr
import os
import subprocess
from gradio_app.project_info import (
    CONTENT_DESCRIPTION,
    TITLE, WARNING_1,
    CONTENT_IN_1, CONTENT_IN_2,
    CONTENT_OUT_1, CONTENT_OUT_2
)
from gradio_app.inference import run_inference
from gradio_app.examples import load_examples, select_example


def run_setup_script():
    setup_script = os.path.join(os.path.dirname(__file__),
                                "gradio_app", "setup_scripts.py")
    try:
        result = subprocess.run(["python", setup_script], capture_output=True, text=True, check=True)
        return result.stdout
    except subprocess.CalledProcessError as e:
        print(f"Setup script failed with error: {e.stderr}")
        return f"Setup script failed: {e.stderr}"

def stop_demo(demo):
    """Stop the Gradio demo."""
    demo.close()
    return "Demo stopped"

def create_gui():
    # Load custom CSS
    custom_css = open("apps/gradio_app/static/styles.css").read()

    # JavaScript function to update warning_text Markdown component
    outer_scale_warning = open("apps/gradio_app/static/outer_scale_warning.js").read()

    # Define Gradio interface
    with gr.Blocks(css=custom_css) as demo:
        gr.Markdown(TITLE)
        gr.Markdown(CONTENT_DESCRIPTION)
        gr.Markdown(CONTENT_IN_1)
        gr.HTML(CONTENT_IN_2)
        with gr.Row():
            with gr.Column(scale=2):
                input_image = gr.Image(
                    type="filepath",
                    label="Input Image",
                    elem_classes="input-image"
                )
                model_id = gr.Textbox(
                    label="Model ID",
                    value="danhtran2mind/Real-ESRGAN-Anime-finetuning"
                )
                
                outer_scale = gr.Slider(
                    minimum=1,
                    maximum=8,
                    step=1,
                    value=2,
                    label="Outer Scale",
                    elem_id="outer-scale-slider"
                )
                warning_text = gr.HTML(elem_id="warning-text")
                gr.Markdown(WARNING_1)
                
                examples_data = load_examples()
                submit_button = gr.Button("Generate Images", elem_classes="submit-btn")
                stop_button = gr.Button("Stop Application", elem_classes="stop-btn")
                
            with gr.Column(scale=3):
                output_image = gr.Image(
                    label="Output Image",
                    elem_classes="output-image"
                )
                output_text = gr.Textbox(label="Status")
        
        # Client-side warning update for warning_text
        outer_scale.change(
            fn=lambda x: x,
            inputs=outer_scale,
            outputs=outer_scale,
            js=outer_scale_warning
        )
        
        gr.Examples(
            examples=[[input_img, output_img, outer_scale] for input_img, output_img, outer_scale in examples_data],
            inputs=[input_image, output_image, outer_scale],
            label="Example Inputs",
            examples_per_page=4,
            cache_examples=False,
            fn=select_example,
            outputs=[input_image, outer_scale, output_image, output_text]
        )
            
        submit_button.click(
            fn=run_inference,
            inputs=[input_image, model_id, outer_scale],
            outputs=[output_image, output_text]
        )

        stop_button.click(
            fn=stop_demo,
            inputs=[demo],
            outputs=[output_text]
        )
        
        gr.HTML(CONTENT_OUT_1)
        gr.HTML(CONTENT_OUT_2)

        return demo
    
if __name__ == "__main__":
    run_setup_script()
    demo = create_gui()
    demo.launch(debug=True)