File size: 3,506 Bytes
6fef025
f5b8400
 
6fef025
f5b8400
 
 
27170c1
f5b8400
 
 
 
 
 
 
6fef025
f5b8400
6fef025
f5b8400
 
6fef025
f5b8400
 
6fef025
f5b8400
 
3ce1851
6fef025
27170c1
f5b8400
 
27170c1
 
 
 
6fef025
f5b8400
27170c1
 
 
3ce1851
 
404f61c
3ce1851
75eb055
e1aface
 
27170c1
3977ac5
 
 
 
 
8f8f343
3977ac5
 
 
 
 
3ce1851
27170c1
8f8f343
27170c1
 
 
8f8f343
0ebfb39
27170c1
 
8f8f343
27170c1
8f8f343
 
27170c1
654d3d1
 
27170c1
 
 
 
 
 
 
 
f5b8400
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, 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)
        gr.HTML(
        """
            <div style="text-align: center; max-width: 1200px; margin: 0 auto;">
              <div>
                <body>
                <div class="center"><p style="margin-bottom: 10px; color: #000000;">Scroll down to see more images and select models.</p>
                </div>
                </body>
              </div>
            </div>
        """
        )

        with gr.Row():
            output = [gr.Image(label=m, min_width=480) 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)
                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, multiselect=True, max_choices=num_models, interactive=True, filterable=False)
            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>Based on the <a href="https://huggingface.co/spaces/derwahnsinn/TestGen">TestGen</a> Space by derwahnsinn, the <a href="https://huggingface.co/spaces/RdnUser77/SpacIO_v1">SpacIO</a> Space by RdnUser77 and Omnibus's Maximum Multiplier!
                </p>
            """
            )

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