Etrwy commited on
Commit
663e1cf
·
verified ·
1 Parent(s): ab63b5d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +94 -69
app.py CHANGED
@@ -85,84 +85,109 @@ def check_server_ready(port):
85
 
86
 
87
 
88
- def generate_image_with_allocation(prompt, image, image2, allocation_time):
89
- if allocation_time is None:
90
- allocation_time = 170
91
- else:
92
- allocation_time = int(allocation_time)
93
-
94
- @spaces.GPU(duration=allocation_time)
95
- def generate_image(prompt, image, image2):
96
- prefix_filename = str(random.randint(0, 999999))
97
- prompt = prompt.replace('ComfyUI', prefix_filename)
98
- prompt = json.loads(prompt)
99
-
100
- image = Image.fromarray(image)
101
- image.save(INPUT_DIR + '/input.png', format='PNG')
102
- if image2 is not None:
103
- image2 = Image.fromarray(image2)
104
- image2.save(INPUT_DIR + '/input2.png', format='PNG')
105
-
106
- process = None
107
- new_port = str(random.randint(8123, 8200))
108
-
109
- try:
110
- # Запускаем скрипт как подпроцесс
111
- process = subprocess.Popen([sys.executable, COMF_PATH, "--listen", "127.0.0.1", "--port", new_port])
112
- logger.debug(f'Subprocess started with PID: {process.pid}')
113
-
114
- # Ожидание запуска сервера
115
- for _ in range(30): # Максимум 30 секунд ожидания
116
- if check_server_ready(new_port):
117
- break
118
- time.sleep(1)
119
- else:
120
- raise TimeoutError("Server did not start in time")
121
-
122
- start_queue(prompt, new_port)
123
-
124
- # Ожидание нового изображения
125
- timeout = 360 # Максимальное время ожидания в секундах
126
- start_time = time.time()
127
- while time.time() - start_time < timeout:
128
- latest_image = wait_for_image_with_prefix(OUTPUT_DIR, prefix_filename)
129
- if latest_image:
130
- logger.debug(f"file is: {latest_image}")
131
- try:
132
- return Image.open(latest_image)
133
- finally:
134
- delete_image_file(latest_image)
135
- delete_image_file(INPUT_DIR + '/input.png')
136
- if image2 is not None:
137
- delete_image_file(INPUT_DIR + '/input2.png')
138
- time.sleep(1)
139
-
140
- raise TimeoutError("New image was not generated in time")
141
-
142
- except Exception as e:
143
- logger.error(f"Error in generate_image: {e}")
144
-
145
- finally:
146
- if process and process.poll() is None:
147
- process.terminate()
148
- logger.debug("process.terminate()")
149
  try:
150
- logger.debug("process.wait(timeout=5)")
151
- process.wait(timeout=5)
152
- except subprocess.TimeoutExpired:
153
- logger.debug("process.kill()")
154
- process.kill()
155
- return generate_image(prompt, image, image2)
 
156
 
 
157
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
 
159
  if __name__ == "__main__":
160
- demo = gr.Interface(fn=generate_image_with_allocation,
161
  inputs=[
162
  "text",
163
  gr.Image(image_mode='RGBA', type="numpy"),
164
  gr.Image(image_mode='RGBA', type="numpy"),
165
- "text"
166
  ],
167
  outputs=[
168
  gr.Image(type="numpy", image_mode='RGBA')
 
85
 
86
 
87
 
88
+ def generate_image(prompt, image, image2):
89
+ prefix_filename = str(random.randint(0, 999999))
90
+ prompt = prompt.replace('ComfyUI', prefix_filename)
91
+ prompt = json.loads(prompt)
92
+
93
+ image = Image.fromarray(image)
94
+ image.save(INPUT_DIR + '/input.png', format='PNG')
95
+ if image2 is not None:
96
+ image2 = Image.fromarray(image2)
97
+ image2.save(INPUT_DIR + '/input2.png', format='PNG')
98
+
99
+ process = None
100
+ new_port = str(random.randint(8123, 8200))
101
+
102
+ try:
103
+ # Запускаем скрипт как подпроцесс
104
+ process = subprocess.Popen([sys.executable, COMF_PATH, "--listen", "127.0.0.1", "--port", new_port])
105
+ logger.debug(f'Subprocess started with PID: {process.pid}')
106
+
107
+ # Ожидание запуска сервера
108
+ for _ in range(30): # Максимум 30 секунд ожидания
109
+ if check_server_ready(new_port):
110
+ break
111
+ time.sleep(1)
112
+ else:
113
+ raise TimeoutError("Server did not start in time")
114
+
115
+ start_queue(prompt, new_port)
116
+
117
+ # Ожидание нового изображения
118
+ timeout = 360 # Максимальное время ожидания в секундах
119
+ start_time = time.time()
120
+ while time.time() - start_time < timeout:
121
+ latest_image = wait_for_image_with_prefix(OUTPUT_DIR, prefix_filename)
122
+ if latest_image:
123
+ logger.debug(f"file is: {latest_image}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
  try:
125
+ return Image.open(latest_image)
126
+ finally:
127
+ delete_image_file(latest_image)
128
+ delete_image_file(INPUT_DIR + '/input.png')
129
+ if image2 is not None:
130
+ delete_image_file(INPUT_DIR + '/input2.png')
131
+ time.sleep(1)
132
 
133
+ raise TimeoutError("New image was not generated in time")
134
 
135
+ except Exception as e:
136
+ logger.error(f"Error in generate_image: {e}")
137
+
138
+ finally:
139
+ if process and process.poll() is None:
140
+ process.terminate()
141
+ logger.debug("process.terminate()")
142
+ try:
143
+ logger.debug("process.wait(timeout=5)")
144
+ process.wait(timeout=5)
145
+ except subprocess.TimeoutExpired:
146
+ logger.debug("process.kill()")
147
+ process.kill()
148
+ return generate_image(prompt, image, image2)
149
+
150
+ @spaces.GPU(duration=130)
151
+ def generate_image_130(prompt, image, image2):
152
+ return generate_image(prompt, image, image2)
153
+
154
+ @spaces.GPU(duration=150)
155
+ def generate_image_150(prompt, image, image2):
156
+ return generate_image(prompt, image, image2)
157
+
158
+ @spaces.GPU(duration=170)
159
+ def generate_image_170(prompt, image, image2):
160
+ return generate_image(prompt, image, image2)
161
+
162
+ @spaces.GPU(duration=190)
163
+ def generate_image_190(prompt, image, image2):
164
+ return generate_image(prompt, image, image2)
165
+
166
+ @spaces.GPU(duration=200)
167
+ def generate_image_200(prompt, image, image2):
168
+ return generate_image(prompt, image, image2)
169
+
170
+ def generate_image_wrapper(prompt, image, image2, duration):
171
+ if duration == "130":
172
+ return generate_image_130(prompt, image, image2)
173
+ elif duration == "150":
174
+ return generate_image_150(prompt, image, image2)
175
+ elif duration == "170":
176
+ return generate_image_170(prompt, image, image2)
177
+ elif duration == "190":
178
+ return generate_image_190(prompt, image, image2)
179
+ elif duration == "200":
180
+ return generate_image_200(prompt, image, image2)
181
+ else:
182
+ return generate_image_170(prompt, image, image2)
183
 
184
  if __name__ == "__main__":
185
+ demo = gr.Interface(fn=generate_image_wrapper,
186
  inputs=[
187
  "text",
188
  gr.Image(image_mode='RGBA', type="numpy"),
189
  gr.Image(image_mode='RGBA', type="numpy"),
190
+ gr.Radio(["130", "150", "170", "190", "200"], label="GPU acclocation in secs")
191
  ],
192
  outputs=[
193
  gr.Image(type="numpy", image_mode='RGBA')