File size: 5,533 Bytes
ed84387 66c2be1 ed84387 66c2be1 ed84387 66c2be1 ed84387 66c2be1 ed84387 66c2be1 ed84387 66c2be1 ed84387 66c2be1 ed84387 66c2be1 ed84387 38f93a0 |
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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
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 = 32
default_models = models[:num_models]
def extend_choices(choices):
return choices + (num_models - len(choices)) * ['NA']
def update_imgbox(choices, height, width):
choices_plus = extend_choices(choices)
return [gr.Image(None, label=m, visible=(m != 'NA'), height=height, width=width) for m in choices_plus]
def gen_fn(model_str, prompt, height, width, use_ratio):
if model_str == 'NA':
return None
noise = str(randint(0, 99999999999))
# Wenn 16:10 Verhältnis gewünscht, Höhe anpassen
if use_ratio:
height = int(width * 10 / 16) # 16:10 Verhältnis
# Größe in den Prompt einfügen
size_prompt = f"{prompt}, {width}x{height} resolution {noise}"
return models_load[model_str](size_prompt)
with gr.Blocks() as demo:
with gr.Tab('Multiple models'):
with gr.Accordion('Model selection'):
model_choice = gr.CheckboxGroup(models, label=f'Choose up to {num_models} different models', value=default_models, multiselect=True, max_choices=num_models, interactive=True, filterable=False)
with gr.Row():
img_width = gr.Slider(100, 1200, value=1024, step=2, label='Image Width (px)')
img_height = gr.Slider(100, 1200, value=640, step=2, label='Image Height (px)')
use_ratio = gr.Checkbox(label='Use 16:10 ratio', value=True)
# Höhe aktualisieren wenn Ratio aktiviert
img_width.change(
lambda w, r: gr.update(value=int(w * 10 / 16)) if r else gr.update(),
[img_width, use_ratio],
img_height
)
use_ratio.change(
lambda w, r: gr.update(value=int(w * 10 / 16)) if r else gr.update(),
[img_width, use_ratio],
img_height
)
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)
with gr.Row():
output = [gr.Image(label=m, height=640, width=1024) for m in default_models] # Default 16:10
current_models = [gr.Textbox(m, visible=False) for m in default_models]
model_choice.change(update_imgbox, [model_choice, img_height, img_width], output)
model_choice.change(extend_choices, model_choice, current_models)
img_height.change(update_imgbox, [model_choice, img_height, img_width], output)
img_width.change(update_imgbox, [model_choice, img_height, img_width], output)
for m, o in zip(current_models, output):
gen_event = gen_button.click(
gen_fn,
[m, txt_input, img_height, img_width, use_ratio],
o,
queue=False
)
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')
with gr.Row():
img_width2 = gr.Slider(100, 1200, value=1024, step=2, label='Image Width (px)')
img_height2 = gr.Slider(100, 1200, value=640, step=2, label='Image Height (px)')
use_ratio2 = gr.Checkbox(label='Use 16:10 ratio', value=True)
# Höhe aktualisieren wenn Ratio aktiviert
img_width2.change(
lambda w, r: gr.update(value=int(w * 10 / 16)) if r else gr.update(),
[img_width2, use_ratio2],
img_height2
)
use_ratio2.change(
lambda w, r: gr.update(value=int(w * 10 / 16)) if r else gr.update(),
[img_width2, use_ratio2],
img_height2
)
max_images = 16
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.Row():
output2 = [gr.Image(label='', height=640, width=1024) 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)
img_height2.change(lambda h: gr.update(height=h), img_height2, o)
img_width2.change(lambda w: gr.update(width=w), img_width2, o)
gen_event2 = gen_button2.click(
lambda i, n, m, t, h, w, r: gen_fn(m, t, h, w, r) if (i < n) else None,
[img_i, num_images, model_choice2, txt_input2, img_height2, img_width2, use_ratio2],
o
)
stop_button2.click(lambda s: gr.update(interactive=False), None, stop_button2, cancels=[gen_event2])
demo.queue(concurrency_count=36)
demo.launch() |