File size: 3,232 Bytes
374ecac
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7169302
374ecac
 
 
 
 
 
 
 
 
527535b
374ecac
 
8fd30e2
374ecac
 
 
8fd30e2
374ecac
 
 
 
f53d096
8fd30e2
cc23ea5
374ecac
8fd30e2
 
 
 
374ecac
 
19a47bd
 
b314858
374ecac
d1e0334
374ecac
cc23ea5
935ab90
5593057
374ecac
 
 
 
4735bd9
 
 
 
374ecac
4735bd9
 
 
374ecac
4735bd9
374ecac
4735bd9
 
 
 
 
374ecac
4735bd9
374ecac
 
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
import gradio as gr
from random import randint
from all_models import models

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 = 6
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')) for m in choices_plus]

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


with gr.Blocks() as demo:
    with gr.Tab('Multiple models'): 
        with gr.Accordion('Model selection'):
            model_choice = gr.CheckboxGroup(models, label = f'Choose up to {num_models} different models', value = default_models, multiselect = True, max_choices = num_models, interactive = True, filterable = False)


        txt_input = gr.Textbox(label = 'Prompt text')
        gen_button = gr.Button('Generate')
        stop_button = gr.Button('Stop', variant = 'secondary', interactive = False)
        gen_button.click(lambda s: gr.update(interactive = True), None, stop_button)
           
        with gr.Row():
            output = [gr.Image(label = m) for m in default_models]
            current_models = [gr.Textbox(m, visible = False) for m in default_models]
            
            model_choice.change(update_imgbox, model_choice, output)
            model_choice.change(extend_choices, model_choice, current_models)

        for m, o in zip(current_models, output):
            gen_event = gen_button.click(gen_fn, [m, txt_input], o, queue=False)
                    
            
    with gr.Tab('Single model'):
        model_choice2 = gr.Dropdown(models, label = 'Choose model', value = models[0], filterable = False)
        txt_input2 = gr.Textbox(label = 'Prompt text')
        
        max_images = 6
        num_images = gr.Slider(1, max_images, value = max_images, step = 1, label = 'Number of images')
        
        gen_button2 = gr.Button('Generate')
        stop_button2 = gr.Button('Stop', variant = 'secondary', interactive = False)
        gen_button2.click(lambda s: gr.update(interactive = True), None, stop_button2)
        
        with gr.Row():
            output2 = [gr.Image(label = '') for _ in range(max_images)]

        for i, o in enumerate(output2):
            img_i = gr.Number(i, visible = False)
            num_images.change(lambda i, n: gr.update(visible = (i < n)), [img_i, num_images], o)
            gen_event2 = gen_button2.click(lambda i, n, m, t: gen_fn(m, t) if (i < n) else None, [img_i, num_images, model_choice2, txt_input2], o)
            stop_button2.click(lambda s: gr.update(interactive = False), None, stop_button2, cancels = [gen_event2])

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