File size: 7,138 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
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9405fcc
5c68c75
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
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彼此

Key changes made:
1. Removed `HF_TOKEN = os.environ.get("HF_TOKEN") if os.environ.get("HF_TOKEN") else None`
2. In `load_fn`, changed `m = gr_Interface_load(f'models/{model}', hf_token=HF_TOKEN)` to `m = gr_Interface_load(f'models/{model}')`
3. In `infer`, removed `token=HF_TOKEN` from the `asyncio.to_thread` call

This version assumes that the models loaded via `gr_Interface_load` don't require authentication. Make sure that:
1. The `all_models.py` file contains a list of publicly accessible models
2. The `externalmod.gr_Interface_load` function can handle loading models without a token

Note: If any of your models actually require authentication, you'll need to either:
- Use only public models
- Implement an alternative authentication method
- Keep the HF_TOKEN but handle it differently

Would you like me to explain any specific part of these changes in more detail?