MrDrmm commited on
Commit
180e6a5
·
verified ·
1 Parent(s): f11b4d9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +49 -117
app.py CHANGED
@@ -13,6 +13,9 @@ model_repo_id = "stabilityai/sdxl-turbo"
13
 
14
  torch_dtype = torch.float32 # Тип данных для CPU
15
 
 
 
 
16
  models = [
17
  'stabilityai/stable-diffusion-3.5-large-turbo',
18
  'black-forest-labs/FLUX.1-dev',
@@ -42,170 +45,99 @@ models = [
42
  'Jonjew/NSFWMaster',
43
  ]
44
 
45
-
46
-
47
- # Функция загрузки моделей
48
  def load_fn(models):
49
  global models_load
50
  models_load = {}
51
  for model in models:
52
- if model not in models_load.keys():
53
- try:
54
- m = gr.load(f'models/{model}')
55
- except Exception as error:
56
- m = gr.Interface(lambda txt: None, ['text'], ['image'])
57
- models_load.update({model: m})
58
-
59
- # Инициализация моделей
60
- models = ["Model1", "Model2", "Model3", "Model4"] # Список доступных моделей
61
  load_fn(models)
62
 
63
  num_models = len(models)
64
- default_models = models[:num_models]
65
 
66
- # Функция расширения списка выборов
67
  def extend_choices(choices):
68
  return choices + (num_models - len(choices)) * ['NA']
69
 
70
- # Обновление изображений
71
  def update_imgbox(choices, width, height):
72
  choices_plus = extend_choices(choices)
73
  return [
74
  gr.Image(
75
- None,
76
- label=m,
77
- visible=(m != 'NA'),
78
- elem_id="custom_image",
79
- width=width,
80
  height=height
81
  ) for m in choices_plus
82
  ]
83
 
84
- # Генерация изображений
85
- def gen_fn(model_str, prompt, width, height, max_retries=3):
86
- """
87
- Генерация изображения с обработкой ошибок и повторными попытками.
88
- """
89
- if model_str == 'NA':
 
 
 
 
 
 
 
90
  return None
91
-
92
- noise = str(randint(0, 9999999))
93
- retries = 0
94
-
95
- while retries < max_retries:
96
- try:
97
- result = models_load[model_str](f'{prompt} {noise}')
98
-
99
- # Проверка на тип tuple
100
- if isinstance(result, tuple):
101
- print(f"Result is a tuple, retrying... Attempt {retries + 1}")
102
- retries += 1
103
- continue
104
-
105
- # Если результат строка (путь к файлу), открываем изображение
106
- if isinstance(result, str):
107
- result = Image.open(result)
108
-
109
- # Изменение размера изображения
110
- if isinstance(result, Image.Image):
111
- result = result.resize((width, height))
112
-
113
- return result
114
- except Exception as e:
115
- print(f"Error generating image: {e}")
116
- retries += 1
117
-
118
- print("Failed to generate image after multiple retries.")
119
- return None
120
 
121
- # Создание интерфейса
122
  def make_me():
123
  with gr.Row():
124
- # Ввод текста
125
  with gr.Column(scale=1):
126
  txt_input = gr.Textbox(
127
  label='Your prompt:',
128
  lines=3,
129
  container=False,
130
  elem_id="custom_textbox",
131
- placeholder="Prompt"
132
  )
133
- # Выбор ширины и высоты
134
  width_slider = gr.Slider(
135
- minimum=100,
136
- maximum=1000,
137
- step=50,
138
- value=250,
139
- label="Width"
140
  )
141
  height_slider = gr.Slider(
142
- minimum=100,
143
- maximum=1000,
144
- step=50,
145
- value=250,
146
- label="Height"
147
  )
148
- with gr.Row():
149
  gen_button = gr.Button('Generate images', elem_id="custom_gen_button")
150
  stop_button = gr.Button('Stop', variant='secondary', interactive=False, elem_id="custom_stop_button")
151
-
152
- def on_generate_click():
153
- return gr.Button('Generate images', elem_id="custom_gen_button"), gr.Button('Stop', variant='secondary', interactive=True, elem_id="custom_stop_button")
154
-
155
- def on_stop_click():
156
- return gr.Button('Generate images', elem_id="custom_gen_button"), gr.Button('Stop', variant='secondary', interactive=False, elem_id="custom_stop_button")
157
-
158
- gen_button.click(on_generate_click, inputs=None, outputs=[gen_button, stop_button])
159
- stop_button.click(on_stop_click, inputs=None, outputs=[gen_button, stop_button])
160
 
161
- # Вывод изображений в два ряда
162
  with gr.Row():
163
  half = len(default_models) // 2
164
  output_row1 = [gr.Image(label=m, elem_id="custom_image") for m in default_models[:half]]
165
  output_row2 = [gr.Image(label=m, elem_id="custom_image") for m in default_models[half:]]
166
- current_models_row1 = [gr.Textbox(m, visible=False) for m in default_models[:half]]
167
- current_models_row2 = [gr.Textbox(m, visible=False) for m in default_models[half:]]
168
 
169
- # Генерация для первого ряда
170
- for m, o in zip(current_models_row1, output_row1):
171
- gen_event = gen_button.click(gen_fn, [m, txt_input, width_slider, height_slider], o)
172
- stop_button.click(on_stop_click, inputs=None, outputs=[gen_button, stop_button], cancels=[gen_event])
173
-
174
- # Генерация для второго ряда
175
- for m, o in zip(current_models_row2, output_row2):
176
- gen_event = gen_button.click(gen_fn, [m, txt_input, width_slider, height_slider], o)
177
- stop_button.click(on_stop_click, inputs=None, outputs=[gen_button, stop_button], cancels=[gen_event])
178
 
179
- # Чекбоксы выбора моделей в аккордеоне
180
  with gr.Accordion('Model selection', elem_id="custom_accordion"):
181
- half = len(models) // 2
182
- model_choice_row1 = models[:half]
183
- model_choice_row2 = models[half:]
184
-
185
- model_choice1 = gr.CheckboxGroup(
186
- model_choice_row1,
187
- label=f'{len(model_choice_row1)} models selected',
188
- value=default_models[:half],
189
- interactive=True,
190
  elem_id="custom_checkbox_group"
191
  )
192
- model_choice2 = gr.CheckboxGroup(
193
- model_choice_row2,
194
- label=f'{len(model_choice_row2)} models selected',
195
- value=default_models[half:],
196
- interactive=True,
197
- elem_id="custom_checkbox_group"
198
  )
199
-
200
- # Обновление первого ряда
201
- model_choice1.change(update_imgbox, [model_choice1, width_slider, height_slider], output_row1)
202
- model_choice1.change(extend_choices, model_choice1, current_models_row1)
203
-
204
- # Обновление второго ряда
205
- model_choice2.change(update_imgbox, [model_choice2, width_slider, height_slider], output_row2)
206
- model_choice2.change(extend_choices, model_choice2, current_models_row2)
207
-
208
-
209
 
210
  with gr.Row():
211
  gr.HTML("")
 
13
 
14
  torch_dtype = torch.float32 # Тип данных для CPU
15
 
16
+
17
+
18
+ # Список доступных моделей
19
  models = [
20
  'stabilityai/stable-diffusion-3.5-large-turbo',
21
  'black-forest-labs/FLUX.1-dev',
 
45
  'Jonjew/NSFWMaster',
46
  ]
47
 
48
+ # Загрузка моделей
 
 
49
  def load_fn(models):
50
  global models_load
51
  models_load = {}
52
  for model in models:
53
+ try:
54
+ models_load[model] = gr.load(f'models/{model}')
55
+ except Exception as e:
56
+ print(f"Failed to load model {model}: {e}")
57
+ models_load[model] = gr.Interface(lambda txt: None, ['text'], ['image'])
58
+
 
 
 
59
  load_fn(models)
60
 
61
  num_models = len(models)
62
+ default_models = models[:4] # Выбираем первые 4 модели по умолчанию
63
 
64
+ # Расширение списка для выбора
65
  def extend_choices(choices):
66
  return choices + (num_models - len(choices)) * ['NA']
67
 
68
+ # Обновление изображения
69
  def update_imgbox(choices, width, height):
70
  choices_plus = extend_choices(choices)
71
  return [
72
  gr.Image(
73
+ None,
74
+ label=m,
75
+ visible=(m != 'NA'),
76
+ elem_id="custom_image",
77
+ width=width,
78
  height=height
79
  ) for m in choices_plus
80
  ]
81
 
82
+ # Функция генерации
83
+ def gen_fn(model_str, prompt, width, height):
84
+ if model_str == 'NA' or model_str not in models_load:
85
+ return None
86
+ try:
87
+ result = models_load[model_str](prompt)
88
+ if isinstance(result, str):
89
+ result = Image.open(result)
90
+ if isinstance(result, Image.Image):
91
+ result = result.resize((width, height))
92
+ return result
93
+ except Exception as e:
94
+ print(f"Error generating image for model {model_str}: {e}")
95
  return None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
 
97
+ # Функция основного интерфейса
98
  def make_me():
99
  with gr.Row():
 
100
  with gr.Column(scale=1):
101
  txt_input = gr.Textbox(
102
  label='Your prompt:',
103
  lines=3,
104
  container=False,
105
  elem_id="custom_textbox",
106
+ placeholder="Enter your prompt here"
107
  )
 
108
  width_slider = gr.Slider(
109
+ minimum=100, maximum=1000, step=50, value=250, label="Width"
 
 
 
 
110
  )
111
  height_slider = gr.Slider(
112
+ minimum=100, maximum=1000, step=50, value=250, label="Height"
 
 
 
 
113
  )
114
+ with gr.Row():
115
  gen_button = gr.Button('Generate images', elem_id="custom_gen_button")
116
  stop_button = gr.Button('Stop', variant='secondary', interactive=False, elem_id="custom_stop_button")
 
 
 
 
 
 
 
 
 
117
 
 
118
  with gr.Row():
119
  half = len(default_models) // 2
120
  output_row1 = [gr.Image(label=m, elem_id="custom_image") for m in default_models[:half]]
121
  output_row2 = [gr.Image(label=m, elem_id="custom_image") for m in default_models[half:]]
 
 
122
 
123
+ # Привязка генерации к кнопке
124
+ for i, model in enumerate(default_models):
125
+ row = output_row1 if i < half else output_row2
126
+ row[i % half] = gr.Image(label=model, elem_id="custom_image")
127
+ gen_button.click(gen_fn, inputs=[model, txt_input, width_slider, height_slider], outputs=row[i % half])
 
 
 
 
128
 
 
129
  with gr.Accordion('Model selection', elem_id="custom_accordion"):
130
+ model_choice = gr.CheckboxGroup(
131
+ choices=models,
132
+ label=f'{len(models)} available models',
133
+ value=default_models,
 
 
 
 
 
134
  elem_id="custom_checkbox_group"
135
  )
136
+ model_choice.change(
137
+ update_imgbox,
138
+ inputs=[model_choice, width_slider, height_slider],
139
+ outputs=[output_row1, output_row2]
 
 
140
  )
 
 
 
 
 
 
 
 
 
 
141
 
142
  with gr.Row():
143
  gr.HTML("")