File size: 3,237 Bytes
6fef025
f5b8400
 
6fef025
f5b8400
 
 
27170c1
f5b8400
 
 
 
 
 
 
6fef025
f5b8400
6fef025
f5b8400
 
6fef025
f5b8400
 
6fef025
f5b8400
 
3ce1851
6fef025
27170c1
f5b8400
 
27170c1
 
 
414e533
6fef025
f5b8400
27170c1
 
 
3ce1851
 
404f61c
3ce1851
75eb055
e1aface
 
34e2459
3977ac5
 
 
 
 
e568b71
3977ac5
 
 
 
 
3ce1851
27170c1
7ba1157
21bed0e
cfe38d8
 
 
 
 
27170c1
8f8f343
6de341c
8f8f343
 
27170c1
654d3d1
 
27170c1
 
123d552
27170c1
 
 
 
414e533
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
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, negative_prompt=None, image_style="Default"):
    if model_str == 'NA':
        return None
    modified_prompt = f"{prompt}, {image_style}"
    if negative_prompt:
        modified_prompt += f", not {negative_prompt}"
    return models_load[model_str](modified_prompt)

with gr.Blocks() as demo:
    with gr.Tab('The Dream'):
        txt_input = gr.Textbox(label='Your prompt:', lines=4)

        with gr.Accordion("Advanced Settings", open=False) as advanced_settings:
            neg_prompt = gr.Textbox(label='Negative prompt (Optional):', placeholder='Enter undesirable attributes here', lines=2)
            image_style = gr.Dropdown(label='Select Style', choices=["Default", "Realistic", "Portrait", "Anime"], value="Default")

        gen_button = gr.Button('Generate up to 6 images in up to 2 minutes total')
        stop_button = gr.Button('Stop', variant='secondary', interactive=False)

        gen_button.click(lambda s: gr.update(interactive=True), None, stop_button, concurrency_limit=10)
        gr.HTML(
        """
            <div style="text-align: center; max-width: 1200px; margin: 0 auto;">
              <div>
                <body>
                <div class="center"><p style="margin-bottom: 10px; color: var(--body-text-color);">Scroll down to see more images and select models.</p>
                </div>
                </body>
              </div>
            </div>
        """
        )

        with gr.Row():
            output = [gr.Image(label=m, min_width=460) 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, neg_prompt, image_style], o, concurrency_limit=10)
                stop_button.click(lambda s: gr.update(interactive=False), None, stop_button, cancels=[gen_event])

        with gr.Accordion('Model selection'):
            model_choice = gr.CheckboxGroup(models, label=f'Choose up to {num_models} different models from the best available!', value=default_models, interactive=True)
            model_choice.change(update_imgbox, model_choice, output)
            model_choice.change(extend_choices, model_choice, current_models)

        with gr.Row():
            gr.HTML(
            """
                <div class="footer">
                <p>Have fun!
                </p>
            """
            )

demo.launch(max_threads=200)