File size: 4,108 Bytes
a846cff
2a7655f
 
7be4c79
d3f2a30
 
 
 
 
 
 
7be4c79
 
2a7655f
 
 
e9c493a
2a7655f
 
 
d3f2a30
2a7655f
d3f2a30
 
2a7655f
674bc5d
9524f0c
2a7655f
1d60450
 
2a7655f
1d60450
d3f2a30
 
03b3365
2a7655f
d3f2a30
d801b9c
9524f0c
2a7655f
d3f2a30
 
847da17
2a7655f
 
 
 
 
c7c21fa
c44e665
fd2b0c7
2a7655f
91b87bd
d3f2a30
2a7655f
d3f2a30
 
2a7655f
 
 
8d73fdc
 
2a7655f
8d73fdc
 
 
 
2a7655f
 
 
 
 
 
 
d3f2a30
 
 
2a7655f
d3f2a30
 
2a7655f
 
 
 
 
 
d3f2a30
2a7655f
 
 
 
 
 
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
import gradio as gr
from random import randint
from all_models import models

from externalmod import gr_Interface_load

import asyncio
import os
from threading import RLock
lock = RLock()
HF_TOKEN = os.environ.get("HF_TOKEN") if os.environ.get("HF_TOKEN") else None # If private or gated models aren't used, ENV setting is unnecessary.


def load_fn(models):
    global models_load
    models_load = {}
    
    for model in models:
        if model not in models_load.keys():
            try:
                m = gr_Interface_load(f'models/{model}', hf_token=HF_TOKEN)
            except Exception as error:
                print(error)
                m = gr.Interface(lambda: None, ['text'], ['image'])
            models_load.update({model: m})


load_fn(models)


num_models = 6

default_models = models[:num_models]
inference_timeout = 600

def extend_choices(choices):
    return choices[:num_models] + (num_models - len(choices[:num_models])) * ['NA']


def update_imgbox(choices):
    choices_plus = extend_choices(choices[:num_models])
    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('') #str(randint(0, 99999999999))
    return models_load[model_str](f'{prompt} {noise}')



with gr.Blocks() as demo:
    with gr.Tab('Toy World'): 
        txt_input = gr.Textbox(label='Your prompt:', lines=4)
        gen_button = gr.Button('Generate up to 6 images in up to 3 minutes total')
        #stop_button = gr.Button('Stop', variant = 'secondary', interactive = False)
        gen_button.click(lambda s: gr.update(interactive = True), None)
        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 = gr.on(triggers=[gen_button.click, txt_input.submit], fn=gen_fn,
                            inputs=[m, txt_input], outputs=[o], concurrency_limit=None, queue=False)
                #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 {int(num_models)} different models from the {len(models)} available!', value=default_models, interactive=True)
            #model_choice = gr.CheckboxGroup(models, label = f'Choose up to {num_models} different models from the 2 available! Untick them to only use one!', 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/John6666/hfd_test_nostopbutton">Huggingface NoStopButton</a> Space by John6666, <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! For 6 images with the same model check out the <a href="https://huggingface.co/spaces/Yntec/PrintingPress">Printing Press</a>, for the classic UI with prompt enhancer try <a href="https://huggingface.co/spaces/Yntec/blitz_diffusion">Blitz Diffusion!</a>
        </p>
    """
)

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