File size: 4,140 Bytes
168ab84
6fef025
89c5f18
f5b8400
4721043
edc8274
168ab84
7afe24b
20cbff0
7afe24b
b17d346
7afe24b
 
 
 
 
 
b17d346
7afe24b
b17d346
 
 
 
 
 
6fef025
f5b8400
 
b17d346
6fef025
8cde685
f5b8400
 
8cde685
 
 
 
 
 
 
6fef025
bdcf524
b17d346
afdc72e
143d91b
8cde685
afdc72e
 
 
 
 
 
 
 
 
 
 
 
 
b17d346
 
e41b06d
b17d346
8cde685
 
 
 
 
 
b17d346
8cde685
 
 
 
 
b17d346
 
 
 
 
 
 
 
 
 
168ab84
0b4aa7f
26b4194
f6ee7c0
7afe24b
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
import os
import gradio as gr
from random import randint
from all_models import models

css_code = os.getenv("DazDinGo_CSS", "No CSS found")

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 = len(models)
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'), elem_id="custom_image") for m in choices_plus]

def gen_fn(model_str, prompt, negative_prompt, cfg_scale, sampler, seed):
    if model_str == 'NA':
        return None
    # Use the provided seed or generate a random one if seed is -1
    noise = seed if seed != -1 else randint(0, 99999999)
    
    # Prepare the full prompt with negative prompt and CFG scale
    full_prompt = f'{prompt} --negative_prompt "{negative_prompt}" --cfg_scale {cfg_scale} --sampler {sampler} --seed {noise}'
    
    return models_load[model_str](full_prompt)

def make_me():
    with gr.Row():
        with gr.Column(scale=4):
            txt_input = gr.Textbox(label='Your prompt:', lines=4, container=False, elem_id="custom_textbox", placeholder="Prompt", height=250)
            negative_prompt = gr.Textbox(label='Negative Prompt:', lines=2, placeholder="What to avoid in the image", elem_id="custom_negative_prompt")
        
        with gr.Column(scale=1):
            gen_button = gr.Button('Generate images', elem_id="custom_gen_button")
            stop_button = gr.Button('Stop', variant='secondary', interactive=False, elem_id="custom_stop_button")
            
            def on_generate_click():
                return gr.Button('Generate images', elem_id="custom_gen_button"), gr.Button('Stop', variant='secondary', interactive=True, elem_id="custom_stop_button")
            
            def on_stop_click():
                return gr.Button('Generate images', elem_id="custom_gen_button"), gr.Button('Stop', variant='secondary', interactive=False, elem_id="custom_stop_button")
            
            gen_button.click(on_generate_click, inputs=None, outputs=[gen_button, stop_button])
            stop_button.click(on_stop_click, inputs=None, outputs=[gen_button, stop_button])
    
    with gr.Row():
        output = [gr.Image(label=m, width=None, height=None, elem_id="custom_image", show_label=True, interactive=False, show_share_button=False) for m in default_models]
        current_models = [gr.Textbox(m, visible=False) for m in default_models]
        
        # Additional inputs for CFG, sampler, seed, and negative prompt
        cfg_scale = gr.Slider(minimum=1, maximum=20, step=0.1, value=7, label="CFG Scale", elem_id="custom_cfg_scale")
        sampler = gr.Dropdown(choices=["DDIM", "PLMS", "Euler", "Heun"], value="DDIM", label="Sampler", elem_id="custom_sampler")
        seed = gr.Number(value=-1, label="Seed (-1 for random)", elem_id="custom_seed")
        
        for m, o in zip(current_models, output):
            gen_event = gen_button.click(
                gen_fn, 
                [m, txt_input, negative_prompt, cfg_scale, sampler, seed], 
                o
            )
            stop_button.click(on_stop_click, inputs=None, outputs=[gen_button, stop_button], cancels=[gen_event])
    
    with gr.Accordion('Model selection', elem_id="custom_accordion"):
        model_choice = gr.CheckboxGroup(models, label=f'{num_models} different models selected', value=default_models, interactive=True, elem_id="custom_checkbox_group")
        model_choice.change(update_imgbox, model_choice, output)
        model_choice.change(extend_choices, model_choice, current_models)
    
    with gr.Row():
        gr.HTML("")

with gr.Blocks(css=css_code) as demo: 
    make_me()

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