File size: 3,117 Bytes
fa23dbc
6fef025
89c5f18
f5b8400
4721043
317b96c
fa23dbc
20cbff0
 
b17d346
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6fef025
f5b8400
 
b17d346
6fef025
f5b8400
 
 
fa23dbc
6177a01
6fef025
bdcf524
b17d346
fa23dbc
 
 
b17d346
fa23dbc
 
 
 
 
 
 
 
 
 
 
b17d346
 
fa23dbc
b17d346
 
 
 
 
 
 
 
 
 
 
 
 
fa23dbc
5a044c1
26b4194
fa23dbc
5a044c1
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()