nqdior commited on
Commit
3ec79e5
1 Parent(s): 18653e0
Files changed (1) hide show
  1. app.py +243 -77
app.py CHANGED
@@ -1,15 +1,70 @@
1
  import gradio as gr
2
  import numpy as np
3
-
4
  import requests
5
  from PIL import Image
6
  from io import BytesIO
7
  import time
8
 
9
- # TODO: PNGinfo追加, 使用データの展開(コピーボタン)
10
  MAX_SEED = np.iinfo(np.int32).max
11
  MAX_IMAGE_SIZE = 1344
12
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  model_url = {
14
  "ImageUltra": "https://api.stability.ai/v2beta/stable-image/generate/ultra",
15
  "ImageCore": "https://api.stability.ai/v2beta/stable-image/generate/core",
@@ -29,6 +84,90 @@ service_url = {
29
  }
30
 
31
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  def bytes_to_image(image):
33
  image = BytesIO(image)
34
  image = Image.open(image).convert("RGB")
@@ -83,12 +222,15 @@ def generate(
83
  "seed": seed,
84
  "aspect_ratio": aspect,
85
  }
 
 
 
86
  if input_image is not None:
87
  file["image"] = image_to_bytes(input_image)
88
  if mask is not None:
89
  file["mask"] = image_to_bytes(mask)
90
 
91
- if mode == "Generate":
92
  file["none"] = ""
93
  if model == "Stable Image Ultra (8B + workflow)":
94
  url = model_url["ImageUltra"]
@@ -104,44 +246,46 @@ def generate(
104
  elif model == "Stable Diffusion 3 Large Turbo (8B Turbo)":
105
  url = model_url["StableDiffusion3"]
106
  data["model"] = "sd3-large-turbo"
107
-
108
  else:
109
  raise ValueError("Invalid model type")
110
 
111
- elif mode == "Upscale":
112
- if submode == "Conservative":
113
  url = service_url["Conservative_Upscale"]
114
- elif submode == "Creative":
115
  url = service_url["Creative_Upscale"]
116
 
117
- elif mode == "Edit":
118
- if submode == "Erase":
119
  url = service_url["Erase"]
120
- elif submode == "Inpaint":
121
  url = service_url["Inpaint"]
122
- elif submode == "Outpaint":
123
  url = service_url["Outpaint"]
124
  data["left"] = op_left
125
  data["right"] = op_right
126
  data["up"] = op_up
127
  data["down"] = op_down
128
- elif submode == "Search and Replace":
129
  url = service_url["SR"]
130
  data["search_prompt"] = search_prompt
131
- elif submode == "Remove Background":
 
132
  url = service_url["RMBG"]
133
 
134
- elif mode == "Control":
135
  data["control_strength"] = CNstrength
136
- if submode == "Sketch":
137
  url = service_url["Sketch"]
138
- elif submode == "Structure":
139
  url = service_url["Structure"]
140
-
141
  response = send_request(url, api_key, file, data)
142
-
143
  if response.status_code == 200:
144
- if mode == "Upscale" and submode == "Creative":
 
 
 
145
  generation_id = response.json().get("id")
146
  if not generation_id:
147
  raise Exception("No generation ID returned for creative upscale")
@@ -200,31 +344,41 @@ def update_mode(mode):
200
  img_input_update = gr.update(visible=False)
201
  mask_update = gr.update(visible=False)
202
 
203
- if mode == "Generate":
204
  submode_update = gr.update(visible=False)
205
- elif mode == "Upscale":
206
  submode_update = gr.update(
207
- choices=["Conservative", "Creative"], value="Conservative", visible=True
 
 
 
 
 
208
  )
209
  img_input_update = gr.update(visible=True)
210
  image_label_update = gr.update(visible=True)
211
- elif mode == "Edit":
212
  submode_update = gr.update(
213
  choices=[
214
- "Erase",
215
- "Inpaint",
216
- "Outpaint",
217
- "Search and Replace",
218
- "Remove Background",
219
  ],
220
- value="Erase",
221
  visible=True,
222
  )
223
  img_input_update = gr.update(visible=True)
224
  image_label_update = gr.update(visible=True)
225
- elif mode == "Control":
226
  submode_update = gr.update(
227
- choices=["Sketch", "Structure"], value="Sketch", visible=True
 
 
 
 
 
228
  )
229
  img_input_update = gr.update(visible=True)
230
  image_label_update = gr.update(visible=True)
@@ -238,17 +392,17 @@ def update_submode(submode):
238
  cn = gr.update(visible=False)
239
  search_prompt = gr.update(visible=False)
240
 
241
- if submode in ["Erase", "Inpaint"]:
242
  mask = gr.update(visible=True)
243
 
244
  else:
245
- if submode == "Outpaint":
246
  outpaint = gr.update(visible=True)
247
 
248
- elif submode == "Control":
249
  cn = gr.update(visible=True)
250
 
251
- elif submode == "Search and Replace":
252
  search_prompt = gr.update(visible=True)
253
 
254
  return mask, outpaint, cn, search_prompt
@@ -257,44 +411,50 @@ def update_submode(submode):
257
  with gr.Blocks(css=css, theme="NoCrypt/miku") as demo:
258
  with gr.Column(elem_id="col-container"):
259
  gr.Markdown(
260
- f"""
261
- # Stability AI - Developer Platform WebUI
262
- **Overview**
263
- Stability AI’s Stable Image services offer a growing set of APIs for developers to build the best in class image applications.
264
-
265
- - **Disrupting Content Creation:** Stability’s Image APIs are the foundation for applications disrupting publishing, media, gaming, marketing, advertising, design, and more.
266
- - **For Developers:** Application developers can build advanced features for designers, photographers, content creators, and a variety of B2C customers.
267
- - **Simple APIs:** Stability AI is focused on delivering simple APIs for easy integration into applications with a high bar for quality, alignment, speed, and safety.
268
-
269
- Get Started Now: https://platform.stability.ai/docs/getting-started/stable-image
270
-
271
- Contact: D̷ELL@Stability AI - Advocate (https://x.com/xqdior) / Author: umise (https://x.com/UiE029)
272
- """
273
  )
 
 
 
 
274
 
275
  with gr.Row():
276
  api_key = gr.Text(
277
- label="API Key",
278
  type="password",
279
- placeholder="Enter your API key",
280
  max_lines=1,
281
  container=False,
282
  )
283
 
284
  with gr.Row():
285
  model = gr.Dropdown(
286
- label="Model",
287
- choices=["Stable Image Ultra (8B + workflow)", "Stable Image Core (2B + workflow)", "Stable Diffusion 3 Large Turbo (8B Turbo)", "Stable Diffusion 3 Large (8B)", "Stable Diffusion 3 Medium (2B)"],
288
- value="Ultra",
 
 
 
 
 
 
289
  )
290
  mode = gr.Dropdown(
291
- label="Mode",
292
- choices=["Generate", "Upscale", "Edit", "Control"],
293
- value="Generate",
 
 
 
 
 
294
  )
295
 
296
  submode = gr.Dropdown(
297
- label="Submode", choices=["None"], visible=False, value="None"
 
 
 
298
  )
299
 
300
  with gr.Row():
@@ -303,7 +463,7 @@ with gr.Blocks(css=css, theme="NoCrypt/miku") as demo:
303
  label="Prompt",
304
  show_label=False,
305
  max_lines=1,
306
- placeholder="Enter your prompt",
307
  container=False,
308
  )
309
  search_prompt = gr.Text(
@@ -311,14 +471,18 @@ with gr.Blocks(css=css, theme="NoCrypt/miku") as demo:
311
  visible=False,
312
  show_label=False,
313
  max_lines=1,
314
- placeholder="Enter a search prompt",
315
  )
316
-
317
- run_button = gr.Button("Run", scale=0)
318
-
 
 
319
  with gr.Row():
320
  with gr.Column():
321
- image_label = gr.Markdown(value="input image", visible=False)
 
 
322
  image = gr.Image(
323
  type="pil",
324
  label="img input",
@@ -342,30 +506,34 @@ with gr.Blocks(css=css, theme="NoCrypt/miku") as demo:
342
  )
343
 
344
  with gr.Row():
345
- result = gr.Image(label="Result", width="20vw", height="20%")
 
 
346
 
347
- with gr.Accordion("Advanced Settings", open=False):
348
  negative_prompt = gr.Text(
349
- label="Negative prompt",
350
  max_lines=1,
351
- placeholder="Enter a negative prompt",
352
  )
353
  seed = gr.Slider(
354
- label="Seed",
355
  minimum=0,
356
  maximum=MAX_SEED,
357
  step=1,
358
  value=0,
359
  )
360
  CN_strength = gr.Slider(
361
- label="Control Strength",
362
  minimum=0,
363
  maximum=1,
364
  step=0.01,
365
  value=0.5,
366
  visible=False,
367
  )
368
- randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
 
 
369
  aspect = gr.Radio(
370
  choices=[
371
  "1:1",
@@ -378,7 +546,7 @@ with gr.Blocks(css=css, theme="NoCrypt/miku") as demo:
378
  "9:16",
379
  "9:21",
380
  ],
381
- label="Aspect raito",
382
  value="1:1",
383
  )
384
  with gr.Row(visible=False) as style:
@@ -402,9 +570,9 @@ with gr.Blocks(css=css, theme="NoCrypt/miku") as demo:
402
  "pixel-art",
403
  "tile-texture",
404
  ],
405
- label="Style_preset",
406
  value="anime",
407
- info="This parameter is only available for ImageCore model.",
408
  )
409
  with gr.Row(visible=False) as outpaint_scale:
410
  paint = gr.Markdown(value="Outpain Scale")
@@ -421,18 +589,16 @@ with gr.Blocks(css=css, theme="NoCrypt/miku") as demo:
421
  label="down", minimum=0, maximum=2000, step=4, value=200
422
  )
423
 
424
- gr.Examples(examples=examples, inputs=[prompt])
425
-
426
  copy_filed = gr.TextArea(
427
  value="",
428
  label="Copy Field",
429
  max_lines=1,
430
- placeholder="Copy the field",
431
  show_copy_button=True,
432
  container=False,
433
  )
434
  gr.Markdown(
435
- f"""
436
  ## License
437
  This work is licensed under a
438
  [Creative Commons Attribution-NonCommercial 4.0 International License][cc-by-nc].
 
1
  import gradio as gr
2
  import numpy as np
 
3
  import requests
4
  from PIL import Image
5
  from io import BytesIO
6
  import time
7
 
 
8
  MAX_SEED = np.iinfo(np.int32).max
9
  MAX_IMAGE_SIZE = 1344
10
 
11
+ title = """
12
+ # Stability AI - Developer Platform WebUI
13
+ ### UI for using the stable image api
14
+
15
+ API Key is required to use this service.
16
+ https://platform.stability.ai/account/keys
17
+
18
+ Contact: D̷ELL@Stability AI - Advocate (https://x.com/xqdior) / Author: umise (https://x.com/UiE029)
19
+ """
20
+
21
+ title_jp = """
22
+ # Stability AI - Developer Platform WebUI
23
+ ### このSpaceは、Stable Image APIを使用するためのWEB-UIです。
24
+
25
+ このサービスを利用するにはAPIキーが必要です。以下のリンクから取得してください。
26
+ https://platform.stability.ai/account/keys
27
+
28
+ お問い合わせ先: D̷ELL@Stability AI - Advocate (https://x.com/xqdior) / Author: umise (https://x.com/UiE029)
29
+ """
30
+
31
+ overview = """
32
+
33
+ **Overview**
34
+ Stability AI’s Stable Image services offer a growing set of APIs for developers to build the best in class image applications.
35
+
36
+ - **Disrupting Content Creation:** Stability’s Image APIs are the foundation for applications disrupting publishing, media, gaming, marketing, advertising, design, and more.
37
+ - **For Developers:** Application developers can build advanced features for designers, photographers, content creators, and a variety of B2C customers.
38
+ - **Simple APIs:** Stability AI is focused on delivering simple APIs for easy integration into applications with a high bar for quality, alignment, speed, and safety.
39
+
40
+ Get Started Now: https://platform.stability.ai/docs/getting-started/stable-image
41
+ """
42
+
43
+ overview_jp = """
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
  model_url = {
69
  "ImageUltra": "https://api.stability.ai/v2beta/stable-image/generate/ultra",
70
  "ImageCore": "https://api.stability.ai/v2beta/stable-image/generate/core",
 
84
  }
85
 
86
 
87
+ translations = {
88
+ "en": {
89
+ "api_key": "API Key",
90
+ "api_key_placeholder": "Enter your API key",
91
+ "model_label": "Model",
92
+ "mode_label": "Mode",
93
+ "prompt_placeholder": "Enter your prompt",
94
+ "negative_prompt_placeholder": "Enter a negative prompt",
95
+ "seed_label": "Seed",
96
+ "randomize_seed_label": "Randomize seed",
97
+ "aspect_label": "Aspect ratio",
98
+ "run_button": "Run",
99
+ "result_label": "Result",
100
+ "copy_field_placeholder": "Copy the field",
101
+ "Negative_prompt": "Negative prompt",
102
+ "Advanced_Settings": "Advanced Settings",
103
+ "Example": "Example",
104
+ "Generate": "Generate",
105
+ "Upscale": "Upscale",
106
+ "Edit": "Edit",
107
+ "Control": "Control",
108
+ "Submode": "Submode",
109
+ "Conservative": "Conservative",
110
+ "Creative": "Creative",
111
+ "Erase": "Erase",
112
+ "Inpaint": "Inpaint",
113
+ "Outpaint": "Outpaint",
114
+ "Structure": "Structure",
115
+ "Sketch": "Sketch",
116
+ "Search_and_Replace": "Search and Replace",
117
+ "Remove_Background": "Remove Background",
118
+ "input_image": "Input Image",
119
+ "style_preset": "Style preset",
120
+ "preset_description": "This parameter is only available for ImageCore model.",
121
+ "Search_prompt_placeholder": "Enter a search prompt",
122
+ "Control_Strength": "Control Strength",
123
+ "overview": overview,
124
+ "overview_label": "How to use",
125
+ "title": title,
126
+ },
127
+ "ja": {
128
+ "api_key": "APIキー",
129
+ "api_key_placeholder": "APIキーを入力してください",
130
+ "model_label": "モデル",
131
+ "mode_label": "モード",
132
+ "prompt_placeholder": "プロンプトを入力してください",
133
+ "negative_prompt_placeholder": "ネガティブプロンプトを入力してください",
134
+ "seed_label": "シード",
135
+ "randomize_seed_label": "シードをランダム化",
136
+ "aspect_label": "アスペクト比",
137
+ "run_button": "実行",
138
+ "result_label": "結果",
139
+ "copy_field_placeholder": "ここに貼り付け用の情報が出てきます",
140
+ "Negative_prompt": "ネガティブプロンプト",
141
+ "Advanced_Settings": "追加設定",
142
+ "Example": "例",
143
+ "Generate": "テキストから生成",
144
+ "Upscale": "アップスケール",
145
+ "Edit": "画像の編集",
146
+ "Control": "コントロールモード",
147
+ "Submode": "サブモード",
148
+ "Conservative": "通常のアップスケール",
149
+ "Creative": "クリエィティブなアップスケール",
150
+ "Erase": "消去",
151
+ "Inpaint": "インペイント",
152
+ "Outpaint": "アウトペイント(拡張)",
153
+ "Structure": "構図",
154
+ "Sketch": "スケッチ",
155
+ "Search_and_Replace": "検索と置き換え",
156
+ "Remove_Background": "背景削除",
157
+ "input_image": "入力画像",
158
+ "style_preset": "スタイルのプリセット",
159
+ "preset_description": "このパラメータはimage coreのときにだけ有効になります",
160
+ "Search_prompt_placeholder": "探したい要素を入力してください",
161
+ "Control_Strength": "コントロールネットの適用強度",
162
+ "overview": overview_jp,
163
+ "overview_label": "使い方",
164
+ "title": title_jp,
165
+ },
166
+ }
167
+
168
+ lang = "ja"
169
+
170
+
171
  def bytes_to_image(image):
172
  image = BytesIO(image)
173
  image = Image.open(image).convert("RGB")
 
222
  "seed": seed,
223
  "aspect_ratio": aspect,
224
  }
225
+ data_rmbg = {
226
+ "output_format": "png",
227
+ }
228
  if input_image is not None:
229
  file["image"] = image_to_bytes(input_image)
230
  if mask is not None:
231
  file["mask"] = image_to_bytes(mask)
232
 
233
+ if mode == translations[lang]["Generate"]:
234
  file["none"] = ""
235
  if model == "Stable Image Ultra (8B + workflow)":
236
  url = model_url["ImageUltra"]
 
246
  elif model == "Stable Diffusion 3 Large Turbo (8B Turbo)":
247
  url = model_url["StableDiffusion3"]
248
  data["model"] = "sd3-large-turbo"
 
249
  else:
250
  raise ValueError("Invalid model type")
251
 
252
+ elif mode == translations[lang]["Upscale"]:
253
+ if submode == translations[lang]["Conservative"]:
254
  url = service_url["Conservative_Upscale"]
255
+ elif submode == translations[lang]["Creative"]:
256
  url = service_url["Creative_Upscale"]
257
 
258
+ elif mode == translations[lang]["Edit"]:
259
+ if submode == translations[lang]["Erase"]:
260
  url = service_url["Erase"]
261
+ elif submode == translations[lang]["Inpaint"]:
262
  url = service_url["Inpaint"]
263
+ elif submode == translations[lang]["Outpaint"]:
264
  url = service_url["Outpaint"]
265
  data["left"] = op_left
266
  data["right"] = op_right
267
  data["up"] = op_up
268
  data["down"] = op_down
269
+ elif submode == translations[lang]["Search_and_Replace"]:
270
  url = service_url["SR"]
271
  data["search_prompt"] = search_prompt
272
+ elif submode == translations[lang]["Remove_Background"]:
273
+ data = data_rmbg
274
  url = service_url["RMBG"]
275
 
276
+ elif mode == translations[lang]["Control"]:
277
  data["control_strength"] = CNstrength
278
+ if submode == translations[lang]["Sketch"]:
279
  url = service_url["Sketch"]
280
+ elif submode == translations[lang]["Structure"]:
281
  url = service_url["Structure"]
 
282
  response = send_request(url, api_key, file, data)
283
+
284
  if response.status_code == 200:
285
+ if (
286
+ mode == translations[lang]["Upscale"]
287
+ and submode == translations[lang]["Creative"]
288
+ ):
289
  generation_id = response.json().get("id")
290
  if not generation_id:
291
  raise Exception("No generation ID returned for creative upscale")
 
344
  img_input_update = gr.update(visible=False)
345
  mask_update = gr.update(visible=False)
346
 
347
+ if mode == translations[lang]["Generate"]:
348
  submode_update = gr.update(visible=False)
349
+ elif mode == translations[lang]["Upscale"]:
350
  submode_update = gr.update(
351
+ choices=[
352
+ translations[lang]["Conservative"],
353
+ translations[lang]["Creative"],
354
+ ],
355
+ value=translations[lang]["Conservative"],
356
+ visible=True,
357
  )
358
  img_input_update = gr.update(visible=True)
359
  image_label_update = gr.update(visible=True)
360
+ elif mode == translations[lang]["Edit"]:
361
  submode_update = gr.update(
362
  choices=[
363
+ translations[lang]["Erase"],
364
+ translations[lang]["Inpaint"],
365
+ translations[lang]["Outpaint"],
366
+ translations[lang]["Search_and_Replace"],
367
+ translations[lang]["Remove_Background"],
368
  ],
369
+ value=translations[lang]["Erase"],
370
  visible=True,
371
  )
372
  img_input_update = gr.update(visible=True)
373
  image_label_update = gr.update(visible=True)
374
+ elif mode == translations[lang]["Control"]:
375
  submode_update = gr.update(
376
+ choices=[
377
+ translations[lang]["Structure"],
378
+ translations[lang]["Sketch"],
379
+ ],
380
+ value=translations[lang]["Structure"],
381
+ visible=True,
382
  )
383
  img_input_update = gr.update(visible=True)
384
  image_label_update = gr.update(visible=True)
 
392
  cn = gr.update(visible=False)
393
  search_prompt = gr.update(visible=False)
394
 
395
+ if submode in [translations[lang]["Erase"], translations[lang]["Inpaint"]]:
396
  mask = gr.update(visible=True)
397
 
398
  else:
399
+ if submode == translations[lang]["Outpaint"]:
400
  outpaint = gr.update(visible=True)
401
 
402
+ elif submode in [translations[lang]["Structure"], translations[lang]["Sketch"]]:
403
  cn = gr.update(visible=True)
404
 
405
+ elif submode == translations[lang]["Search_and_Replace"]:
406
  search_prompt = gr.update(visible=True)
407
 
408
  return mask, outpaint, cn, search_prompt
 
411
  with gr.Blocks(css=css, theme="NoCrypt/miku") as demo:
412
  with gr.Column(elem_id="col-container"):
413
  gr.Markdown(
414
+ translations[lang]["title"],
 
 
 
 
 
 
 
 
 
 
 
 
415
  )
416
+ with gr.Accordion(translations[lang]["overview_label"], open=False):
417
+ gr.Markdown(
418
+ translations[lang]["overview"],
419
+ )
420
 
421
  with gr.Row():
422
  api_key = gr.Text(
423
+ label=translations[lang]["api_key"],
424
  type="password",
425
+ placeholder=translations[lang]["api_key_placeholder"],
426
  max_lines=1,
427
  container=False,
428
  )
429
 
430
  with gr.Row():
431
  model = gr.Dropdown(
432
+ label=translations[lang]["model_label"],
433
+ choices=[
434
+ "Stable Image Ultra (8B + workflow)",
435
+ "Stable Image Core (2B + workflow)",
436
+ "Stable Diffusion 3 Large Turbo (8B Turbo)",
437
+ "Stable Diffusion 3 Large (8B)",
438
+ "Stable Diffusion 3 Medium (2B)",
439
+ ],
440
+ value="Stable Image Ultra (8B + workflow)",
441
  )
442
  mode = gr.Dropdown(
443
+ label=translations[lang]["mode_label"],
444
+ choices=[
445
+ translations[lang]["Generate"],
446
+ translations[lang]["Upscale"],
447
+ translations[lang]["Edit"],
448
+ translations[lang]["Control"],
449
+ ],
450
+ value=translations[lang]["Generate"],
451
  )
452
 
453
  submode = gr.Dropdown(
454
+ label=translations[lang]["Submode"],
455
+ choices=["None"],
456
+ visible=False,
457
+ value="None",
458
  )
459
 
460
  with gr.Row():
 
463
  label="Prompt",
464
  show_label=False,
465
  max_lines=1,
466
+ placeholder=translations[lang]["prompt_placeholder"],
467
  container=False,
468
  )
469
  search_prompt = gr.Text(
 
471
  visible=False,
472
  show_label=False,
473
  max_lines=1,
474
+ placeholder=translations[lang]["Search_prompt_placeholder"],
475
  )
476
+ run_button = gr.Button(translations[lang]["run_button"], scale=0)
477
+ with gr.Row():
478
+ gr.Examples(
479
+ label=translations[lang]["Example"], examples=examples, inputs=[prompt]
480
+ )
481
  with gr.Row():
482
  with gr.Column():
483
+ image_label = gr.Markdown(
484
+ value=translations[lang]["input_image"], visible=False
485
+ )
486
  image = gr.Image(
487
  type="pil",
488
  label="img input",
 
506
  )
507
 
508
  with gr.Row():
509
+ result = gr.Image(
510
+ label=translations[lang]["result_label"], width="20vw", height="20%"
511
+ )
512
 
513
+ with gr.Accordion(translations[lang]["Advanced_Settings"], open=False):
514
  negative_prompt = gr.Text(
515
+ label=translations[lang]["Negative_prompt"],
516
  max_lines=1,
517
+ placeholder=translations[lang]["negative_prompt_placeholder"],
518
  )
519
  seed = gr.Slider(
520
+ label=translations[lang]["seed_label"],
521
  minimum=0,
522
  maximum=MAX_SEED,
523
  step=1,
524
  value=0,
525
  )
526
  CN_strength = gr.Slider(
527
+ label=translations[lang]["Control_Strength"],
528
  minimum=0,
529
  maximum=1,
530
  step=0.01,
531
  value=0.5,
532
  visible=False,
533
  )
534
+ randomize_seed = gr.Checkbox(
535
+ label=translations[lang]["randomize_seed_label"], value=True
536
+ )
537
  aspect = gr.Radio(
538
  choices=[
539
  "1:1",
 
546
  "9:16",
547
  "9:21",
548
  ],
549
+ label=translations[lang]["aspect_label"],
550
  value="1:1",
551
  )
552
  with gr.Row(visible=False) as style:
 
570
  "pixel-art",
571
  "tile-texture",
572
  ],
573
+ label=translations[lang]["style_preset"],
574
  value="anime",
575
+ info=translations[lang]["preset_description"],
576
  )
577
  with gr.Row(visible=False) as outpaint_scale:
578
  paint = gr.Markdown(value="Outpain Scale")
 
589
  label="down", minimum=0, maximum=2000, step=4, value=200
590
  )
591
 
 
 
592
  copy_filed = gr.TextArea(
593
  value="",
594
  label="Copy Field",
595
  max_lines=1,
596
+ placeholder=translations[lang]["copy_field_placeholder"],
597
  show_copy_button=True,
598
  container=False,
599
  )
600
  gr.Markdown(
601
+ f"""
602
  ## License
603
  This work is licensed under a
604
  [Creative Commons Attribution-NonCommercial 4.0 International License][cc-by-nc].