Spaces:
Running
Running
File size: 3,445 Bytes
374ecac 7169302 374ecac 527535b 374ecac c9696a1 374ecac a1c23c9 1792197 374ecac 1792197 19a47bd b314858 9a9e681 d1e0334 374ecac b314858 1792197 a1c23c9 5593057 374ecac 4735bd9 1792197 4735bd9 374ecac 4735bd9 1792197 4735bd9 374ecac 4735bd9 9a9e681 1792197 4735bd9 374ecac 4735bd9 1792197 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 86 87 88 89 |
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.Dropdown(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, concurrency_limit = 36)
with gr.Column():
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, show_progress = False)
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, concurrency_limit = 36)
stop_button.click(lambda s: gr.update(interactive = False), None, stop_button, cancels = [gen_event])
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 = 4
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.Column():
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, show_progress = False)
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, concurrency_limit = 36)
stop_button2.click(lambda s: gr.update(interactive = False), None, stop_button2, cancels = [gen_event2])
demo.queue()
demo.launch() |