File size: 3,297 Bytes
0eac613
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e8c3fc8
0eac613
e8c3fc8
 
0eac613
 
 
 
 
 
 
e8c3fc8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2c77f68
 
0927694
2c77f68
0927694
2c77f68
0927694
e8c3fc8
0927694
2c77f68
0927694
 
 
 
2c77f68
0927694
2c77f68
 
 
0927694
2c77f68
0927694
2c77f68
 
 
 
 
 
0927694
2c77f68
6ed4ca6
2c77f68
 
e8c3fc8
3af2576
 
 
 
 
e8c3fc8
 
 
 
 
 
 
 
 
3af2576
e8c3fc8
3af2576
e8c3fc8
3af2576
e8c3fc8
 
3af2576
e8c3fc8
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
115
116
117
118
119
120
121
122
import gradio as gr

models = [
    {"name": "Claudfuen 1", "url": "claudfuen/photorealistic-fuen-v1"},
    {"name": "Deliberate", "url": "Masagin/Deliberate"},
    {"name": "Seek Art Mega", "url": "coreco/seek.art_MEGA"},
    {"name": "Realistic Vision 1.4", "url": "SG161222/Realistic_Vision_V1.4"},
    {"name": "Dreamshaper", "url": "Lykon/DreamShaper"},
]

current_model = models[0]

text_gen = gr.Interface.load("spaces/Omnibus/MagicPrompt-Stable-Diffusion_link")

models2 = []
for model in models:
    model_url = f"models/{model['url']}"
    loaded_model = gr.Interface.load(model_url, live=True, preprocess=True)
    models2.append(loaded_model)


def text_it(inputs, text_gen=text_gen):
    return text_gen(inputs)


def set_model(current_model_index):
    global current_model
    current_model = models[current_model_index]
    return gr.update(label=f"{current_model['name']}")


def send_it(inputs, model_choice):
    proc = models2[model_choice]
    return proc(inputs)


css = """
<style>
    .searchable-dropdown {
        position: relative;
    }

    .searchable-dropdown input {
        width: 100%;
        padding: 0.5rem;
        border-radius: 5px;
        border: 1px solid #ccc;
    }

    .searchable-dropdown select {
        width: 100%;
        padding: 0.5rem;
        border-radius: 5px;
        border: 1px solid #ccc;
        position: absolute;
        top: 0;
        left: 0;
        opacity: 0;
        pointer-events: none;
    }
</style>
"""


def make_dropdown_searchable(dropdown_id):
    script = f"""
    <script>
        function makeDropdownSearchable(dropdownId) {{
            const input = document.getElementById(dropdownId);
            input.addEventListener("input", function() {{
                const value = this.value.toLowerCase();
                const options = Array.from(document.querySelectorAll(`#${dropdownId} option`));
                let found = false;
                for (let i = 0; i < options.length; i++) {{
                    const option = options[i];
                    const text = option.text.toLowerCase();
                    const match = text.includes(value);
                    option.style.display = match ? "block" : "none";
                    if (match) {{
                        found = true;
                    }}
                }}
                if (value && !found) {{
                    const firstOption = options[0];
                    if (firstOption) {{
                        firstOption.selected = true;
                    }}
                }}
            }});
        }}

        makeDropdownSearchable("{dropdown_id}");
    </script>
    """
    return gr.outputs.HTML(script)


with gr.Interface(
    fn=text_it,
    inputs="text",
    outputs="text",
    css=css,
    capture_session=True
) as iface:
    model_dropdown = gr.outputs.Dropdown(
        label="Choose Model",
        choices=[m["name"] for m in models],
        type="index",
        value=current_model["name"],
        interactive=True,
        component_id="model_dropdown"
    )

    make_dropdown_searchable("model_dropdown")

    iface.inputs.insert(0, model_dropdown)

    iface.layout["top"] = ["inputs", "outputs", "model_dropdown"]
    iface.layout["heights"] = ["200px", "auto", "40px"]

    iface.launch()