File size: 3,117 Bytes
168ab84
6fef025
89c5f18
f5b8400
4721043
0567699
168ab84
7afe24b
20cbff0
7afe24b
b17d346
7afe24b
 
 
 
 
 
b17d346
7afe24b
b17d346
 
 
 
 
 
6fef025
f5b8400
 
b17d346
6fef025
73f09c6
f5b8400
 
73f09c6
 
6fef025
bdcf524
b17d346
afdc72e
143d91b
afdc72e
 
 
 
 
 
 
 
 
 
 
 
 
b17d346
 
73f09c6
b17d346
 
73f09c6
b17d346
 
 
 
 
 
 
 
 
 
168ab84
0b4aa7f
26b4194
f6ee7c0
7afe24b
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
import os
import gradio as gr
from random import randint
from all_models import models

css_code = os.getenv("DazDinGo_CSS")

def load_fn(models):
    global models_load
    models_load = {}
    for model in models:
        if model not in models_load.keys():
            try:
                m = gr.load(f'models/{model}')
            except Exception as error:
                m = gr.Interface(lambda txt: None, ['text'], ['image'])
            models_load.update({model: m})

load_fn(models)

num_models = len(models)
default_models = models[:num_models]

def extend_choices(choices):
    return choices + (num_models - len(choices)) * ['NA']

def update_imgbox(choices):
    choices_plus = extend_choices(choices)
    return [gr.Image(None, label=m, visible=(m != 'NA'), elem_id="custom_image") for m in choices_plus]

def gen_fn(model_str, prompt):
    if model_str == 'NA':
        return None
    noise = str(randint(0, 99999999))
    return models_load[model_str](f'{prompt} {noise}')

def make_me():
    with gr.Row():
        with gr.Column(scale=4):
            txt_input = gr.Textbox(label='Your prompt:', lines=4, container=False, elem_id="custom_textbox", placeholder="Prompt", height=250)
        
        with gr.Column(scale=1):
            gen_button = gr.Button('Generate images', elem_id="custom_gen_button")
            stop_button = gr.Button('Stop', variant='secondary', interactive=False, elem_id="custom_stop_button")
            
            def on_generate_click():
                return gr.Button('Generate images', elem_id="custom_gen_button"), gr.Button('Stop', variant='secondary', interactive=True, elem_id="custom_stop_button")
            
            def on_stop_click():
                return gr.Button('Generate images', elem_id="custom_gen_button"), gr.Button('Stop', variant='secondary', interactive=False, elem_id="custom_stop_button")
            
            gen_button.click(on_generate_click, inputs=None, outputs=[gen_button, stop_button])
            stop_button.click(on_stop_click, inputs=None, outputs=[gen_button, stop_button])
    
    with gr.Row():
        output = [gr.Image(label=m, width=512, max_height=768, elem_id="custom_image", show_label=True, interactive=False, show_share_button=False) for m in default_models]
        current_models = [gr.Textbox(m, visible=False) for m in default_models]
        for m, o in zip(current_models, output):
            gen_event = gen_button.click(gen_fn, [m, txt_input], o)
            stop_button.click(on_stop_click, inputs=None, outputs=[gen_button, stop_button], cancels=[gen_event])
    
    with gr.Accordion('Model selection', elem_id="custom_accordion"):
        model_choice = gr.CheckboxGroup(models, label=f'{num_models} different models selected', value=default_models, interactive=True, elem_id="custom_checkbox_group")
        model_choice.change(update_imgbox, model_choice, output)
        model_choice.change(extend_choices, model_choice, current_models)
    
    with gr.Row():
        gr.HTML("")

with gr.Blocks(css=css_code) as demo: 
    make_me()

demo.queue(concurrency_count=50)
demo.launch()