File size: 3,117 Bytes
ac2e316
6fef025
89c5f18
f5b8400
53b0019
ac2f87d
ac2e316
f5b8400
 
 
 
 
 
 
 
d6c665c
f5b8400
6fef025
81987e1
6fef025
19aac56
f5b8400
6fef025
f5b8400
 
6fef025
f5b8400
 
36daf82
6fef025
f5b8400
 
 
ac2e316
6177a01
6fef025
bdcf524
36daf82
ac2e316
 
 
36daf82
ac2e316
 
 
 
 
 
 
 
 
 
 
2944f54
36daf82
ac2e316
36daf82
 
 
 
 
 
 
 
 
 
 
 
 
ac2e316
e5beca8
8fc64ff
0334c3d
ca04f70
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()