File size: 4,259 Bytes
6fef025
f5b8400
 
6fef025
3f65faf
 
 
f5b8400
3f65faf
 
 
 
 
 
 
 
 
 
 
 
d936248
f1acb7b
 
 
3f65faf
f1acb7b
3f65faf
f1acb7b
3f65faf
 
f1acb7b
3f65faf
 
 
f1acb7b
3f65faf
 
f1acb7b
 
3f65faf
 
 
 
 
f1acb7b
3f65faf
f1acb7b
3f65faf
 
 
f1acb7b
3f65faf
 
 
 
 
f1acb7b
3f65faf
f1acb7b
 
 
 
037bf9d
f1acb7b
 
 
3f65faf
 
 
f1acb7b
3f65faf
 
 
f1acb7b
3f65faf
 
 
 
 
f1acb7b
3f65faf
 
 
 
 
 
 
 
 
 
 
f1acb7b
 
3f65faf
f1acb7b
 
3f65faf
 
 
 
 
 
 
 
 
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import gradio as gr
from random import randint
from all_models import models

# Função para carregar os modelos e armazená-los em um dicionário
def load_models(models):
    models_dict = {}
    for model in models:
        try:
            # Tente carregar o modelo e armazená-lo no dicionário
            model_obj = gr.load(f'models/{model}')
            models_dict[model] = model_obj
        except Exception as e:
            # Lidar com exceções ao carregar o modelo
            print(f"Erro ao carregar o modelo {model}: {e}")
            models_dict[model] = gr.Interface(lambda txt: None, ['text'], ['image'])
    return models_dict

# Carregar os modelos e armazená-los na variável global
models_load = load_models(models)

num_models = 150
default_models = models[:num_models]

# Função para estender as escolhas com 'NA' se necessário
def extend_choices(choices):
    return choices + ['NA'] * (num_models - len(choices))

# Função para atualizar a caixa de imagens com base nas escolhas
def update_imgbox(choices, output):
    choices_plus = extend_choices(choices)
    for m, o in zip(choices_plus, output):
        o.label = m
        o.visible = (m != 'NA')

# Função para gerar imagens com base no modelo e prompt selecionados
def generate_images(model_str, prompt, negative_prompt):
    if model_str == 'NA':
        return None
    noise = str(randint(0, 99999999999))
    prompt_with_noise = f'{prompt} {noise}'
    if negative_prompt:
        prompt_with_noise += ' Negative'
    return models_load[model_str](prompt_with_noise)

# Interface Gradio
with gr.Blocks() as demo:
    with gr.Tab('The Dream'):
        txt_input = gr.Textbox(label='Your prompt:', lines=4).style(container=False, min_width=1200)
        negative_prompt = gr.Checkbox(label='Negative Prompt', value=False)
        gen_button = gr.Button('Generate up to 150 images in up to 3 minutes total')
        stop_button = gr.Button('Stop', variant='secondary', interactive=False)

        # Evento de clique para iniciar a geração de imagens
        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=512) 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):
                # Evento de clique para gerar imagens para cada modelo selecionado
                gen_event = gen_button.click(generate_images, [m, txt_input, negative_prompt], o)
                # Evento de clique para parar a geração de imagens
                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 available options!',
                value=default_models,
                multiselect=True,
                max_choices=num_models,
                interactive=True,
                filterable=False
            )

            # Evento de mudança para atualizar a caixa de imagens com base nas escolhas
            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()