fantos commited on
Commit
d3c818e
·
verified ·
1 Parent(s): 6a40d86

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -31
app.py CHANGED
@@ -85,11 +85,11 @@ def resize_image(image, resolution):
85
  new_h = int(h * ratio)
86
  return image.resize((new_w, new_h), Image.LANCZOS)
87
 
88
- def text_to_image(text, size=72, position="top-center"):
89
  width, height = 1024, 576
90
  image = Image.new("RGB", (width, height), "white")
91
  draw = ImageDraw.Draw(image)
92
-
93
  font_files = ["Arial_Unicode.ttf"]
94
  font = None
95
  for font_file in font_files:
@@ -119,17 +119,33 @@ def text_to_image(text, size=72, position="top-center"):
119
 
120
  position_mapping = {
121
  "top-left": (10, 10),
 
122
  "top-center": ((width - max_line_width) / 2, 10),
 
123
  "top-right": (width - max_line_width - 10, 10),
 
 
 
 
 
124
  "middle-left": (10, (height - total_height) / 2),
 
125
  "middle-center": ((width - max_line_width) / 2, (height - total_height) / 2),
 
126
  "middle-right": (width - max_line_width - 10, (height - total_height) / 2),
 
 
 
 
 
127
  "bottom-left": (10, height - total_height - 10),
 
128
  "bottom-center": ((width - max_line_width) / 2, height - total_height - 10),
 
129
  "bottom-right": (width - max_line_width - 10, height - total_height - 10),
130
  }
131
 
132
- x, y = position_mapping.get(position, ((width - max_line_width) / 2, height - total_height - 10))
133
  for i, line in enumerate(lines):
134
  draw.text((x, y), line, fill="black", font=font)
135
  y += line_heights[i]
@@ -149,15 +165,15 @@ def infer_canny(prompt, text_for_image, text_position, font_size,
149
  ):
150
  prompt = translate_korean_to_english(prompt)
151
  negative_prompt = translate_korean_to_english(negative_prompt)
152
-
153
  if randomize_seed:
154
  seed = random.randint(0, MAX_SEED)
155
  generator = torch.Generator().manual_seed(seed)
156
-
157
  # Generate text image
158
  init_image = text_to_image(text_for_image, size=font_size, position=text_position)
159
  init_image = resize_image(init_image, MAX_IMAGE_SIZE)
160
-
161
  pipe = pipe_canny.to("cuda")
162
  condi_img = process_canny_condition(init_image)
163
  image = pipe(
@@ -175,16 +191,16 @@ def infer_canny(prompt, text_for_image, text_position, font_size,
175
  ).images[0]
176
  return [condi_img, image], seed
177
 
178
-
179
  css = """
180
  footer {
181
  visibility: hidden;
182
  }
183
  .text-position-grid {
184
  display: grid;
185
- grid-template-columns: repeat(3, 1fr);
186
- gap: 5px;
187
  margin-bottom: 10px;
 
188
  }
189
  .text-position-grid button {
190
  aspect-ratio: 1;
@@ -192,24 +208,36 @@ footer {
192
  border: 1px solid #ccc;
193
  background-color: #f0f0f0;
194
  cursor: pointer;
 
 
 
 
 
195
  }
196
  .text-position-grid button.selected {
197
  background-color: #007bff;
198
  color: white;
 
199
  }
200
  """
201
 
202
  def update_button_states(selected_position):
203
  return [
204
  gr.Button.update(variant="primary" if pos == selected_position else "secondary")
205
- for pos in ["top-left", "top-center", "top-right",
206
- "middle-left", "middle-center", "middle-right",
207
- "bottom-left", "bottom-center", "bottom-right"]
208
  ]
209
 
 
 
 
 
 
 
 
 
210
  with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css) as Kolors:
211
- text_position = gr.State("top-center")
212
-
213
  with gr.Row():
214
  with gr.Column(elem_id="col-left"):
215
  with gr.Row():
@@ -228,23 +256,9 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css) as Kolors:
228
  with gr.Column():
229
  gr.Markdown("Text Position")
230
  with gr.Row(elem_classes="text-position-grid"):
231
- btn_top_left = gr.Button("")
232
- btn_top_center = gr.Button("↑")
233
- btn_top_right = gr.Button("↗")
234
- btn_middle_left = gr.Button("←")
235
- btn_middle_center = gr.Button("•")
236
- btn_middle_right = gr.Button("→")
237
- btn_bottom_left = gr.Button("↙")
238
- btn_bottom_center = gr.Button("↓")
239
- btn_bottom_right = gr.Button("↘")
240
-
241
- position_buttons = [btn_top_left, btn_top_center, btn_top_right,
242
- btn_middle_left, btn_middle_center, btn_middle_right,
243
- btn_bottom_left, btn_bottom_center, btn_bottom_right]
244
 
245
- for btn, pos in zip(position_buttons, ["top-left", "top-center", "top-right",
246
- "middle-left", "middle-center", "middle-right",
247
- "bottom-left", "bottom-center", "bottom-right"]):
248
  btn.click(lambda x, p=pos: p, outputs=text_position)
249
  btn.click(update_button_states, inputs=[text_position], outputs=position_buttons)
250
 
@@ -325,4 +339,4 @@ with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css) as Kolors:
325
  # Set initial button states
326
  Kolors.load(update_button_states, inputs=[text_position], outputs=position_buttons)
327
 
328
- Kolors.queue().launch(debug=True, share=True)
 
85
  new_h = int(h * ratio)
86
  return image.resize((new_w, new_h), Image.LANCZOS)
87
 
88
+ def text_to_image(text, size=72, position="middle-center"):
89
  width, height = 1024, 576
90
  image = Image.new("RGB", (width, height), "white")
91
  draw = ImageDraw.Draw(image)
92
+
93
  font_files = ["Arial_Unicode.ttf"]
94
  font = None
95
  for font_file in font_files:
 
119
 
120
  position_mapping = {
121
  "top-left": (10, 10),
122
+ "top-left-center": (width // 4 - max_line_width // 2, 10),
123
  "top-center": ((width - max_line_width) / 2, 10),
124
+ "top-right-center": (3 * width // 4 - max_line_width // 2, 10),
125
  "top-right": (width - max_line_width - 10, 10),
126
+ "upper-left": (10, height // 4 - total_height // 2),
127
+ "upper-left-center": (width // 4 - max_line_width // 2, height // 4 - total_height // 2),
128
+ "upper-center": ((width - max_line_width) / 2, height // 4 - total_height // 2),
129
+ "upper-right-center": (3 * width // 4 - max_line_width // 2, height // 4 - total_height // 2),
130
+ "upper-right": (width - max_line_width - 10, height // 4 - total_height // 2),
131
  "middle-left": (10, (height - total_height) / 2),
132
+ "middle-left-center": (width // 4 - max_line_width // 2, (height - total_height) / 2),
133
  "middle-center": ((width - max_line_width) / 2, (height - total_height) / 2),
134
+ "middle-right-center": (3 * width // 4 - max_line_width // 2, (height - total_height) / 2),
135
  "middle-right": (width - max_line_width - 10, (height - total_height) / 2),
136
+ "lower-left": (10, 3 * height // 4 - total_height // 2),
137
+ "lower-left-center": (width // 4 - max_line_width // 2, 3 * height // 4 - total_height // 2),
138
+ "lower-center": ((width - max_line_width) / 2, 3 * height // 4 - total_height // 2),
139
+ "lower-right-center": (3 * width // 4 - max_line_width // 2, 3 * height // 4 - total_height // 2),
140
+ "lower-right": (width - max_line_width - 10, 3 * height // 4 - total_height // 2),
141
  "bottom-left": (10, height - total_height - 10),
142
+ "bottom-left-center": (width // 4 - max_line_width // 2, height - total_height - 10),
143
  "bottom-center": ((width - max_line_width) / 2, height - total_height - 10),
144
+ "bottom-right-center": (3 * width // 4 - max_line_width // 2, height - total_height - 10),
145
  "bottom-right": (width - max_line_width - 10, height - total_height - 10),
146
  }
147
 
148
+ x, y = position_mapping.get(position, ((width - max_line_width) / 2, (height - total_height) / 2))
149
  for i, line in enumerate(lines):
150
  draw.text((x, y), line, fill="black", font=font)
151
  y += line_heights[i]
 
165
  ):
166
  prompt = translate_korean_to_english(prompt)
167
  negative_prompt = translate_korean_to_english(negative_prompt)
168
+
169
  if randomize_seed:
170
  seed = random.randint(0, MAX_SEED)
171
  generator = torch.Generator().manual_seed(seed)
172
+
173
  # Generate text image
174
  init_image = text_to_image(text_for_image, size=font_size, position=text_position)
175
  init_image = resize_image(init_image, MAX_IMAGE_SIZE)
176
+
177
  pipe = pipe_canny.to("cuda")
178
  condi_img = process_canny_condition(init_image)
179
  image = pipe(
 
191
  ).images[0]
192
  return [condi_img, image], seed
193
 
 
194
  css = """
195
  footer {
196
  visibility: hidden;
197
  }
198
  .text-position-grid {
199
  display: grid;
200
+ grid-template-columns: repeat(5, 1fr);
201
+ gap: 2px;
202
  margin-bottom: 10px;
203
+ width: 150px;
204
  }
205
  .text-position-grid button {
206
  aspect-ratio: 1;
 
208
  border: 1px solid #ccc;
209
  background-color: #f0f0f0;
210
  cursor: pointer;
211
+ font-size: 10px;
212
+ transition: all 0.3s ease;
213
+ }
214
+ .text-position-grid button:hover {
215
+ background-color: #e0e0e0;
216
  }
217
  .text-position-grid button.selected {
218
  background-color: #007bff;
219
  color: white;
220
+ transform: scale(1.1);
221
  }
222
  """
223
 
224
  def update_button_states(selected_position):
225
  return [
226
  gr.Button.update(variant="primary" if pos == selected_position else "secondary")
227
+ for pos in position_list
 
 
228
  ]
229
 
230
+ position_list = [
231
+ "top-left", "top-left-center", "top-center", "top-right-center", "top-right",
232
+ "upper-left", "upper-left-center", "upper-center", "upper-right-center", "upper-right",
233
+ "middle-left", "middle-left-center", "middle-center", "middle-right-center", "middle-right",
234
+ "lower-left", "lower-left-center", "lower-center", "lower-right-center", "lower-right",
235
+ "bottom-left", "bottom-left-center", "bottom-center", "bottom-right-center", "bottom-right"
236
+ ]
237
+
238
  with gr.Blocks(theme="Nymbo/Nymbo_Theme", css=css) as Kolors:
239
+ text_position = gr.State("middle-center")
240
+
241
  with gr.Row():
242
  with gr.Column(elem_id="col-left"):
243
  with gr.Row():
 
256
  with gr.Column():
257
  gr.Markdown("Text Position")
258
  with gr.Row(elem_classes="text-position-grid"):
259
+ position_buttons = [gr.Button("") for _ in range(25)]
 
 
 
 
 
 
 
 
 
 
 
 
260
 
261
+ for btn, pos in zip(position_buttons, position_list):
 
 
262
  btn.click(lambda x, p=pos: p, outputs=text_position)
263
  btn.click(update_button_states, inputs=[text_position], outputs=position_buttons)
264
 
 
339
  # Set initial button states
340
  Kolors.load(update_button_states, inputs=[text_position], outputs=position_buttons)
341
 
342
+ Kolors.queue().launch(debug=True, share=True)