File size: 6,278 Bytes
b3f2e04
9405fcc
 
01de3f3
e9ee4ce
7aed1b6
 
 
 
0a12cf5
9405fcc
 
 
 
 
 
 
5c68c75
9405fcc
7aed1b6
 
9405fcc
e9ee4ce
9405fcc
 
02001b9
9405fcc
7aed1b6
b7236f0
5c68c75
a29b766
9405fcc
 
07eca3d
9405fcc
 
5c68c75
2ba3409
9405fcc
 
 
5c68c75
9405fcc
7d6469d
0a12cf5
 
 
 
 
 
5c68c75
0a12cf5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ea1585c
30e15ec
ea1585c
0a12cf5
 
 
 
b46ae9a
 
 
5c68c75
b46ae9a
5c68c75
9405fcc
edd0581
 
 
b46ae9a
edd0581
 
bc798f6
 
 
 
c1734cd
bc798f6
 
 
c48d832
5c68c75
 
bd650f6
b46ae9a
5c68c75
bd650f6
b46ae9a
4a7ad4a
 
5c68c75
b46ae9a
 
5c68c75
 
7aed1b6
5c68c75
b46ae9a
 
 
 
0a12cf5
 
 
 
 
5c68c75
 
0a12cf5
 
 
5c68c75
0a12cf5
 
 
 
5c68c75
0a12cf5
 
5c68c75
 
0a12cf5
 
 
5c68c75
 
9405fcc
 
 
 
5c68c75
af9192e
 
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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()

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}')
            except Exception as error:
                print(error)
                m = gr.Interface(lambda: None, ['text'], ['image'])
            models_load.update({model: m})

load_fn(models)

num_models = 1
default_models = models[:num_models]
inference_timeout = 600

MAX_SEED = 3999999999

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('')
    return models_load[model_str](f'{prompt} {noise}')

async def infer(model_str, prompt, seed=1, timeout=inference_timeout):
    from pathlib import Path
    kwargs = {}
    noise = ""
    kwargs["seed"] = seed
    task = asyncio.create_task(asyncio.to_thread(models_load[model_str].fn,
                               prompt=f'{prompt} {noise}', **kwargs))
    await asyncio.sleep(0)
    try:
        result = await asyncio.wait_for(task, timeout=timeout)
    except (Exception, asyncio.TimeoutError) as e:
        print(e)
        print(f"Task timed out: {model_str}")
        if not task.done(): task.cancel()
        result = None
    if task.done() and result is not None:
        with lock:
            png_path = "image.png"
            result.save(png_path)
            image = str(Path(png_path).resolve())
        return image
    return None

def gen_fnseed(model_str, prompt, seed=1):
    if model_str == 'NA':
        return None
    try:
        loop = asyncio.new_event_loop()
        result = loop.run_until_complete(infer(model_str, prompt, seed, inference_timeout))
    except (Exception, asyncio.CancelledError) as e:
        print(e)
        print(f"Task aborted: {model_str}")
        result = None
        with lock:
            image = "https://huggingface.co/spaces/Yntec/ToyWorld/resolve/main/error.png"
        result = image
    finally:
        loop.close()
    return result

def gen_fnsix(model_str, prompt):
    if model_str == 'NA':
        return None
    noisesix = str(randint(1941, 2023))
    return models_load[model_str](f'{prompt} {noisesix}')

with gr.Blocks() as demo:
    gr.HTML(
    """
        <div>
        <p> <center><img src="https://huggingface.co/Yntec/OpenGenDiffusers/resolve/main/pp.png" style="height:128px; width:482px; margin-top: -22px; margin-bottom: -44px;" span title="Free ai art image generator Printing Press"></center>
        </p>
    """
)
    gr.HTML(
    """
        <div>
        <p> <center>For negative prompts, Width and Height, and other features visit John6666's <a href="https://huggingface.co/spaces/John6666/PrintingPress4">Printing Press 4</a>!</center>
        </p></div>
    """
)  
    with gr.Tab('One Image'):
        model_choice = gr.Dropdown(models, label=f'Choose a model from the {len(models)} available! Try clearing the box and typing on it to filter them!', value=models[0], filterable=True)
        txt_input = gr.Textbox(label='Your prompt:')
        
        max_imagesone = 1
        num_imagesone = gr.Slider(1, max_imagesone, value=max_imagesone, step=1, label='Nobody gets to see this label so I can put here whatever I want!', visible=False)
        
        gen_button = gr.Button('Generate')
        
        with gr.Row():
            output = [gr.Image(label='') for _ in range(max_imagesone)]

        for i, o in enumerate(output):
            img_in = gr.Number(i, visible=False)
            num_imagesone.change(lambda i, n: gr.update(visible=(i < n)), [img_in, num_imagesone], o, show_progress=False)
            gen_event = gen_button.click(lambda i, n, m, t: gen_fn(m, t) if (i < n) else None, [img_in, num_imagesone, model_choice, txt_input], o, concurrency_limit=None, queue=False)

        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, Omnibus's Maximum Multiplier, and <a href="https://huggingface.co/spaces/Yntec/ToyWorld">Toy World</a>!
        </p>
    """
)
    with gr.Tab('Seed it!'):
        model_choiceseed = gr.Dropdown(models, label=f'Choose a model from the {len(models)} available! Try clearing the box and typing on it to filter them!', value=models[0], filterable=True)
        txt_inputseed = gr.Textbox(label='Your prompt:')
        seed = gr.Slider(label="Use a seed to replicate the same image later", info="Max 3999999999", minimum=0, maximum=MAX_SEED, step=1, value=1)
        
        max_imagesseed = 1
        num_imagesseed = gr.Slider(1, max_imagesone, value=max_imagesone, step=1, label='One, because more would make it produce identical images with the seed', visible=False)
        
        gen_buttonseed = gr.Button('Generate an image using the seed')
        
        with gr.Row():
            outputseed = [gr.Image(label='') for _ in range(max_imagesseed)]

        for i, o in enumerate(outputseed):
            img_is = gr.Number(i, visible=False)
            num_imagesseed.change(lambda i, n: gr.update(visible=(i < n)), [img_is, num_imagesseed], o, show_progress=False)
            gen_eventseed = gr.on(triggers=[gen_buttonseed.click, txt_inputseed.submit],
                               fn=lambda i, n, m, t, n1: gen_fnseed(m, t, n1) if (i < n) else None,
                               inputs=[img_is, num_imagesseed, model_choiceseed, txt_inputseed, seed], outputs=[o],
                               concurrency_limit=None, queue=False)

        with gr.Row():
            gr.HTML(
    """
        <div class="footer">
        <p> Based on the <a href="https://huggingface.co/spaces/derwahnsinn/TestGen">TestGen彼此
        </p>
    """)