selfit-camera commited on
Commit
720f3e0
·
1 Parent(s): a111cf3
Files changed (13) hide show
  1. app.py +602 -184
  2. i18n/ar.json +102 -0
  3. i18n/de.json +102 -0
  4. i18n/en.json +102 -0
  5. i18n/es.json +102 -0
  6. i18n/fr.json +102 -0
  7. i18n/id.json +102 -0
  8. i18n/it.json +102 -0
  9. i18n/ja.json +102 -0
  10. i18n/nl.json +102 -0
  11. i18n/ru.json +102 -0
  12. i18n/zh.json +102 -0
  13. tmp/1.txt +14 -0
app.py CHANGED
@@ -4,9 +4,30 @@ import os
4
  import shutil
5
  import tempfile
6
  import time
 
7
  from util import process_image_edit, process_local_image_edit, download_and_check_result_nsfw
8
  from nfsw import NSFWDetector
9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  # Configuration parameters
11
 
12
  TIP_TRY_N = 4 # Show like button tip after 12 tries
@@ -32,26 +53,63 @@ Country_Usage_Stats = {} # Track usage count by country
32
  Total_Request_Count = 0 # Total request counter for periodic printing
33
  PRINT_STATS_INTERVAL = 10 # Print stats every N requests
34
 
 
 
 
35
  # Restricted countries list (these countries have lower usage limits)
36
  RESTRICTED_COUNTRIES = ["印度", "巴基斯坦"]
37
  RESTRICTED_COUNTRY_LIMIT = 5 # Max usage for restricted countries
38
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  def query_ip_country(client_ip):
40
  """
41
- Query IP address geo information (only query once per IP)
 
 
 
 
 
 
42
 
43
  Returns:
44
  dict: {"country": str, "region": str, "city": str}
45
  """
46
  # Check cache first - no API call for subsequent visits
47
  if client_ip in IP_Country_Cache:
 
48
  return IP_Country_Cache[client_ip]
49
 
50
- # First time visit - query API (silent query)
 
 
 
 
 
 
 
 
 
51
  try:
52
  import requests
 
 
53
  api_url = f"https://api.vore.top/api/IPdata?ip={client_ip}"
54
- response = requests.get(api_url, timeout=5)
 
 
55
 
56
  if response.status_code == 200:
57
  data = response.json()
@@ -63,18 +121,144 @@ def query_ip_country(client_ip):
63
  "city": ipdata.get("info3", "Unknown")
64
  }
65
  IP_Country_Cache[client_ip] = geo_info
 
66
  return geo_info
 
 
 
 
67
 
68
- # Query failed, cache as default
69
- default_geo = {"country": "Unknown", "region": "Unknown", "city": "Unknown"}
70
- IP_Country_Cache[client_ip] = default_geo
71
- return default_geo
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
 
73
  except Exception as e:
74
- # Exception occurred, cache as default
75
- default_geo = {"country": "Unknown", "region": "Unknown", "city": "Unknown"}
76
- IP_Country_Cache[client_ip] = default_geo
77
- return default_geo
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
 
79
  def is_restricted_country_ip(client_ip):
80
  """
@@ -303,7 +487,7 @@ except Exception as e:
303
  print(f"❌ NSFW detector initialization failed: {e}")
304
  nsfw_detector = None
305
 
306
- def edit_image_interface(input_image, prompt, request: gr.Request, progress=gr.Progress()):
307
  """
308
  Interface function for processing image editing with phase-based limitations
309
  """
@@ -318,17 +502,17 @@ def edit_image_interface(input_image, prompt, request: gr.Request, progress=gr.P
318
  IP_Dict[client_ip] += 1
319
 
320
  if input_image is None:
321
- return None, "Please upload an image first", gr.update(visible=False)
322
 
323
  if not prompt or prompt.strip() == "":
324
- return None, "Please enter editing prompt", gr.update(visible=False)
325
 
326
  # Check if prompt length is greater than 3 characters
327
  if len(prompt.strip()) <= 3:
328
- return None, "❌ Editing prompt must be more than 3 characters", gr.update(visible=False)
329
  except Exception as e:
330
  print(f"⚠️ Request preprocessing error: {e}")
331
- return None, "❌ Request processing error", gr.update(visible=False)
332
 
333
  # Get user current phase
334
  current_phase = get_ip_phase(client_ip)
@@ -366,7 +550,7 @@ def edit_image_interface(input_image, prompt, request: gr.Request, progress=gr.P
366
  """
367
 
368
  # Use same message for all users to avoid discrimination perception
369
- blocked_message = f" You have reached Hugging Face's free generation limit. Please visit https://omnicreator.net/#generator for unlimited generation"
370
 
371
  return None, blocked_message, gr.update(value=blocked_button_html, visible=True)
372
 
@@ -397,7 +581,7 @@ def edit_image_interface(input_image, prompt, request: gr.Request, progress=gr.P
397
  '>⏰ Skip Wait - Unlimited Generation</a>
398
  </div>
399
  """
400
- return None, f" You have reached Hugging Face's free generation limit. Please visit https://omnicreator.net/#generator for unlimited generation, or wait {wait_minutes_int} minutes before generating again", gr.update(value=rate_limit_button_html, visible=True)
401
 
402
  # Handle NSFW detection based on phase
403
  is_nsfw_task = False # Track if this task involves NSFW content
@@ -459,7 +643,7 @@ def edit_image_interface(input_image, prompt, request: gr.Request, progress=gr.P
459
  if nsfw_detector is not None and current_phase != 'free':
460
  try:
461
  if progress is not None:
462
- progress(0.9, desc="Checking result image...")
463
 
464
  is_nsfw, nsfw_error = download_and_check_result_nsfw(result_url, nsfw_detector)
465
 
@@ -483,17 +667,17 @@ def edit_image_interface(input_image, prompt, request: gr.Request, progress=gr.P
483
  # Apply blur processing
484
  if should_blur:
485
  if progress is not None:
486
- progress(0.95, desc="Applying content filter...")
487
 
488
  blurred_image = apply_gaussian_blur_to_image_url(result_url)
489
  if blurred_image is not None:
490
  final_result = blurred_image # Return PIL Image object
491
- final_message = f"⚠️ Content filter applied due to Hugging Face community guidelines. For unlimited creative freedom, visit our official website https://omnicreator.net/#generator"
492
  print(f"🔒 Applied Gaussian blur for NSFW content - IP: {client_ip}")
493
  else:
494
  # Blur failed, return original URL with warning
495
  final_result = result_url
496
- final_message = f"⚠️ Content review required. Please visit https://omnicreator.net/#generator for better experience"
497
 
498
  # Generate NSFW button for blurred content
499
  nsfw_action_buttons_html = f"""
@@ -520,11 +704,11 @@ def edit_image_interface(input_image, prompt, request: gr.Request, progress=gr.P
520
  return final_result, final_message, gr.update(value=nsfw_action_buttons_html, visible=True)
521
  else:
522
  final_result = result_url
523
- final_message = "" + message
524
 
525
  try:
526
  if progress is not None:
527
- progress(1.0, desc="Processing completed")
528
  except Exception as e:
529
  print(f"⚠️ Final progress update failed: {e}")
530
 
@@ -600,13 +784,13 @@ def edit_image_interface(input_image, prompt, request: gr.Request, progress=gr.P
600
  return final_result, final_message, gr.update(value=action_buttons_html, visible=True)
601
  else:
602
  print(f"❌ Processing failed - IP: {client_ip}, error: {message}", flush=True)
603
- return None, "" + message, gr.update(visible=False)
604
 
605
  except Exception as e:
606
  print(f"❌ Processing exception - IP: {client_ip}, error: {str(e)}")
607
- return None, f" Error occurred during processing: {str(e)}", gr.update(visible=False)
608
 
609
- def local_edit_interface(image_dict, prompt, reference_image, request: gr.Request, progress=gr.Progress()):
610
  """
611
  Handle local editing requests (with phase-based limitations)
612
  """
@@ -621,13 +805,13 @@ def local_edit_interface(image_dict, prompt, reference_image, request: gr.Reques
621
  IP_Dict[client_ip] += 1
622
 
623
  if image_dict is None:
624
- return None, "Please upload an image and draw the area to edit", gr.update(visible=False)
625
 
626
  # Handle different input formats for ImageEditor
627
  if isinstance(image_dict, dict):
628
  # ImageEditor dict format
629
  if "background" not in image_dict or "layers" not in image_dict:
630
- return None, "Please draw the area to edit on the image", gr.update(visible=False)
631
 
632
  base_image = image_dict["background"]
633
  layers = image_dict["layers"]
@@ -669,20 +853,20 @@ def local_edit_interface(image_dict, prompt, reference_image, request: gr.Reques
669
  if base_image is None:
670
  if is_example_case:
671
  print(f"❌ Example case but base_image still None!")
672
- return None, "❌ No image found. Please upload an image first.", gr.update(visible=False)
673
 
674
  if not layers and not is_example_case:
675
- return None, "Please draw the area to edit on the image", gr.update(visible=False)
676
 
677
  if not prompt or prompt.strip() == "":
678
- return None, "Please enter editing prompt", gr.update(visible=False)
679
 
680
  # Check prompt length
681
  if len(prompt.strip()) <= 3:
682
- return None, "❌ Editing prompt must be more than 3 characters", gr.update(visible=False)
683
  except Exception as e:
684
  print(f"⚠️ Local edit request preprocessing error: {e}")
685
- return None, "❌ Request processing error", gr.update(visible=False)
686
 
687
  # Get user current phase
688
  current_phase = get_ip_phase(client_ip)
@@ -720,7 +904,7 @@ def local_edit_interface(image_dict, prompt, reference_image, request: gr.Reques
720
  """
721
 
722
  # Use same message for all users to avoid discrimination perception
723
- blocked_message = f" You have reached Hugging Face's free generation limit. Please visit https://omnicreator.net/#generator for unlimited generation"
724
 
725
  return None, blocked_message, gr.update(value=blocked_button_html, visible=True)
726
 
@@ -751,7 +935,7 @@ def local_edit_interface(image_dict, prompt, reference_image, request: gr.Reques
751
  '>⏰ Skip Wait - Unlimited Generation</a>
752
  </div>
753
  """
754
- return None, f" You have reached Hugging Face's free generation limit. Please visit https://omnicreator.net/#generator for unlimited generation, or wait {wait_minutes_int} minutes before generating again", gr.update(value=rate_limit_button_html, visible=True)
755
 
756
  # Handle NSFW detection based on phase
757
  is_nsfw_task = False # Track if this task involves NSFW content
@@ -823,7 +1007,7 @@ def local_edit_interface(image_dict, prompt, reference_image, request: gr.Reques
823
  if nsfw_detector is not None and current_phase != 'free':
824
  try:
825
  if progress is not None:
826
- progress(0.9, desc="Checking result image...")
827
 
828
  is_nsfw, nsfw_error = download_and_check_result_nsfw(result_url, nsfw_detector)
829
 
@@ -847,17 +1031,17 @@ def local_edit_interface(image_dict, prompt, reference_image, request: gr.Reques
847
  # Apply blur processing
848
  if should_blur:
849
  if progress is not None:
850
- progress(0.95, desc="Applying content filter...")
851
 
852
  blurred_image = apply_gaussian_blur_to_image_url(result_url)
853
  if blurred_image is not None:
854
  final_result = blurred_image # Return PIL Image object
855
- final_message = f"⚠️ Content filter applied due to Hugging Face community guidelines. For unlimited creative freedom, visit our official website https://omnicreator.net/#generator"
856
  print(f"🔒 Local edit applied Gaussian blur for NSFW content - IP: {client_ip}")
857
  else:
858
  # Blur failed, return original URL with warning
859
  final_result = result_url
860
- final_message = f"⚠️ Content review required. Please visit https://omnicreator.net/#generator for better experience"
861
 
862
  # Generate NSFW button for blurred content
863
  nsfw_action_buttons_html = f"""
@@ -884,11 +1068,11 @@ def local_edit_interface(image_dict, prompt, reference_image, request: gr.Reques
884
  return final_result, final_message, gr.update(value=nsfw_action_buttons_html, visible=True)
885
  else:
886
  final_result = result_url
887
- final_message = "" + message
888
 
889
  try:
890
  if progress is not None:
891
- progress(1.0, desc="Processing completed")
892
  except Exception as e:
893
  print(f"⚠️ Local edit final progress update failed: {e}")
894
 
@@ -964,11 +1148,11 @@ def local_edit_interface(image_dict, prompt, reference_image, request: gr.Reques
964
  return final_result, final_message, gr.update(value=action_buttons_html, visible=True)
965
  else:
966
  print(f"❌ Local editing processing failed - IP: {client_ip}, error: {message}", flush=True)
967
- return None, "" + message, gr.update(visible=False)
968
 
969
  except Exception as e:
970
  print(f"❌ Local editing exception - IP: {client_ip}, error: {str(e)}")
971
- return None, f" Error occurred during processing: {str(e)}", gr.update(visible=False)
972
 
973
  # Create Gradio interface
974
  def create_app():
@@ -980,6 +1164,67 @@ def create_app():
980
  max-width: 1200px;
981
  margin: 0 auto;
982
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
983
  .upload-area {
984
  border: 2px dashed #ccc;
985
  border-radius: 10px;
@@ -1008,93 +1253,120 @@ def create_app():
1008
  """
1009
  ) as app:
1010
 
1011
- # Main title - styled like Trump AI Voice
1012
- gr.HTML("""
1013
- <div style="text-align: center; margin: 5px auto 0px auto; max-width: 800px;">
 
 
1014
  <h1 style="color: #2c3e50; margin: 0; font-size: 3.5em; font-weight: 800; letter-spacing: 3px; text-shadow: 2px 2px 4px rgba(0,0,0,0.1);">
1015
- 🎨 AI Image Editor
1016
  </h1>
1017
  </div>
1018
- """, padding=False)
1019
 
1020
- # 🌟 NEW: Multi-Image Editing Announcement Banner with breathing effect
1021
- gr.HTML("""
1022
- <style>
1023
- @keyframes breathe {
1024
- 0%, 100% { transform: scale(1); }
1025
- 50% { transform: scale(1.02); }
1026
- }
1027
- .breathing-banner {
1028
- animation: breathe 3s ease-in-out infinite;
1029
- }
1030
- </style>
1031
- <div class="breathing-banner" style="
1032
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
1033
- margin: 5px auto 5px auto;
1034
- padding: 6px 40px;
1035
- border-radius: 20px;
1036
- max-width: 700px;
1037
- box-shadow: 0 2px 8px rgba(102, 126, 234, 0.3);
1038
- text-align: center;
1039
- ">
1040
- <span style="color: white; font-weight: 600; font-size: 1.0em;">
1041
- 🚀 NEWS:
1042
- <a href="https://huggingface.co/spaces/Selfit/Multi-Image-Edit" target="_blank" style="
1043
- color: white;
1044
- text-decoration: none;
1045
- border-bottom: 1px solid rgba(255,255,255,0.5);
1046
- transition: all 0.3s ease;
1047
- " onmouseover="this.style.borderBottom='1px solid white'"
1048
- onmouseout="this.style.borderBottom='1px solid rgba(255,255,255,0.5)'">
1049
- World's First Multi-Image Editing Tool →
1050
- </a>
1051
- </span>
1052
- </div>
1053
- """, padding=False)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1054
 
1055
- with gr.Tabs():
1056
- with gr.Tab("🌍 Global Editor"):
1057
  with gr.Row():
1058
  with gr.Column(scale=1):
1059
- gr.Markdown("### 📸 Upload Image")
1060
  input_image = gr.Image(
1061
- label="Select image to edit",
1062
  type="pil",
1063
  height=512,
1064
  elem_classes=["upload-area"]
1065
  )
1066
 
1067
- gr.Markdown("### ✍️ Editing Instructions")
1068
  prompt_input = gr.Textbox(
1069
- label="Enter editing prompt",
1070
- placeholder="For example: change background to beach, add rainbow, remove background, etc...",
1071
  lines=3,
1072
  max_lines=5
1073
  )
1074
 
1075
  edit_button = gr.Button(
1076
- "🚀 Start Editing",
1077
  variant="primary",
1078
  size="lg"
1079
  )
1080
 
1081
  with gr.Column(scale=1):
1082
- gr.Markdown("### 🎯 Editing Result")
1083
  output_image = gr.Image(
1084
- label="Edited image",
1085
  height=320,
1086
  elem_classes=["result-area"]
1087
  )
1088
 
1089
  use_as_input_btn = gr.Button(
1090
- "🔄 Use as Input",
1091
  variant="secondary",
1092
  size="sm",
1093
  elem_classes=["use-as-input-btn"]
1094
  )
1095
 
1096
  status_output = gr.Textbox(
1097
- label="Processing status",
1098
  lines=2,
1099
  max_lines=3,
1100
  interactive=False
@@ -1102,7 +1374,7 @@ def create_app():
1102
 
1103
  action_buttons = gr.HTML(visible=False)
1104
 
1105
- gr.Markdown("### 💡 Prompt Examples")
1106
  with gr.Row():
1107
  example_prompts = [
1108
  "Set the background to a grand opera stage with red curtains",
@@ -1123,7 +1395,7 @@ def create_app():
1123
 
1124
  edit_button.click(
1125
  fn=edit_image_interface,
1126
- inputs=[input_image, prompt_input],
1127
  outputs=[output_image, status_output, action_buttons],
1128
  show_progress=True,
1129
  concurrency_limit=10,
@@ -1141,56 +1413,56 @@ def create_app():
1141
  outputs=[input_image]
1142
  )
1143
 
1144
- with gr.Tab("🖌️ Local Inpaint"):
1145
  with gr.Row():
1146
  with gr.Column(scale=1):
1147
- gr.Markdown("### 📸 Upload Image and Draw Mask")
1148
  local_input_image = gr.ImageEditor(
1149
- label="Upload image and draw mask",
1150
  type="pil",
1151
  height=512,
1152
  brush=gr.Brush(colors=["#ff0000"], default_size=180),
1153
  elem_classes=["upload-area"]
1154
  )
1155
 
1156
- gr.Markdown("### 🖼️ Reference Image(Optional)")
1157
  local_reference_image = gr.Image(
1158
- label="Upload reference image (optional)",
1159
  type="pil",
1160
  height=256
1161
  )
1162
 
1163
- gr.Markdown("### ✍️ Editing Instructions")
1164
  local_prompt_input = gr.Textbox(
1165
- label="Enter local editing prompt",
1166
- placeholder="For example: change selected area hair to golden, add patterns to selected object, change selected area color, etc...",
1167
  lines=3,
1168
  max_lines=5
1169
  )
1170
 
1171
  local_edit_button = gr.Button(
1172
- "🎯 Start Local Editing",
1173
  variant="primary",
1174
  size="lg"
1175
  )
1176
 
1177
  with gr.Column(scale=1):
1178
- gr.Markdown("### 🎯 Editing Result")
1179
  local_output_image = gr.Image(
1180
- label="Local edited image",
1181
  height=320,
1182
  elem_classes=["result-area"]
1183
  )
1184
 
1185
  local_use_as_input_btn = gr.Button(
1186
- "🔄 Use as Input",
1187
  variant="secondary",
1188
  size="sm",
1189
  elem_classes=["use-as-input-btn"]
1190
  )
1191
 
1192
  local_status_output = gr.Textbox(
1193
- label="Processing status",
1194
  lines=2,
1195
  max_lines=3,
1196
  interactive=False
@@ -1200,7 +1472,7 @@ def create_app():
1200
 
1201
  local_edit_button.click(
1202
  fn=local_edit_interface,
1203
- inputs=[local_input_image, local_prompt_input, local_reference_image],
1204
  outputs=[local_output_image, local_status_output, local_action_buttons],
1205
  show_progress=True,
1206
  concurrency_limit=8,
@@ -1223,7 +1495,7 @@ def create_app():
1223
  )
1224
 
1225
  # Local inpaint example
1226
- gr.Markdown("### 💡 Local Inpaint Example")
1227
 
1228
  def load_local_example():
1229
  """Load panda to cat transformation example - simplified, mask handled in backend"""
@@ -1264,49 +1536,53 @@ def create_app():
1264
  return None, None, "EXAMPLE_PANDA_CAT_Transform the panda head into a cute cat head, keeping the body"
1265
 
1266
  # Example display
1267
- gr.Markdown("#### 🐼➡️🐱 Example: Panda to Cat Transformation")
1268
  with gr.Row():
1269
  with gr.Column(scale=2):
1270
  # Preview images for local example
1271
  with gr.Row():
1272
  try:
1273
- gr.Image("datas/panda01.jpeg", label="Main Image", height=120, width=120, show_label=True, interactive=False)
1274
- gr.Image("datas/panda01m.jpeg", label="Mask", height=120, width=120, show_label=True, interactive=False)
1275
- gr.Image("datas/cat01.webp", label="Reference", height=120, width=120, show_label=True, interactive=False)
1276
  except:
1277
  gr.Markdown("*Preview images not available*")
1278
- gr.Markdown("**Prompt**: let the cat ride on the panda \n**Note**: Mask will be automatically applied when you submit this example")
1279
  with gr.Column(scale=1):
1280
- gr.Button(
1281
- "🎨 Load Panda Example",
1282
  size="lg",
1283
  variant="secondary"
1284
- ).click(
 
1285
  fn=load_local_example,
1286
  outputs=[local_input_image, local_reference_image, local_prompt_input]
1287
  )
1288
 
1289
  # Add a refresh button to fix UI state issues
1290
- gr.Button(
1291
- "🔄 Refresh Image Editor",
1292
  size="sm",
1293
  variant="secondary"
1294
- ).click(
 
1295
  fn=lambda: gr.update(),
1296
  outputs=[local_input_image]
1297
  )
1298
 
1299
  # SEO Content Section
1300
- gr.HTML("""
 
 
 
1301
  <div style="width: 100%; margin: 50px 0; padding: 0 20px;">
1302
 
1303
  <div style="text-align: center; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 40px; border-radius: 20px; margin: 40px 0;">
1304
  <h2 style="margin: 0 0 20px 0; font-size: 2.2em; font-weight: 700;">
1305
- &#127912; Unlimited AI Image Generation & Editing
1306
  </h2>
1307
  <p style="margin: 0 0 25px 0; font-size: 1.2em; opacity: 0.95; line-height: 1.6;">
1308
- Experience the ultimate freedom in AI image creation! Generate and edit unlimited images without restrictions,
1309
- with complete creative freedom and no limits on your imagination with our premium AI image editing platform.
1310
  </p>
1311
 
1312
  <div style="display: flex; justify-content: center; gap: 25px; flex-wrap: wrap; margin: 30px 0;">
@@ -1328,24 +1604,22 @@ def create_app():
1328
  border: none;
1329
  transform: scale(1);
1330
  " onmouseover="this.style.transform='scale(1.05)'" onmouseout="this.style.transform='scale(1)'">
1331
- &#128640; Get Unlimited Access Now
1332
  </a>
1333
 
1334
  </div>
1335
 
1336
  <p style="color: rgba(255,255,255,0.9); font-size: 1em; margin: 20px 0 0 0;">
1337
- Join thousands of creators who trust Omni Creator for unrestricted AI image generation!
1338
  </p>
1339
  </div>
1340
 
1341
  <div style="text-align: center; margin: 25px auto; background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); padding: 35px; border-radius: 20px; box-shadow: 0 10px 30px rgba(0,0,0,0.1);">
1342
  <h2 style="color: #2c3e50; margin: 0 0 20px 0; font-size: 1.9em; font-weight: 700;">
1343
- &#11088; Professional AI Image Editor - No Restrictions
1344
  </h2>
1345
  <p style="color: #555; font-size: 1.1em; line-height: 1.6; margin: 0 0 20px 0; padding: 0 20px;">
1346
- Transform your creative vision into reality with our advanced AI image editing platform. Whether you're creating
1347
- art, editing photos, designing content, or working with any type of imagery - our powerful AI removes all limitations
1348
- and gives you complete creative freedom.
1349
  </p>
1350
  </div>
1351
 
@@ -1353,61 +1627,55 @@ def create_app():
1353
 
1354
  <div style="background: white; padding: 30px; border-radius: 15px; box-shadow: 0 5px 20px rgba(0,0,0,0.08); border-left: 5px solid #e74c3c;">
1355
  <h3 style="color: #e74c3c; margin: 0 0 15px 0; font-size: 1.4em; font-weight: 600;">
1356
- &#127919; Unlimited Generation
1357
  </h3>
1358
  <p style="color: #666; margin: 0; line-height: 1.6; font-size: 1em;">
1359
- Premium users enjoy unlimited image generation without daily limits, rate restrictions, or content barriers.
1360
- Create as many images as you need, whenever you need them.
1361
  </p>
1362
  </div>
1363
 
1364
  <div style="background: white; padding: 30px; border-radius: 15px; box-shadow: 0 5px 20px rgba(0,0,0,0.08); border-left: 5px solid #3498db;">
1365
  <h3 style="color: #3498db; margin: 0 0 15px 0; font-size: 1.4em; font-weight: 600;">
1366
- 🔓 Creative Freedom
1367
  </h3>
1368
  <p style="color: #666; margin: 0; line-height: 1.6; font-size: 1em;">
1369
- Generate and edit any type of content with complete creative freedom and no limits on your imagination.
1370
- Unlimited possibilities for artists, designers, and content creators.
1371
  </p>
1372
  </div>
1373
 
1374
  <div style="background: white; padding: 30px; border-radius: 15px; box-shadow: 0 5px 20px rgba(0,0,0,0.08); border-left: 5px solid #27ae60;">
1375
  <h3 style="color: #27ae60; margin: 0 0 15px 0; font-size: 1.4em; font-weight: 600;">
1376
- &#9889; Lightning Fast Processing
1377
  </h3>
1378
  <p style="color: #666; margin: 0; line-height: 1.6; font-size: 1em;">
1379
- Advanced AI infrastructure delivers high-quality results in seconds. No waiting in queues,
1380
- no processing delays - just instant, professional-grade image editing.
1381
  </p>
1382
  </div>
1383
 
1384
  <div style="background: white; padding: 30px; border-radius: 15px; box-shadow: 0 5px 20px rgba(0,0,0,0.08); border-left: 5px solid #9b59b6;">
1385
  <h3 style="color: #9b59b6; margin: 0 0 15px 0; font-size: 1.4em; font-weight: 600;">
1386
- &#127912; Advanced Editing Tools
1387
  </h3>
1388
  <p style="color: #666; margin: 0; line-height: 1.6; font-size: 1em;">
1389
- Global transformations, precision local editing, style transfer, object removal, background replacement,
1390
- and dozens of other professional editing capabilities.
1391
  </p>
1392
  </div>
1393
 
1394
  <div style="background: white; padding: 30px; border-radius: 15px; box-shadow: 0 5px 20px rgba(0,0,0,0.08); border-left: 5px solid #f39c12;">
1395
  <h3 style="color: #f39c12; margin: 0 0 15px 0; font-size: 1.4em; font-weight: 600;">
1396
- &#128142; Premium Quality
1397
  </h3>
1398
  <p style="color: #666; margin: 0; line-height: 1.6; font-size: 1em;">
1399
- State-of-the-art AI models trained on millions of images deliver exceptional quality and realism.
1400
- Professional results suitable for commercial use and high-end projects.
1401
  </p>
1402
  </div>
1403
 
1404
  <div style="background: white; padding: 30px; border-radius: 15px; box-shadow: 0 5px 20px rgba(0,0,0,0.08); border-left: 5px solid #34495e;">
1405
  <h3 style="color: #34495e; margin: 0 0 15px 0; font-size: 1.4em; font-weight: 600;">
1406
- 🌍 Multi-Modal Support
1407
  </h3>
1408
  <p style="color: #666; margin: 0; line-height: 1.6; font-size: 1em;">
1409
- Support for all image formats, styles, and use cases. From photorealistic portraits to artistic creations,
1410
- product photography to digital art - we handle everything.
1411
  </p>
1412
  </div>
1413
 
@@ -1415,28 +1683,28 @@ def create_app():
1415
 
1416
  <div style="background: linear-gradient(135deg, #ff9a9e 0%, #fecfef 50%, #fecfef 100%); padding: 30px; border-radius: 15px; margin: 40px 0;">
1417
  <h3 style="color: #8b5cf6; text-align: center; margin: 0 0 25px 0; font-size: 1.5em; font-weight: 700;">
1418
- &#128161; Pro Tips for Best Results
1419
  </h3>
1420
  <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 18px;">
1421
 
1422
  <div style="background: rgba(255,255,255,0.85); padding: 18px; border-radius: 12px;">
1423
- <strong style="color: #8b5cf6; font-size: 1.1em;">📝 Clear Descriptions:</strong>
1424
- <p style="color: #555; margin: 5px 0 0 0; line-height: 1.5;">Use detailed, specific prompts for better results. Describe colors, styles, lighting, and composition clearly.</p>
1425
  </div>
1426
 
1427
  <div style="background: rgba(255,255,255,0.85); padding: 18px; border-radius: 12px;">
1428
- <strong style="color: #8b5cf6; font-size: 1.1em;">&#127919; Local Editing:</strong>
1429
- <p style="color: #555; margin: 5px 0 0 0; line-height: 1.5;">Use precise brush strokes to select areas for local editing. Smaller, focused edits often yield better results.</p>
1430
  </div>
1431
 
1432
  <div style="background: rgba(255,255,255,0.85); padding: 18px; border-radius: 12px;">
1433
- <strong style="color: #8b5cf6; font-size: 1.1em;">&#9889; Iterative Process:</strong>
1434
- <p style="color: #555; margin: 5px 0 0 0; line-height: 1.5;">Use "Use as Input" feature to refine results. Multiple iterations can achieve complex transformations.</p>
1435
  </div>
1436
 
1437
  <div style="background: rgba(255,255,255,0.85); padding: 18px; border-radius: 12px;">
1438
- <strong style="color: #8b5cf6; font-size: 1.1em;">&#128444; Image Quality:</strong>
1439
- <p style="color: #555; margin: 5px 0 0 0; line-height: 1.5;">Higher resolution input images (up to 10MB) generally produce better editing results and finer details.</p>
1440
  </div>
1441
 
1442
  </div>
@@ -1444,47 +1712,47 @@ def create_app():
1444
 
1445
  <div style="text-align: center; margin: 25px auto; background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%); padding: 35px; border-radius: 20px; box-shadow: 0 10px 30px rgba(0,0,0,0.1);">
1446
  <h2 style="color: #2c3e50; margin: 0 0 20px 0; font-size: 1.8em; font-weight: 700;">
1447
- &#128640; Perfect For Every Creative Need
1448
  </h2>
1449
  <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 20px; margin: 25px 0; text-align: left;">
1450
 
1451
  <div style="background: rgba(255,255,255,0.8); padding: 20px; border-radius: 12px;">
1452
- <h4 style="color: #e74c3c; margin: 0 0 10px 0;">🎨 Digital Art</h4>
1453
  <ul style="color: #555; margin: 0; padding-left: 18px; line-height: 1.6;">
1454
- <li>Character design</li>
1455
- <li>Concept art</li>
1456
- <li>Style transfer</li>
1457
- <li>Artistic effects</li>
1458
  </ul>
1459
  </div>
1460
 
1461
  <div style="background: rgba(255,255,255,0.8); padding: 20px; border-radius: 12px;">
1462
- <h4 style="color: #3498db; margin: 0 0 10px 0;">📸 Photography</h4>
1463
  <ul style="color: #555; margin: 0; padding-left: 18px; line-height: 1.6;">
1464
- <li>Background replacement</li>
1465
- <li>Object removal</li>
1466
- <li>Lighting adjustment</li>
1467
- <li>Portrait enhancement</li>
1468
  </ul>
1469
  </div>
1470
 
1471
  <div style="background: rgba(255,255,255,0.8); padding: 20px; border-radius: 12px;">
1472
- <h4 style="color: #27ae60; margin: 0 0 10px 0;">🛍️ E-commerce</h4>
1473
  <ul style="color: #555; margin: 0; padding-left: 18px; line-height: 1.6;">
1474
- <li>Product photography</li>
1475
- <li>Lifestyle shots</li>
1476
- <li>Color variations</li>
1477
- <li>Context placement</li>
1478
  </ul>
1479
  </div>
1480
 
1481
  <div style="background: rgba(255,255,255,0.8); padding: 20px; border-radius: 12px;">
1482
- <h4 style="color: #9b59b6; margin: 0 0 10px 0;">📱 Social Media</h4>
1483
  <ul style="color: #555; margin: 0; padding-left: 18px; line-height: 1.6;">
1484
- <li>Content creation</li>
1485
- <li>Meme generation</li>
1486
- <li>Brand visuals</li>
1487
- <li>Viral content</li>
1488
  </ul>
1489
  </div>
1490
 
@@ -1492,9 +1760,159 @@ def create_app():
1492
  </div>
1493
 
1494
  </div>
1495
-
1496
- """, padding=False)
1497
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1498
  return app
1499
 
1500
  if __name__ == "__main__":
 
4
  import shutil
5
  import tempfile
6
  import time
7
+ import json
8
  from util import process_image_edit, process_local_image_edit, download_and_check_result_nsfw
9
  from nfsw import NSFWDetector
10
 
11
+ # i18n
12
+ def load_translations():
13
+ translations = {}
14
+ import os
15
+ i18n_dir = "i18n/"
16
+ for lang_file in os.listdir(i18n_dir):
17
+ if lang_file.endswith('.json'):
18
+ lang = lang_file[:-5] # Remove .json extension
19
+ try:
20
+ with open(os.path.join(i18n_dir, lang_file), "r", encoding="utf-8") as f:
21
+ translations[lang] = json.load(f)
22
+ except Exception as e:
23
+ print(f"Failed to load {lang_file}: {e}")
24
+ return translations
25
+
26
+ translations = load_translations()
27
+
28
+ def t(key, lang="en"):
29
+ return translations.get(lang, {}).get(key, key)
30
+
31
  # Configuration parameters
32
 
33
  TIP_TRY_N = 4 # Show like button tip after 12 tries
 
53
  Total_Request_Count = 0 # Total request counter for periodic printing
54
  PRINT_STATS_INTERVAL = 10 # Print stats every N requests
55
 
56
+ # Async IP query tracking
57
+ IP_Query_Results = {} # Track async query results
58
+
59
  # Restricted countries list (these countries have lower usage limits)
60
  RESTRICTED_COUNTRIES = ["印度", "巴基斯坦"]
61
  RESTRICTED_COUNTRY_LIMIT = 5 # Max usage for restricted countries
62
 
63
+ country_dict = {
64
+ "zh": ["中国", "香港"],
65
+ "en": ["美国", "澳大利亚", "英国", "加拿大", "新西兰", "爱尔兰"],
66
+ "es": ["西班牙", "墨西哥", "阿根廷", "哥伦比亚", "智利", "秘鲁", "巴西"],
67
+ "fr": ["法国", "比利时", "摩纳哥"],
68
+ "de": ["德国", "奥地利", ],
69
+ "it": ["意大利", "圣马力诺", "梵蒂冈"],
70
+ "ja": ["日本"],
71
+ "ru": ["俄罗斯"],
72
+ "ar": ["沙特阿拉伯", "埃及"],
73
+ "nl":["荷兰"],
74
+ "id":["印度尼西亚"]
75
+ }
76
+
77
  def query_ip_country(client_ip):
78
  """
79
+ Query IP address geo information with robust error handling
80
+
81
+ Features:
82
+ - 3 second timeout limit
83
+ - Comprehensive error handling
84
+ - Automatic fallback to default values
85
+ - Cache mechanism to avoid repeated queries
86
 
87
  Returns:
88
  dict: {"country": str, "region": str, "city": str}
89
  """
90
  # Check cache first - no API call for subsequent visits
91
  if client_ip in IP_Country_Cache:
92
+ print(f"Using cached IP data for {client_ip}")
93
  return IP_Country_Cache[client_ip]
94
 
95
+ # Validate IP address
96
+ if not client_ip or client_ip in ["127.0.0.1", "localhost", "::1"]:
97
+ print(f"Invalid or local IP address: {client_ip}, using default")
98
+ default_geo = {"country": "Unknown", "region": "Unknown", "city": "Unknown"}
99
+ IP_Country_Cache[client_ip] = default_geo
100
+ return default_geo
101
+
102
+ # First time visit - query API with robust error handling
103
+ print(f"Querying IP geolocation for {client_ip}...")
104
+
105
  try:
106
  import requests
107
+ from requests.exceptions import Timeout, ConnectionError, RequestException
108
+
109
  api_url = f"https://api.vore.top/api/IPdata?ip={client_ip}"
110
+
111
+ # Make request with 3 second timeout
112
+ response = requests.get(api_url, timeout=3)
113
 
114
  if response.status_code == 200:
115
  data = response.json()
 
121
  "city": ipdata.get("info3", "Unknown")
122
  }
123
  IP_Country_Cache[client_ip] = geo_info
124
+ print(f"Successfully detected location for {client_ip}: {geo_info['country']}")
125
  return geo_info
126
+ else:
127
+ print(f"API returned invalid data for {client_ip}: {data}")
128
+ else:
129
+ print(f"API request failed with status {response.status_code} for {client_ip}")
130
 
131
+ except Timeout:
132
+ print(f"Timeout (>3s) querying IP location for {client_ip}, using default")
133
+ except ConnectionError:
134
+ print(f"Network connection error for IP {client_ip}, using default")
135
+ except RequestException as e:
136
+ print(f"Request error for IP {client_ip}: {e}, using default")
137
+ except Exception as e:
138
+ print(f"Unexpected error querying IP {client_ip}: {e}, using default")
139
+
140
+ # All failures lead here - cache default and return
141
+ default_geo = {"country": "Unknown", "region": "Unknown", "city": "Unknown"}
142
+ IP_Country_Cache[client_ip] = default_geo
143
+ print(f"Cached default location for {client_ip}")
144
+ return default_geo
145
+
146
+ def query_ip_country_async(client_ip):
147
+ """
148
+ Async version that returns immediately with default, then updates cache in background
149
+
150
+ Returns:
151
+ tuple: (immediate_lang, geo_info_or_none)
152
+ """
153
+ # If already cached, return immediately
154
+ if client_ip in IP_Country_Cache:
155
+ geo_info = IP_Country_Cache[client_ip]
156
+ lang = get_lang_from_country(geo_info["country"])
157
+ return lang, geo_info
158
+
159
+ # Return default immediately, query in background
160
+ return "en", None
161
+
162
+ def get_lang_from_country(country):
163
+ """
164
+ Map country name to language code with comprehensive validation
165
+
166
+ Features:
167
+ - Handles invalid/empty input
168
+ - Case-insensitive matching
169
+ - Detailed logging
170
+ - Always returns valid language code
171
+
172
+ Args:
173
+ country (str): Country name
174
+
175
+ Returns:
176
+ str: Language code (always valid, defaults to "en")
177
+ """
178
+ # Input validation
179
+ if not country or not isinstance(country, str) or country.strip() == "":
180
+ print(f"Invalid country provided: '{country}', defaulting to English")
181
+ return "en"
182
+
183
+ # Normalize country name
184
+ country = country.strip()
185
+ if country.lower() == "unknown":
186
+ print(f"Unknown country, defaulting to English")
187
+ return "en"
188
+
189
+ try:
190
+ # Search in country dictionary with case-sensitive match first
191
+ for lang, countries in country_dict.items():
192
+ if country in countries:
193
+ print(f"Matched country '{country}' to language '{lang}'")
194
+ return lang
195
+
196
+ # If no exact match, try case-insensitive match
197
+ country_lower = country.lower()
198
+ for lang, countries in country_dict.items():
199
+ for country_variant in countries:
200
+ if country_variant.lower() == country_lower:
201
+ print(f"Case-insensitive match: country '{country}' to language '{lang}'")
202
+ return lang
203
+
204
+ # No match found
205
+ print(f"Country '{country}' not found in country_dict, defaulting to English")
206
+ return "en"
207
 
208
  except Exception as e:
209
+ print(f"Error matching country '{country}': {e}, defaulting to English")
210
+ return "en"
211
+
212
+ def get_lang_from_ip(client_ip):
213
+ """
214
+ Get language based on IP geolocation with comprehensive error handling
215
+
216
+ Features:
217
+ - Validates input IP address
218
+ - Handles all possible exceptions
219
+ - Always returns a valid language code
220
+ - Defaults to English on any failure
221
+ - Includes detailed logging
222
+
223
+ Args:
224
+ client_ip (str): Client IP address
225
+
226
+ Returns:
227
+ str: Language code (always valid, defaults to "en")
228
+ """
229
+ # Input validation
230
+ if not client_ip or not isinstance(client_ip, str):
231
+ print(f"Invalid IP address provided: {client_ip}, defaulting to English")
232
+ return "en"
233
+
234
+ try:
235
+ # Query geolocation info (has its own error handling and 3s timeout)
236
+ geo_info = query_ip_country(client_ip)
237
+
238
+ if not geo_info or not isinstance(geo_info, dict):
239
+ print(f"No geolocation data for {client_ip}, defaulting to English")
240
+ return "en"
241
+
242
+ # Extract country with fallback
243
+ country = geo_info.get("country", "Unknown")
244
+ if not country or country == "Unknown":
245
+ print(f"Unknown country for IP {client_ip}, defaulting to English")
246
+ return "en"
247
+
248
+ # Map country to language
249
+ detected_lang = get_lang_from_country(country)
250
+
251
+ # Validate language code
252
+ if not detected_lang or not isinstance(detected_lang, str) or len(detected_lang) != 2:
253
+ print(f"Invalid language code '{detected_lang}' for {client_ip}, defaulting to English")
254
+ return "en"
255
+
256
+ print(f"IP {client_ip} -> Country: {country} -> Language: {detected_lang}")
257
+ return detected_lang
258
+
259
+ except Exception as e:
260
+ print(f"Unexpected error getting language from IP {client_ip}: {e}, defaulting to English")
261
+ return "en" # Always return a valid language code
262
 
263
  def is_restricted_country_ip(client_ip):
264
  """
 
487
  print(f"❌ NSFW detector initialization failed: {e}")
488
  nsfw_detector = None
489
 
490
+ def edit_image_interface(input_image, prompt, lang, request: gr.Request, progress=gr.Progress()):
491
  """
492
  Interface function for processing image editing with phase-based limitations
493
  """
 
502
  IP_Dict[client_ip] += 1
503
 
504
  if input_image is None:
505
+ return None, t("error_upload_first", lang), gr.update(visible=False)
506
 
507
  if not prompt or prompt.strip() == "":
508
+ return None, t("error_enter_prompt", lang), gr.update(visible=False)
509
 
510
  # Check if prompt length is greater than 3 characters
511
  if len(prompt.strip()) <= 3:
512
+ return None, t("error_prompt_too_short", lang), gr.update(visible=False)
513
  except Exception as e:
514
  print(f"⚠️ Request preprocessing error: {e}")
515
+ return None, t("error_request_processing", lang), gr.update(visible=False)
516
 
517
  # Get user current phase
518
  current_phase = get_ip_phase(client_ip)
 
550
  """
551
 
552
  # Use same message for all users to avoid discrimination perception
553
+ blocked_message = t("error_free_limit_reached", lang)
554
 
555
  return None, blocked_message, gr.update(value=blocked_button_html, visible=True)
556
 
 
581
  '>⏰ Skip Wait - Unlimited Generation</a>
582
  </div>
583
  """
584
+ return None, t("error_free_limit_wait", lang).format(wait_minutes_int=wait_minutes_int), gr.update(value=rate_limit_button_html, visible=True)
585
 
586
  # Handle NSFW detection based on phase
587
  is_nsfw_task = False # Track if this task involves NSFW content
 
643
  if nsfw_detector is not None and current_phase != 'free':
644
  try:
645
  if progress is not None:
646
+ progress(0.9, desc=t("status_checking_result", lang))
647
 
648
  is_nsfw, nsfw_error = download_and_check_result_nsfw(result_url, nsfw_detector)
649
 
 
667
  # Apply blur processing
668
  if should_blur:
669
  if progress is not None:
670
+ progress(0.95, desc=t("status_applying_filter", lang))
671
 
672
  blurred_image = apply_gaussian_blur_to_image_url(result_url)
673
  if blurred_image is not None:
674
  final_result = blurred_image # Return PIL Image object
675
+ final_message = t("warning_content_filter", lang)
676
  print(f"🔒 Applied Gaussian blur for NSFW content - IP: {client_ip}")
677
  else:
678
  # Blur failed, return original URL with warning
679
  final_result = result_url
680
+ final_message = t("warning_content_review", lang)
681
 
682
  # Generate NSFW button for blurred content
683
  nsfw_action_buttons_html = f"""
 
704
  return final_result, final_message, gr.update(value=nsfw_action_buttons_html, visible=True)
705
  else:
706
  final_result = result_url
707
+ final_message = t("status_completed_message", lang).format(message=message)
708
 
709
  try:
710
  if progress is not None:
711
+ progress(1.0, desc=t("status_processing_completed", lang))
712
  except Exception as e:
713
  print(f"⚠️ Final progress update failed: {e}")
714
 
 
784
  return final_result, final_message, gr.update(value=action_buttons_html, visible=True)
785
  else:
786
  print(f"❌ Processing failed - IP: {client_ip}, error: {message}", flush=True)
787
+ return None, t("error_processing_failed", lang).format(message=message), gr.update(visible=False)
788
 
789
  except Exception as e:
790
  print(f"❌ Processing exception - IP: {client_ip}, error: {str(e)}")
791
+ return None, t("error_processing_exception", lang).format(error=str(e)), gr.update(visible=False)
792
 
793
+ def local_edit_interface(image_dict, prompt, reference_image, lang, request: gr.Request, progress=gr.Progress()):
794
  """
795
  Handle local editing requests (with phase-based limitations)
796
  """
 
805
  IP_Dict[client_ip] += 1
806
 
807
  if image_dict is None:
808
+ return None, t("error_upload_and_draw", lang), gr.update(visible=False)
809
 
810
  # Handle different input formats for ImageEditor
811
  if isinstance(image_dict, dict):
812
  # ImageEditor dict format
813
  if "background" not in image_dict or "layers" not in image_dict:
814
+ return None, t("error_draw_on_image", lang), gr.update(visible=False)
815
 
816
  base_image = image_dict["background"]
817
  layers = image_dict["layers"]
 
853
  if base_image is None:
854
  if is_example_case:
855
  print(f"❌ Example case but base_image still None!")
856
+ return None, t("error_no_image_found", lang), gr.update(visible=False)
857
 
858
  if not layers and not is_example_case:
859
+ return None, t("error_draw_on_image", lang), gr.update(visible=False)
860
 
861
  if not prompt or prompt.strip() == "":
862
+ return None, t("error_enter_prompt", lang), gr.update(visible=False)
863
 
864
  # Check prompt length
865
  if len(prompt.strip()) <= 3:
866
+ return None, t("error_prompt_too_short", lang), gr.update(visible=False)
867
  except Exception as e:
868
  print(f"⚠️ Local edit request preprocessing error: {e}")
869
+ return None, t("error_request_processing", lang), gr.update(visible=False)
870
 
871
  # Get user current phase
872
  current_phase = get_ip_phase(client_ip)
 
904
  """
905
 
906
  # Use same message for all users to avoid discrimination perception
907
+ blocked_message = t("error_free_limit_reached", lang)
908
 
909
  return None, blocked_message, gr.update(value=blocked_button_html, visible=True)
910
 
 
935
  '>⏰ Skip Wait - Unlimited Generation</a>
936
  </div>
937
  """
938
+ return None, t("error_free_limit_wait", lang).format(wait_minutes_int=wait_minutes_int), gr.update(value=rate_limit_button_html, visible=True)
939
 
940
  # Handle NSFW detection based on phase
941
  is_nsfw_task = False # Track if this task involves NSFW content
 
1007
  if nsfw_detector is not None and current_phase != 'free':
1008
  try:
1009
  if progress is not None:
1010
+ progress(0.9, desc=t("status_checking_result", lang))
1011
 
1012
  is_nsfw, nsfw_error = download_and_check_result_nsfw(result_url, nsfw_detector)
1013
 
 
1031
  # Apply blur processing
1032
  if should_blur:
1033
  if progress is not None:
1034
+ progress(0.95, desc=t("status_applying_filter", lang))
1035
 
1036
  blurred_image = apply_gaussian_blur_to_image_url(result_url)
1037
  if blurred_image is not None:
1038
  final_result = blurred_image # Return PIL Image object
1039
+ final_message = t("warning_content_filter", lang)
1040
  print(f"🔒 Local edit applied Gaussian blur for NSFW content - IP: {client_ip}")
1041
  else:
1042
  # Blur failed, return original URL with warning
1043
  final_result = result_url
1044
+ final_message = t("warning_content_review", lang)
1045
 
1046
  # Generate NSFW button for blurred content
1047
  nsfw_action_buttons_html = f"""
 
1068
  return final_result, final_message, gr.update(value=nsfw_action_buttons_html, visible=True)
1069
  else:
1070
  final_result = result_url
1071
+ final_message = t("status_completed_message", lang).format(message=message)
1072
 
1073
  try:
1074
  if progress is not None:
1075
+ progress(1.0, desc=t("status_processing_completed", lang))
1076
  except Exception as e:
1077
  print(f"⚠️ Local edit final progress update failed: {e}")
1078
 
 
1148
  return final_result, final_message, gr.update(value=action_buttons_html, visible=True)
1149
  else:
1150
  print(f"❌ Local editing processing failed - IP: {client_ip}, error: {message}", flush=True)
1151
+ return None, t("error_processing_failed", lang).format(message=message), gr.update(visible=False)
1152
 
1153
  except Exception as e:
1154
  print(f"❌ Local editing exception - IP: {client_ip}, error: {str(e)}")
1155
+ return None, t("error_processing_exception", lang).format(error=str(e)), gr.update(visible=False)
1156
 
1157
  # Create Gradio interface
1158
  def create_app():
 
1164
  max-width: 1200px;
1165
  margin: 0 auto;
1166
  }
1167
+ .news-banner-row {
1168
+ margin: 10px auto 15px auto;
1169
+ padding: 0 10px;
1170
+ max-width: 1200px;
1171
+ width: 100% !important;
1172
+ }
1173
+ .news-banner-row .gr-row {
1174
+ display: flex !important;
1175
+ align-items: center !important;
1176
+ width: 100% !important;
1177
+ }
1178
+ .news-banner-row .gr-column:first-child {
1179
+ flex: 1 !important; /* 占据所有剩余空间 */
1180
+ display: flex !important;
1181
+ justify-content: center !important; /* 在其空间内居中 */
1182
+ }
1183
+ .banner-lang-selector {
1184
+ margin-left: auto !important;
1185
+ display: flex !important;
1186
+ justify-content: flex-end !important;
1187
+ align-items: center !important;
1188
+ position: relative !important;
1189
+ z-index: 10 !important;
1190
+ }
1191
+ .banner-lang-selector .gr-dropdown {
1192
+ background: white !important;
1193
+ border: 1px solid #ddd !important;
1194
+ border-radius: 8px !important;
1195
+ padding: 8px 16px !important;
1196
+ font-size: 14px !important;
1197
+ font-weight: 500 !important;
1198
+ color: #333 !important;
1199
+ cursor: pointer !important;
1200
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important;
1201
+ min-width: 140px !important;
1202
+ max-width: 160px !important;
1203
+ transition: all 0.2s ease !important;
1204
+ }
1205
+ .banner-lang-selector .gr-dropdown:hover {
1206
+ border-color: #999 !important;
1207
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15) !important;
1208
+ }
1209
+ @media (max-width: 768px) {
1210
+ .news-banner-row {
1211
+ padding: 0 15px !important;
1212
+ }
1213
+ .news-banner-row .gr-row {
1214
+ display: flex !important;
1215
+ flex-direction: column !important;
1216
+ gap: 10px !important;
1217
+ position: static !important;
1218
+ }
1219
+ .news-banner-row .gr-column:first-child {
1220
+ position: static !important;
1221
+ pointer-events: auto !important;
1222
+ }
1223
+ .banner-lang-selector {
1224
+ margin-left: 0 !important;
1225
+ justify-content: center !important;
1226
+ }
1227
+ }
1228
  .upload-area {
1229
  border: 2px dashed #ccc;
1230
  border-radius: 10px;
 
1253
  """
1254
  ) as app:
1255
 
1256
+ lang_state = gr.State("en")
1257
+
1258
+ # Main title - centered
1259
+ header_title = gr.HTML(f"""
1260
+ <div style="text-align: center; margin: 20px auto 10px auto; max-width: 800px;">
1261
  <h1 style="color: #2c3e50; margin: 0; font-size: 3.5em; font-weight: 800; letter-spacing: 3px; text-shadow: 2px 2px 4px rgba(0,0,0,0.1);">
1262
+ {t('header_title', 'en')}
1263
  </h1>
1264
  </div>
1265
+ """)
1266
 
1267
+ # 🌟 NEW: Multi-Image Editing Announcement Banner with language selector
1268
+ with gr.Row(elem_classes=["news-banner-row"]):
1269
+ with gr.Column(scale=1, min_width=400):
1270
+ news_banner = gr.HTML(f"""
1271
+ <style>
1272
+ @keyframes breathe {{
1273
+ 0%, 100% {{ transform: scale(1); }}
1274
+ 50% {{ transform: scale(1.02); }}
1275
+ }}
1276
+ .breathing-banner {{
1277
+ animation: breathe 3s ease-in-out infinite;
1278
+ }}
1279
+ </style>
1280
+ <div class="breathing-banner" style="
1281
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
1282
+ margin: 0 auto;
1283
+ padding: 8px 40px;
1284
+ border-radius: 20px;
1285
+ max-width: 600px;
1286
+ box-shadow: 0 2px 8px rgba(102, 126, 234, 0.3);
1287
+ text-align: center;
1288
+ width: fit-content;
1289
+ ">
1290
+ <span style="color: white; font-weight: 600; font-size: 1.0em;">
1291
+ {t('news_banner_prefix', 'en')}
1292
+ <a href="https://huggingface.co/spaces/Selfit/Multi-Image-Edit" target="_blank" style="
1293
+ color: white;
1294
+ text-decoration: none;
1295
+ border-bottom: 1px solid rgba(255,255,255,0.5);
1296
+ transition: all 0.3s ease;
1297
+ " onmouseover="this.style.borderBottom='1px solid white'"
1298
+ onmouseout="this.style.borderBottom='1px solid rgba(255,255,255,0.5)'">
1299
+ {t('news_banner_link', 'en')}
1300
+ </a>
1301
+ </span>
1302
+ </div>
1303
+ """)
1304
+
1305
+ with gr.Column(scale=0, min_width=160, elem_classes=["banner-lang-selector"]):
1306
+ lang_dropdown = gr.Dropdown(
1307
+ choices=[
1308
+ ("English", "en"),
1309
+ ("中文", "zh"),
1310
+ ("Español", "es"),
1311
+ ("Français", "fr"),
1312
+ ("Deutsch", "de"),
1313
+ ("Italiano", "it"),
1314
+ ("日本語", "ja"),
1315
+ ("Русский", "ru"),
1316
+ ("العربية", "ar"),
1317
+ ("Nederlands", "nl"),
1318
+ ("Indonesian", "id")
1319
+ ],
1320
+ value="en",
1321
+ label="🌐",
1322
+ show_label=True,
1323
+ interactive=True,
1324
+ container=False
1325
+ )
1326
 
1327
+ with gr.Tabs() as tabs:
1328
+ with gr.Tab(t("global_editor_tab", "en")) as global_tab:
1329
  with gr.Row():
1330
  with gr.Column(scale=1):
1331
+ upload_image_header = gr.Markdown(t("upload_image_header", "en"))
1332
  input_image = gr.Image(
1333
+ label=t("upload_image_label", "en"),
1334
  type="pil",
1335
  height=512,
1336
  elem_classes=["upload-area"]
1337
  )
1338
 
1339
+ editing_instructions_header = gr.Markdown(t("editing_instructions_header", "en"))
1340
  prompt_input = gr.Textbox(
1341
+ label=t("prompt_input_label", "en"),
1342
+ placeholder=t("prompt_input_placeholder", "en"),
1343
  lines=3,
1344
  max_lines=5
1345
  )
1346
 
1347
  edit_button = gr.Button(
1348
+ t("start_editing_button", "en"),
1349
  variant="primary",
1350
  size="lg"
1351
  )
1352
 
1353
  with gr.Column(scale=1):
1354
+ editing_result_header = gr.Markdown(t("editing_result_header", "en"))
1355
  output_image = gr.Image(
1356
+ label=t("output_image_label", "en"),
1357
  height=320,
1358
  elem_classes=["result-area"]
1359
  )
1360
 
1361
  use_as_input_btn = gr.Button(
1362
+ t("use_as_input_button", "en"),
1363
  variant="secondary",
1364
  size="sm",
1365
  elem_classes=["use-as-input-btn"]
1366
  )
1367
 
1368
  status_output = gr.Textbox(
1369
+ label=t("status_output_label", "en"),
1370
  lines=2,
1371
  max_lines=3,
1372
  interactive=False
 
1374
 
1375
  action_buttons = gr.HTML(visible=False)
1376
 
1377
+ prompt_examples_header = gr.Markdown(t("prompt_examples_header", "en"))
1378
  with gr.Row():
1379
  example_prompts = [
1380
  "Set the background to a grand opera stage with red curtains",
 
1395
 
1396
  edit_button.click(
1397
  fn=edit_image_interface,
1398
+ inputs=[input_image, prompt_input, lang_state],
1399
  outputs=[output_image, status_output, action_buttons],
1400
  show_progress=True,
1401
  concurrency_limit=10,
 
1413
  outputs=[input_image]
1414
  )
1415
 
1416
+ with gr.Tab(t("local_inpaint_tab", "en")) as local_tab:
1417
  with gr.Row():
1418
  with gr.Column(scale=1):
1419
+ upload_and_draw_mask_header = gr.Markdown(t("upload_and_draw_mask_header", "en"))
1420
  local_input_image = gr.ImageEditor(
1421
+ label=t("upload_and_draw_mask_label", "en"),
1422
  type="pil",
1423
  height=512,
1424
  brush=gr.Brush(colors=["#ff0000"], default_size=180),
1425
  elem_classes=["upload-area"]
1426
  )
1427
 
1428
+ reference_image_header = gr.Markdown(t("reference_image_header", "en"))
1429
  local_reference_image = gr.Image(
1430
+ label=t("reference_image_label", "en"),
1431
  type="pil",
1432
  height=256
1433
  )
1434
 
1435
+ local_editing_instructions_header = gr.Markdown(t("editing_instructions_header", "en"))
1436
  local_prompt_input = gr.Textbox(
1437
+ label=t("local_prompt_input_label", "en"),
1438
+ placeholder=t("local_prompt_input_placeholder", "en"),
1439
  lines=3,
1440
  max_lines=5
1441
  )
1442
 
1443
  local_edit_button = gr.Button(
1444
+ t("start_local_editing_button", "en"),
1445
  variant="primary",
1446
  size="lg"
1447
  )
1448
 
1449
  with gr.Column(scale=1):
1450
+ local_editing_result_header = gr.Markdown(t("editing_result_header", "en"))
1451
  local_output_image = gr.Image(
1452
+ label=t("local_output_image_label", "en"),
1453
  height=320,
1454
  elem_classes=["result-area"]
1455
  )
1456
 
1457
  local_use_as_input_btn = gr.Button(
1458
+ t("use_as_input_button", "en"),
1459
  variant="secondary",
1460
  size="sm",
1461
  elem_classes=["use-as-input-btn"]
1462
  )
1463
 
1464
  local_status_output = gr.Textbox(
1465
+ label=t("status_output_label", "en"),
1466
  lines=2,
1467
  max_lines=3,
1468
  interactive=False
 
1472
 
1473
  local_edit_button.click(
1474
  fn=local_edit_interface,
1475
+ inputs=[local_input_image, local_prompt_input, local_reference_image, lang_state],
1476
  outputs=[local_output_image, local_status_output, local_action_buttons],
1477
  show_progress=True,
1478
  concurrency_limit=8,
 
1495
  )
1496
 
1497
  # Local inpaint example
1498
+ local_inpaint_example_header = gr.Markdown(t("local_inpaint_example_header", "en"))
1499
 
1500
  def load_local_example():
1501
  """Load panda to cat transformation example - simplified, mask handled in backend"""
 
1536
  return None, None, "EXAMPLE_PANDA_CAT_Transform the panda head into a cute cat head, keeping the body"
1537
 
1538
  # Example display
1539
+ panda_to_cat_example_header = gr.Markdown(t("panda_to_cat_example_header", "en"))
1540
  with gr.Row():
1541
  with gr.Column(scale=2):
1542
  # Preview images for local example
1543
  with gr.Row():
1544
  try:
1545
+ gr.Image("datas/panda01.jpeg", label=t("main_image_label", "en"), height=120, width=120, show_label=True, interactive=False)
1546
+ gr.Image("datas/panda01m.jpeg", label=t("mask_label", "en"), height=120, width=120, show_label=True, interactive=False)
1547
+ gr.Image("datas/cat01.webp", label=t("reference_label", "en"), height=120, width=120, show_label=True, interactive=False)
1548
  except:
1549
  gr.Markdown("*Preview images not available*")
1550
+ panda_example_note = gr.Markdown(t("panda_example_note", "en"))
1551
  with gr.Column(scale=1):
1552
+ load_panda_example_button = gr.Button(
1553
+ t("load_panda_example_button", "en"),
1554
  size="lg",
1555
  variant="secondary"
1556
+ )
1557
+ load_panda_example_button.click(
1558
  fn=load_local_example,
1559
  outputs=[local_input_image, local_reference_image, local_prompt_input]
1560
  )
1561
 
1562
  # Add a refresh button to fix UI state issues
1563
+ refresh_editor_button = gr.Button(
1564
+ t("refresh_editor_button", "en"),
1565
  size="sm",
1566
  variant="secondary"
1567
+ )
1568
+ refresh_editor_button.click(
1569
  fn=lambda: gr.update(),
1570
  outputs=[local_input_image]
1571
  )
1572
 
1573
  # SEO Content Section
1574
+ seo_html = gr.HTML()
1575
+
1576
+ def get_seo_html(lang):
1577
+ return f"""
1578
  <div style="width: 100%; margin: 50px 0; padding: 0 20px;">
1579
 
1580
  <div style="text-align: center; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 40px; border-radius: 20px; margin: 40px 0;">
1581
  <h2 style="margin: 0 0 20px 0; font-size: 2.2em; font-weight: 700;">
1582
+ &#127912; {t('seo_unlimited_title', lang)}
1583
  </h2>
1584
  <p style="margin: 0 0 25px 0; font-size: 1.2em; opacity: 0.95; line-height: 1.6;">
1585
+ {t('seo_unlimited_desc', lang)}
 
1586
  </p>
1587
 
1588
  <div style="display: flex; justify-content: center; gap: 25px; flex-wrap: wrap; margin: 30px 0;">
 
1604
  border: none;
1605
  transform: scale(1);
1606
  " onmouseover="this.style.transform='scale(1.05)'" onmouseout="this.style.transform='scale(1)'">
1607
+ &#128640; {t('seo_unlimited_button', lang)}
1608
  </a>
1609
 
1610
  </div>
1611
 
1612
  <p style="color: rgba(255,255,255,0.9); font-size: 1em; margin: 20px 0 0 0;">
1613
+ {t('seo_unlimited_footer', lang)}
1614
  </p>
1615
  </div>
1616
 
1617
  <div style="text-align: center; margin: 25px auto; background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); padding: 35px; border-radius: 20px; box-shadow: 0 10px 30px rgba(0,0,0,0.1);">
1618
  <h2 style="color: #2c3e50; margin: 0 0 20px 0; font-size: 1.9em; font-weight: 700;">
1619
+ &#11088; {t('seo_professional_title', lang)}
1620
  </h2>
1621
  <p style="color: #555; font-size: 1.1em; line-height: 1.6; margin: 0 0 20px 0; padding: 0 20px;">
1622
+ {t('seo_professional_desc', lang)}
 
 
1623
  </p>
1624
  </div>
1625
 
 
1627
 
1628
  <div style="background: white; padding: 30px; border-radius: 15px; box-shadow: 0 5px 20px rgba(0,0,0,0.08); border-left: 5px solid #e74c3c;">
1629
  <h3 style="color: #e74c3c; margin: 0 0 15px 0; font-size: 1.4em; font-weight: 600;">
1630
+ &#127919; {t('seo_feature1_title', lang)}
1631
  </h3>
1632
  <p style="color: #666; margin: 0; line-height: 1.6; font-size: 1em;">
1633
+ {t('seo_feature1_desc', lang)}
 
1634
  </p>
1635
  </div>
1636
 
1637
  <div style="background: white; padding: 30px; border-radius: 15px; box-shadow: 0 5px 20px rgba(0,0,0,0.08); border-left: 5px solid #3498db;">
1638
  <h3 style="color: #3498db; margin: 0 0 15px 0; font-size: 1.4em; font-weight: 600;">
1639
+ 🔓 {t('seo_feature2_title', lang)}
1640
  </h3>
1641
  <p style="color: #666; margin: 0; line-height: 1.6; font-size: 1em;">
1642
+ {t('seo_feature2_desc', lang)}
 
1643
  </p>
1644
  </div>
1645
 
1646
  <div style="background: white; padding: 30px; border-radius: 15px; box-shadow: 0 5px 20px rgba(0,0,0,0.08); border-left: 5px solid #27ae60;">
1647
  <h3 style="color: #27ae60; margin: 0 0 15px 0; font-size: 1.4em; font-weight: 600;">
1648
+ &#9889; {t('seo_feature3_title', lang)}
1649
  </h3>
1650
  <p style="color: #666; margin: 0; line-height: 1.6; font-size: 1em;">
1651
+ {t('seo_feature3_desc', lang)}
 
1652
  </p>
1653
  </div>
1654
 
1655
  <div style="background: white; padding: 30px; border-radius: 15px; box-shadow: 0 5px 20px rgba(0,0,0,0.08); border-left: 5px solid #9b59b6;">
1656
  <h3 style="color: #9b59b6; margin: 0 0 15px 0; font-size: 1.4em; font-weight: 600;">
1657
+ &#127912; {t('seo_feature4_title', lang)}
1658
  </h3>
1659
  <p style="color: #666; margin: 0; line-height: 1.6; font-size: 1em;">
1660
+ {t('seo_feature4_desc', lang)}
 
1661
  </p>
1662
  </div>
1663
 
1664
  <div style="background: white; padding: 30px; border-radius: 15px; box-shadow: 0 5px 20px rgba(0,0,0,0.08); border-left: 5px solid #f39c12;">
1665
  <h3 style="color: #f39c12; margin: 0 0 15px 0; font-size: 1.4em; font-weight: 600;">
1666
+ &#128142; {t('seo_feature5_title', lang)}
1667
  </h3>
1668
  <p style="color: #666; margin: 0; line-height: 1.6; font-size: 1em;">
1669
+ {t('seo_feature5_desc', lang)}
 
1670
  </p>
1671
  </div>
1672
 
1673
  <div style="background: white; padding: 30px; border-radius: 15px; box-shadow: 0 5px 20px rgba(0,0,0,0.08); border-left: 5px solid #34495e;">
1674
  <h3 style="color: #34495e; margin: 0 0 15px 0; font-size: 1.4em; font-weight: 600;">
1675
+ 🌍 {t('seo_feature6_title', lang)}
1676
  </h3>
1677
  <p style="color: #666; margin: 0; line-height: 1.6; font-size: 1em;">
1678
+ {t('seo_feature6_desc', lang)}
 
1679
  </p>
1680
  </div>
1681
 
 
1683
 
1684
  <div style="background: linear-gradient(135deg, #ff9a9e 0%, #fecfef 50%, #fecfef 100%); padding: 30px; border-radius: 15px; margin: 40px 0;">
1685
  <h3 style="color: #8b5cf6; text-align: center; margin: 0 0 25px 0; font-size: 1.5em; font-weight: 700;">
1686
+ &#128161; {t('seo_protips_title', lang)}
1687
  </h3>
1688
  <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 18px;">
1689
 
1690
  <div style="background: rgba(255,255,255,0.85); padding: 18px; border-radius: 12px;">
1691
+ <strong style="color: #8b5cf6; font-size: 1.1em;">📝 {t('seo_protip1_title', lang)}</strong>
1692
+ <p style="color: #555; margin: 5px 0 0 0; line-height: 1.5;">{t('seo_protip1_desc', lang)}</p>
1693
  </div>
1694
 
1695
  <div style="background: rgba(255,255,255,0.85); padding: 18px; border-radius: 12px;">
1696
+ <strong style="color: #8b5cf6; font-size: 1.1em;">&#127919; {t('seo_protip2_title', lang)}</strong>
1697
+ <p style="color: #555; margin: 5px 0 0 0; line-height: 1.5;">{t('seo_protip2_desc', lang)}</p>
1698
  </div>
1699
 
1700
  <div style="background: rgba(255,255,255,0.85); padding: 18px; border-radius: 12px;">
1701
+ <strong style="color: #8b5cf6; font-size: 1.1em;">&#9889; {t('seo_protip3_title', lang)}</strong>
1702
+ <p style="color: #555; margin: 5px 0 0 0; line-height: 1.5;">{t('seo_protip3_desc', lang)}</p>
1703
  </div>
1704
 
1705
  <div style="background: rgba(255,255,255,0.85); padding: 18px; border-radius: 12px;">
1706
+ <strong style="color: #8b5cf6; font-size: 1.1em;">&#128444; {t('seo_protip4_title', lang)}</strong>
1707
+ <p style="color: #555; margin: 5px 0 0 0; line-height: 1.5;">{t('seo_protip4_desc', lang)}</p>
1708
  </div>
1709
 
1710
  </div>
 
1712
 
1713
  <div style="text-align: center; margin: 25px auto; background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%); padding: 35px; border-radius: 20px; box-shadow: 0 10px 30px rgba(0,0,0,0.1);">
1714
  <h2 style="color: #2c3e50; margin: 0 0 20px 0; font-size: 1.8em; font-weight: 700;">
1715
+ &#128640; {t('seo_needs_title', lang)}
1716
  </h2>
1717
  <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 20px; margin: 25px 0; text-align: left;">
1718
 
1719
  <div style="background: rgba(255,255,255,0.8); padding: 20px; border-radius: 12px;">
1720
+ <h4 style="color: #e74c3c; margin: 0 0 10px 0;">🎨 {t('seo_needs_art_title', lang)}</h4>
1721
  <ul style="color: #555; margin: 0; padding-left: 18px; line-height: 1.6;">
1722
+ <li>{t('seo_needs_art_item1', lang)}</li>
1723
+ <li>{t('seo_needs_art_item2', lang)}</li>
1724
+ <li>{t('seo_needs_art_item3', lang)}</li>
1725
+ <li>{t('seo_needs_art_item4', lang)}</li>
1726
  </ul>
1727
  </div>
1728
 
1729
  <div style="background: rgba(255,255,255,0.8); padding: 20px; border-radius: 12px;">
1730
+ <h4 style="color: #3498db; margin: 0 0 10px 0;">📸 {t('seo_needs_photo_title', lang)}</h4>
1731
  <ul style="color: #555; margin: 0; padding-left: 18px; line-height: 1.6;">
1732
+ <li>{t('seo_needs_photo_item1', lang)}</li>
1733
+ <li>{t('seo_needs_photo_item2', lang)}</li>
1734
+ <li>{t('seo_needs_photo_item3', lang)}</li>
1735
+ <li>{t('seo_needs_photo_item4', lang)}</li>
1736
  </ul>
1737
  </div>
1738
 
1739
  <div style="background: rgba(255,255,255,0.8); padding: 20px; border-radius: 12px;">
1740
+ <h4 style="color: #27ae60; margin: 0 0 10px 0;">🛍️ {t('seo_needs_ecom_title', lang)}</h4>
1741
  <ul style="color: #555; margin: 0; padding-left: 18px; line-height: 1.6;">
1742
+ <li>{t('seo_needs_ecom_item1', lang)}</li>
1743
+ <li>{t('seo_needs_ecom_item2', lang)}</li>
1744
+ <li>{t('seo_needs_ecom_item3', lang)}</li>
1745
+ <li>{t('seo_needs_ecom_item4', lang)}</li>
1746
  </ul>
1747
  </div>
1748
 
1749
  <div style="background: rgba(255,255,255,0.8); padding: 20px; border-radius: 12px;">
1750
+ <h4 style="color: #9b59b6; margin: 0 0 10px 0;">📱 {t('seo_needs_social_title', lang)}</h4>
1751
  <ul style="color: #555; margin: 0; padding-left: 18px; line-height: 1.6;">
1752
+ <li>{t('seo_needs_social_item1', lang)}</li>
1753
+ <li>{t('seo_needs_social_item2', lang)}</li>
1754
+ <li>{t('seo_needs_social_item3', lang)}</li>
1755
+ <li>{t('seo_needs_social_item4', lang)}</li>
1756
  </ul>
1757
  </div>
1758
 
 
1760
  </div>
1761
 
1762
  </div>
1763
+ """
1764
+
1765
+ all_ui_components = [
1766
+ header_title, news_banner,
1767
+ global_tab, upload_image_header, input_image, editing_instructions_header, prompt_input, edit_button,
1768
+ editing_result_header, output_image, use_as_input_btn, status_output, prompt_examples_header,
1769
+ local_tab, upload_and_draw_mask_header, local_input_image, reference_image_header, local_reference_image,
1770
+ local_editing_instructions_header, local_prompt_input, local_edit_button, local_editing_result_header,
1771
+ local_output_image, local_use_as_input_btn, local_status_output, local_inpaint_example_header,
1772
+ panda_to_cat_example_header, panda_example_note, load_panda_example_button, refresh_editor_button,
1773
+ seo_html,
1774
+ ]
1775
+
1776
+ def update_ui_lang(lang):
1777
+ return {
1778
+ header_title: gr.update(value=f"""
1779
+ <div style="text-align: center; margin: 20px auto 10px auto; max-width: 800px;">
1780
+ <h1 style="color: #2c3e50; margin: 0; font-size: 3.5em; font-weight: 800; letter-spacing: 3px; text-shadow: 2px 2px 4px rgba(0,0,0,0.1);">
1781
+ {t('header_title', lang)}
1782
+ </h1>
1783
+ </div>"""),
1784
+ news_banner: gr.update(value=f"""
1785
+ <style>
1786
+ @keyframes breathe {{ 0%, 100% {{ transform: scale(1); }} 50% {{ transform: scale(1.02); }} }}
1787
+ .breathing-banner {{ animation: breathe 3s ease-in-out infinite; }}
1788
+ </style>
1789
+ <div class="breathing-banner" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); margin: 5px auto 5px auto; padding: 6px 40px; border-radius: 20px; max-width: 700px; box-shadow: 0 2px 8px rgba(102, 126, 234, 0.3); text-align: center;">
1790
+ <span style="color: white; font-weight: 600; font-size: 1.0em;">
1791
+ {t('news_banner_prefix', lang)}
1792
+ <a href="https://huggingface.co/spaces/Selfit/Multi-Image-Edit" target="_blank" style="color: white; text-decoration: none; border-bottom: 1px solid rgba(255,255,255,0.5); transition: all 0.3s ease;" onmouseover="this.style.borderBottom='1px solid white'" onmouseout="this.style.borderBottom='1px solid rgba(255,255,255,0.5)'">
1793
+ {t('news_banner_link', lang)}
1794
+ </a>
1795
+ </span>
1796
+ </div>"""),
1797
+ global_tab: gr.update(label=t("global_editor_tab", lang)),
1798
+ upload_image_header: gr.update(value=t("upload_image_header", lang)),
1799
+ input_image: gr.update(label=t("upload_image_label", lang)),
1800
+ editing_instructions_header: gr.update(value=t("editing_instructions_header", lang)),
1801
+ prompt_input: gr.update(label=t("prompt_input_label", lang), placeholder=t("prompt_input_placeholder", lang)),
1802
+ edit_button: gr.update(value=t("start_editing_button", lang)),
1803
+ editing_result_header: gr.update(value=t("editing_result_header", lang)),
1804
+ output_image: gr.update(label=t("output_image_label", lang)),
1805
+ use_as_input_btn: gr.update(value=t("use_as_input_button", lang)),
1806
+ status_output: gr.update(label=t("status_output_label", lang)),
1807
+ prompt_examples_header: gr.update(value=t("prompt_examples_header", lang)),
1808
+ local_tab: gr.update(label=t("local_inpaint_tab", lang)),
1809
+ upload_and_draw_mask_header: gr.update(value=t("upload_and_draw_mask_header", lang)),
1810
+ local_input_image: gr.update(label=t("upload_and_draw_mask_label", lang)),
1811
+ reference_image_header: gr.update(value=t("reference_image_header", lang)),
1812
+ local_reference_image: gr.update(label=t("reference_image_label", lang)),
1813
+ local_editing_instructions_header: gr.update(value=t("editing_instructions_header", lang)),
1814
+ local_prompt_input: gr.update(label=t("local_prompt_input_label", lang), placeholder=t("local_prompt_input_placeholder", lang)),
1815
+ local_edit_button: gr.update(value=t("start_local_editing_button", lang)),
1816
+ local_editing_result_header: gr.update(value=t("editing_result_header", lang)),
1817
+ local_output_image: gr.update(label=t("local_output_image_label", lang)),
1818
+ local_use_as_input_btn: gr.update(value=t("use_as_input_button", lang)),
1819
+ local_status_output: gr.update(label=t("status_output_label", lang)),
1820
+ local_inpaint_example_header: gr.update(value=t("local_inpaint_example_header", lang)),
1821
+ panda_to_cat_example_header: gr.update(value=t("panda_to_cat_example_header", lang)),
1822
+ panda_example_note: gr.update(value=t("panda_example_note", lang)),
1823
+ load_panda_example_button: gr.update(value=t("load_panda_example_button", lang)),
1824
+ refresh_editor_button: gr.update(value=t("refresh_editor_button", lang)),
1825
+ seo_html: gr.update(value=get_seo_html(lang)),
1826
+ }
1827
+
1828
+ def on_lang_change(lang):
1829
+ return lang, *update_ui_lang(lang).values()
1830
+
1831
+ lang_dropdown.change(
1832
+ on_lang_change,
1833
+ inputs=[lang_dropdown],
1834
+ outputs=[lang_state] + all_ui_components
1835
+ )
1836
+
1837
+ # IP query state for async loading
1838
+ ip_query_state = gr.State({"status": "pending", "ip": None, "lang": "en"})
1839
+
1840
+ def on_load_immediate(request: gr.Request):
1841
+ """
1842
+ Load page with language based on robust IP detection
1843
+
1844
+ Features:
1845
+ - Multiple fallback layers for IP extraction
1846
+ - Comprehensive error handling
1847
+ - Always returns valid language (defaults to English)
1848
+ - Detailed logging for debugging
1849
+ """
1850
+ # Extract client IP with multiple fallback methods
1851
+ client_ip = None
1852
+ try:
1853
+ # Primary method: direct client host
1854
+ client_ip = request.client.host
1855
+
1856
+ # Secondary method: check forwarded headers
1857
+ headers = dict(request.headers) if hasattr(request, 'headers') else {}
1858
+ x_forwarded_for = headers.get('x-forwarded-for') or headers.get('X-Forwarded-For')
1859
+ if x_forwarded_for:
1860
+ # Take first IP from comma-separated list
1861
+ client_ip = x_forwarded_for.split(',')[0].strip()
1862
+
1863
+ # Alternative headers
1864
+ if not client_ip or client_ip in ["127.0.0.1", "localhost"]:
1865
+ client_ip = headers.get('x-real-ip') or headers.get('X-Real-IP') or client_ip
1866
+
1867
+ except Exception as e:
1868
+ print(f"Error extracting client IP: {e}, using default")
1869
+ client_ip = "unknown"
1870
+
1871
+ # Validate extracted IP
1872
+ if not client_ip:
1873
+ client_ip = "unknown"
1874
+
1875
+ print(f"Loading page for IP: {client_ip}")
1876
+
1877
+ # Determine language with robust error handling
1878
+ try:
1879
+ # Check if IP is already cached (second+ visit)
1880
+ if client_ip in IP_Country_Cache:
1881
+ # Use cached data - very fast
1882
+ cached_lang = get_lang_from_ip(client_ip)
1883
+ # Validate cached language
1884
+ if cached_lang and len(cached_lang) == 2:
1885
+ print(f"Using cached language: {cached_lang} for IP: {client_ip}")
1886
+ query_state = {"ip": client_ip, "cached": True}
1887
+ return cached_lang, cached_lang, query_state, *update_ui_lang(cached_lang).values()
1888
+
1889
+ # First visit: Query IP and determine language (max 3s timeout built-in)
1890
+ print(f"First visit - detecting language for IP: {client_ip}")
1891
+ detected_lang = get_lang_from_ip(client_ip)
1892
+
1893
+ # Double-check the detected language is valid
1894
+ if not detected_lang or len(detected_lang) != 2:
1895
+ print(f"Invalid detected language '{detected_lang}', using English")
1896
+ detected_lang = "en"
1897
+
1898
+ print(f"First visit - Final language: {detected_lang} for IP: {client_ip}")
1899
+ query_state = {"ip": client_ip, "cached": False}
1900
+ return detected_lang, detected_lang, query_state, *update_ui_lang(detected_lang).values()
1901
+
1902
+ except Exception as e:
1903
+ # Ultimate fallback - always works
1904
+ print(f"Critical error in language detection for {client_ip}: {e}")
1905
+ print("Using English as ultimate fallback")
1906
+ query_state = {"ip": client_ip or "unknown", "cached": False, "error": str(e)}
1907
+ return "en", "en", query_state, *update_ui_lang("en").values()
1908
+
1909
+
1910
+ app.load(
1911
+ on_load_immediate,
1912
+ inputs=None,
1913
+ outputs=[lang_state, lang_dropdown, ip_query_state] + all_ui_components,
1914
+ )
1915
+
1916
  return app
1917
 
1918
  if __name__ == "__main__":
i18n/ar.json ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "app_title": "محرر الصور بالذكاء الاصطناعي",
3
+ "header_title": "🎨 محرر الصور بالذكاء الاصطناعي",
4
+ "news_banner_prefix": "🚀 أخبار: ",
5
+ "news_banner_link": "أول أداة لتحرير الصور المتعددة في العالم →",
6
+ "global_editor_tab": "🌍 تحرير شامل",
7
+ "upload_image_header": "### 📸 رفع صورة",
8
+ "upload_image_label": "اختر صورة لتحريرها",
9
+ "editing_instructions_header": "### ✍️ تعليمات التحرير",
10
+ "prompt_input_label": "أدخل وصف التحرير",
11
+ "prompt_input_placeholder": "مثال: تغيير الخلفية إلى شاطئ، إضافة قوس قزح، إزالة الخلفية، إلخ...",
12
+ "start_editing_button": "🚀 ابدأ التحرير",
13
+ "editing_result_header": "### 🎯 نتيجة التحرير",
14
+ "output_image_label": "الصورة المعدلة",
15
+ "use_as_input_button": "🔄 استخدام كمدخل",
16
+ "status_output_label": "حالة المعالجة",
17
+ "prompt_examples_header": "### 💡 أمثلة على الأوصاف",
18
+ "local_inpaint_tab": "🖌️ تعديل موضعي",
19
+ "upload_and_draw_mask_header": "### 📸 رفع صورة ورسم قناع",
20
+ "upload_and_draw_mask_label": "ارفع صورة وارسم قناعًا",
21
+ "reference_image_header": "### 🖼️ صورة مرجعية (اختياري)",
22
+ "reference_image_label": "رفع صورة مرجعية (اختياري)",
23
+ "local_prompt_input_label": "أدخل وصف التحرير الموضعي",
24
+ "local_prompt_input_placeholder": "مثال: تغيير لون الشعر في المنطقة المحددة إلى الأشقر، إضافة نمط للكائن المحدد، تغيير لون المنطقة المحددة، إلخ...",
25
+ "start_local_editing_button": "🎯 بدء التحرير الموضعي",
26
+ "local_output_image_label": "الصورة المعدلة موضعيًا",
27
+ "local_inpaint_example_header": "### 💡 مثال على التعديل الموضعي",
28
+ "panda_to_cat_example_header": "#### 🐼➡️🐱 مثال: تحويل الباندا إلى قطة",
29
+ "main_image_label": "الصورة الرئيسية",
30
+ "mask_label": "القناع",
31
+ "reference_label": "صورة مرجعية",
32
+ "panda_example_note": "**الوصف**: let the cat ride on the panda\n**ملاحظة**: سيتم تطبيق القناع تلقائيًا عند إرسال هذا المثال",
33
+ "load_panda_example_button": "🎨 تحميل مثال الباندا",
34
+ "refresh_editor_button": "🔄 تحديث محرر الصور",
35
+
36
+ "error_upload_first": "يرجى رفع صورة أولاً",
37
+ "error_enter_prompt": "يرجى إدخال وصف للتحرير",
38
+ "error_prompt_too_short": "❌ يجب أن يكون وصف التحرير أطول من 3 أحرف",
39
+ "error_request_processing": "❌ خطأ في معالجة الطلب",
40
+ "error_free_limit_reached": "❌ لقد وصلت إلى الحد الأقصى من التوليد المجاني على Hugging Face. يرجى زيارة https://omnicreator.net/#generator للتوليد غير المحدود",
41
+ "error_free_limit_wait": "❌ لقد وصلت إلى الحد الأقصى من التوليد المجاني على Hugging Face. يرجى زيارة https://omnicreator.net/#generator للتوليد غير المحدود، أو الانتظار {wait_minutes_int} دقائق والمحاولة مرة أخرى",
42
+ "status_checking_result": "جاري فحص الصورة الناتجة...",
43
+ "status_applying_filter": "جاري تطبيق فلتر المحتوى...",
44
+ "warning_content_filter": "⚠️ تم تطبيق فلتر المحتوى وفقًا لإرشادات مجتمع Hugging Face. للحصول على حرية إبداعية غير محدودة، يرجى زيارة موقعنا الرسمي https://omnicreator.net/#generator",
45
+ "warning_content_review": "⚠️ مطلوب مراجعة المحتوى. يرجى زيارة https://omnicreator.net/#generator لتجربة أفضل",
46
+ "status_completed_message": "✅ {message}",
47
+ "status_processing_completed": "اكتملت المعالجة",
48
+ "error_processing_failed": "❌ {message}",
49
+ "error_processing_exception": "❌ حدث خطأ أثناء المعالجة: {error}",
50
+ "error_upload_and_draw": "يرجى رفع صورة وتحديد المنطقة المراد تحريرها",
51
+ "error_draw_on_image": "يرجى الرسم على الصورة لتحديد المنطقة التي تريد تحريرها",
52
+ "error_no_image_found": "❌ لم يتم العثور على صورة. يرجى رفع صورة أولاً.",
53
+
54
+ "seo_unlimited_title": "توليد وتحرير صور غير محدود بالذكاء الاصطناعي",
55
+ "seo_unlimited_desc": "جرب الحرية المطلقة في إنشاء الصور بالذكاء الاصطناعي! قم بتوليد وتحرير الصور بلا ��دود أو قيود، وأطلق العنان لخيالك من خلال منصتنا المتقدمة لتحرير الصور بالذكاء الاصطناعي.",
56
+ "seo_unlimited_button": "احصل على وصول غير محدود الآن",
57
+ "seo_unlimited_footer": "انضم إلى آلاف المبدعين الذين يثقون في Omni Creator لتوليد صور غير محدود بالذكاء الاصطناعي!",
58
+ "seo_professional_title": "محرر صور احترافي بالذكاء الاصطناعي - غير محدود",
59
+ "seo_professional_desc": "حوّل رؤيتك الإبداعية إلى حقيقة مع منصتنا المتقدمة لتحرير الصور بالذكاء الاصطناعي. سواء كنت تنشئ فنًا أو تحرر صورًا أو تصمم محتوى أو تعمل مع أي نوع من الصور - فإن ذكاءنا الاصطناعي القوي يزيل كل الحدود ليمنحك حرية إبداعية كاملة.",
60
+ "seo_feature1_title": "توليد غير محدود",
61
+ "seo_feature1_desc": "يتمتع المستخدمون المميزون بتوليد صور غير محدود، بدون حدود يومية أو قيود على المعدل أو المحتوى. أنشئ العديد من الصور كما تريد، في أي وقت وفي أي مكان.",
62
+ "seo_feature2_title": "حرية إبداعية",
63
+ "seo_feature2_desc": "قم بتوليد وتحرير أي نوع من المحتوى بحرية إبداعية كاملة وبلا حدود لخيالك. إمكانيات لا حصر لها للفنانين والمصممين ومنشئي المحتوى.",
64
+ "seo_feature3_title": "معالجة فائقة السرعة",
65
+ "seo_feature3_desc": "توفر البنية التحتية المتقدمة للذكاء الاصطناعي نتائج عالية الجودة في ثوانٍ. لا قوائم انتظار، لا تأخير في المعالجة - فقط تحرير فوري للصور على المستوى الاحترافي.",
66
+ "seo_feature4_title": "أدوات تحرير متقدمة",
67
+ "seo_feature4_desc": "تحويلات شاملة، تعديلات موضعية دقيقة، نقل الأسلوب، إزالة الكائنات، استبدال الخلفية، وعشرات من ميزات التحرير الاحترافية الأخرى.",
68
+ "seo_feature5_title": "جودة استثنائية",
69
+ "seo_feature5_desc": "تقدم نماذج الذكاء الاصطناعي الحديثة المدربة على ملايين الصور جودة وواقعية استثنائية. نتائج احترافية مناسبة للاستخدام التجاري والمشاريع الراقية.",
70
+ "seo_feature6_title": "دعم متعدد الوسائط",
71
+ "seo_feature6_desc": "دعم لجميع تنسيقات الصور والأنماط وحالات الاستخدام. من الصور الشخصية الواقعية إلى الإبداعات الفنية، ومن تصوير المنتجات إلى الفن الرقمي - نحن نتعامل مع كل شيء.",
72
+ "seo_protips_title": "نصائح احترافية للحصول على أفضل النتائج",
73
+ "seo_protip1_title": "أوصاف واضحة:",
74
+ "seo_protip1_desc": "استخدم أوصافًا مفصلة ومحددة للحصول على نتائج أفضل. صف الألوان والأسلوب والإضاءة والتكوين بوضوح.",
75
+ "seo_protip2_title": "التحرير الموضعي:",
76
+ "seo_protip2_desc": "استخدم ضربات فرشاة دقيقة لتحديد المناطق المراد تحريرها موضعيًا. غالبًا ما تؤدي التعديلات الأصغر والأكثر تركيزًا إلى نتائج أفضل.",
77
+ "seo_protip3_title": "عملية تكرارية:",
78
+ "seo_protip3_desc": "استخدم ميزة 'استخدام كمدخل' لتحسين النتائج. يمكن أن تؤدي التكرارات المتعددة إلى تحويلات معقدة.",
79
+ "seo_protip4_title": "جودة الصورة:",
80
+ "seo_protip4_desc": "عادةً ما تؤدي الصور المدخلة ذات الدقة الأعلى (حتى 10 ميجابايت) إلى تعديلات أفضل وتفاصيل أدق.",
81
+ "seo_needs_title": "لكل حاجة إبداعية",
82
+ "seo_needs_art_title": "الفن الرقمي",
83
+ "seo_needs_art_item1": "تصميم الشخصيات",
84
+ "seo_needs_art_item2": "فن المفاهيم",
85
+ "seo_needs_art_item3": "نقل الأسلوب",
86
+ "seo_needs_art_item4": "تأثيرات فنية",
87
+ "seo_needs_photo_title": "التصوير الفوتوغرافي",
88
+ "seo_needs_photo_item1": "استبدال الخلفية",
89
+ "seo_needs_photo_item2": "إزالة الكائنات",
90
+ "seo_needs_photo_item3": "تعديل الإضاءة",
91
+ "seo_needs_photo_item4": "تحسين الصور الشخصية",
92
+ "seo_needs_ecom_title": "التجارة الإلكترونية",
93
+ "seo_needs_ecom_item1": "تصوير المنتجات",
94
+ "seo_needs_ecom_item2": "صور نمط الحياة",
95
+ "seo_needs_ecom_item3": "تغييرات الألوان",
96
+ "seo_needs_ecom_item4": "استبدال المشهد",
97
+ "seo_needs_social_title": "وسائل التواصل الاجتماعي",
98
+ "seo_needs_social_item1": "إنشاء المحتوى",
99
+ "seo_needs_social_item2": "إنشاء الميمز",
100
+ "seo_needs_social_item3": "الهوية البصرية للعلامة التجارية",
101
+ "seo_needs_social_item4": "المحتوى الفيروسي"
102
+ }
i18n/de.json ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "app_title": "KI-Bildeditor",
3
+ "header_title": "🎨 KI-Bildeditor",
4
+ "news_banner_prefix": "🚀 Neuigkeiten: ",
5
+ "news_banner_link": "Das weltweit erste Multi-Bild-Bearbeitungstool →",
6
+ "global_editor_tab": "🌍 Globale Bearbeitung",
7
+ "upload_image_header": "### 📸 Bild hochladen",
8
+ "upload_image_label": "Wählen Sie ein Bild zur Bearbeitung aus",
9
+ "editing_instructions_header": "### ✍️ Bearbeitungsanweisungen",
10
+ "prompt_input_label": "Bearbeitungsaufforderung eingeben",
11
+ "prompt_input_placeholder": "Z.B.: Hintergrund zu einem Strand ändern, einen Regenbogen hinzufügen, Hintergrund entfernen, etc...",
12
+ "start_editing_button": "🚀 Bearbeitung starten",
13
+ "editing_result_header": "### 🎯 Bearbeitungsergebnis",
14
+ "output_image_label": "Bearbeitetes Bild",
15
+ "use_as_input_button": "🔄 Als Eingabe verwenden",
16
+ "status_output_label": "Verarbeitungsstatus",
17
+ "prompt_examples_header": "### 💡 Beispiel-Prompts",
18
+ "local_inpaint_tab": "🖌️ Lokales Inpainting",
19
+ "upload_and_draw_mask_header": "### 📸 Bild hochladen & Maske zeichnen",
20
+ "upload_and_draw_mask_label": "Laden Sie ein Bild hoch und zeichnen Sie eine Maske",
21
+ "reference_image_header": "### 🖼️ Referenzbild (Optional)",
22
+ "reference_image_label": "Referenzbild hochladen (optional)",
23
+ "local_prompt_input_label": "Lokale Bearbeitungsaufforderung eingeben",
24
+ "local_prompt_input_placeholder": "Z.B.: Haare im ausgewählten Bereich blond färben, dem ausgewählten Objekt ein Muster hinzufügen, Farbe des ausgewählten Bereichs ändern, etc...",
25
+ "start_local_editing_button": "🎯 Lokale Bearbeitung starten",
26
+ "local_output_image_label": "Lokal bearbeitetes Bild",
27
+ "local_inpaint_example_header": "### 💡 Beispiel für lokales Inpainting",
28
+ "panda_to_cat_example_header": "#### 🐼➡️🐱 Beispiel: Panda in Katze verwandeln",
29
+ "main_image_label": "Hauptbild",
30
+ "mask_label": "Maske",
31
+ "reference_label": "Referenzbild",
32
+ "panda_example_note": "**Prompt**: let the cat ride on the panda\n**Hinweis**: Die Maske wird beim Absenden dieses Beispiels automatisch angewendet",
33
+ "load_panda_example_button": "🎨 Panda-Beispiel laden",
34
+ "refresh_editor_button": "🔄 Bildeditor aktualisieren",
35
+
36
+ "error_upload_first": "Bitte laden Sie zuerst ein Bild hoch",
37
+ "error_enter_prompt": "Bitte geben Sie eine Bearbeitungsaufforderung ein",
38
+ "error_prompt_too_short": "❌ Die Bearbeitungsaufforderung muss mehr als 3 Zeichen enthalten",
39
+ "error_request_processing": "❌ Fehler bei der Verarbeitung der Anfrage",
40
+ "error_free_limit_reached": "❌ Sie haben Ihr Limit für kostenlose Generierungen auf Hugging Face erreicht. Besuchen Sie https://omnicreator.net/#generator für unbegrenzte Generierungen",
41
+ "error_free_limit_wait": "❌ Sie haben Ihr Limit für kostenlose Generierungen auf Hugging Face erreicht. Besuchen Sie https://omnicreator.net/#generator für unbegrenzte Generierungen oder warten Sie {wait_minutes_int} Minuten und versuchen Sie es erneut",
42
+ "status_checking_result": "Überprüfe Ergebnisbild...",
43
+ "status_applying_filter": "Inhaltsfilter wird angewendet...",
44
+ "warning_content_filter": "⚠️ Ein Inhaltsfilter wurde gemäß den Community-Richtlinien von Hugging Face angewendet. Für unbegrenzte kreative Freiheit besuchen Sie unsere offizielle Website https://omnicreator.net/#generator",
45
+ "warning_content_review": "⚠️ Inhaltsüberprüfung erforderlich. Besuchen Sie https://omnicreator.net/#generator für eine bessere Erfahrung",
46
+ "status_completed_message": "✅ {message}",
47
+ "status_processing_completed": "Verarbeitung abgeschlossen",
48
+ "error_processing_failed": "❌ {message}",
49
+ "error_processing_exception": "❌ Fehler bei der Verarbeitung: {error}",
50
+ "error_upload_and_draw": "Bitte laden Sie ein Bild hoch und zeichnen Sie den zu bearbeitenden Bereich",
51
+ "error_draw_on_image": "Bitte zeichnen Sie auf dem Bild den Bereich, den Sie bearbeiten möchten",
52
+ "error_no_image_found": "❌ Kein Bild gefunden. Bitte laden Sie zuerst ein Bild hoch.",
53
+
54
+ "seo_unlimited_title": "Unbegrenzte KI-Bilderzeugung & -bearbeitung",
55
+ "seo_unlimited_desc": "Erleben Sie die ultimative Freiheit bei der KI-Bilderstellung! Generieren und bearbeiten Sie Bilder ohne Limits oder Einschränkungen und entfesseln Sie Ihre Fantasie mit unserer fortschrittlichen KI-Bildbearbeitungsplattform.",
56
+ "seo_unlimited_button": "Jetzt unbegrenzten Zugang erhalten",
57
+ "seo_unlimited_footer": "Schließen Sie sich Tausenden von Kreativen an, die Omni Creator für unbegrenzte KI-Bilderzeugung vertrauen!",
58
+ "seo_professional_title": "Professioneller KI-Bildeditor - Unbegrenzt",
59
+ "seo_professional_desc": "Verwandeln Sie Ihre kreativen Visionen mit unserer fortschrittlichen KI-Bildbearbeitungsplattform in die Realität. Ob Sie Kunst schaffen, Fotos bearbeiten, Inhalte gestalten oder mit jeder Art von Bild arbeiten – unsere leistungsstarke KI beseitigt alle Grenzen und gibt Ihnen völlige kreative Freiheit.",
60
+ "seo_feature1_title": "Unbegrenzte Generierungen",
61
+ "seo_feature1_desc": "Premium-Benutzer genießen unbegrenzte Bildgenerierungen ohne tägliche Limits, Ratenbegrenzungen oder Inhaltsbarrieren. Erstellen Sie so viele Bilder, wie Sie möchten, wann und wo immer Sie wollen.",
62
+ "seo_feature2_title": "Kreative Freiheit",
63
+ "seo_feature2_desc": "Generieren und bearbeiten Sie jede Art von Inhalt mit vollständiger kreativer Freiheit und ohne Grenzen für Ihre Vorstellungskraft. Unendliche Möglichkeiten für Künstler, Designer und Content-Ersteller.",
64
+ "seo_feature3_title": "Blitzschnelle Verarbeitung",
65
+ "seo_feature3_desc": "Eine fortschrittliche KI-Infrastruktur liefert in Sekundenschnelle hochwertige Ergebnisse. Keine Warteschlangen, keine Verarbeitungsverzögerungen – nur sofortige Bildbearbeitung auf Profi-Niveau.",
66
+ "seo_feature4_title": "Fortgeschrittene Bearbeitungswerkzeuge",
67
+ "seo_feature4_desc": "Globale Transformationen, präzise lokale Bearbeitungen, Stilübertragung, Objektentfernung, Hintergrundersetzung und Dutzende anderer professioneller Bearbeitungsfunktionen.",
68
+ "seo_feature5_title": "Außergewöhnliche Qualität",
69
+ "seo_feature5_desc": "Modernste KI-Modelle, die auf Millionen von Bildern trainiert wurden, liefern außergewöhnliche Qualität und Realismus. Ergebnisse auf Profi-Niveau, die für kommerzielle Nutzung und High-End-Projekte geeignet sind.",
70
+ "seo_feature6_title": "Multimodale Unterstützung",
71
+ "seo_feature6_desc": "Unterstützung für alle Bildformate, Stile und Anwendungsfälle. Von fotorealistischen Porträts bis hin zu künstlerischen Kreationen, von Produktfotografie bis hin zu digitaler Kunst – wir kümmern uns um alles.",
72
+ "seo_protips_title": "Pro-Tipps für die besten Ergebnisse",
73
+ "seo_protip1_title": "Klare Beschreibungen:",
74
+ "seo_protip1_desc": "Verwenden Sie detaillierte und spezifische Prompts für bessere Ergebnisse. Beschreiben Sie Farben, Stil, Beleuchtung und Komposition klar.",
75
+ "seo_protip2_title": "Lokale Bearbeitung:",
76
+ "seo_protip2_desc": "Verwenden Sie präzise Pinselstriche, um Bereiche für lokale Bearbeitungen auszuwählen. Kleinere, fokussiertere Bearbeitungen führen oft zu besseren Ergebnissen.",
77
+ "seo_protip3_title": "Iterativer Prozess:",
78
+ "seo_protip3_desc": "Verwenden Sie die Funktion 'Als Eingabe verwenden', um Ergebnisse zu verfeinern. Mehrere Iterationen können zu komplexen Transformationen führen.",
79
+ "seo_protip4_title": "Bildqualität:",
80
+ "seo_protip4_desc": "Höher aufgelöste Eingabebilder (bis zu 10 MB) führen in der Regel zu besseren Bearbeitungen und feineren Details.",
81
+ "seo_needs_title": "Für jeden kreativen Bedarf",
82
+ "seo_needs_art_title": "Digitale Kunst",
83
+ "seo_needs_art_item1": "Charakterdesign",
84
+ "seo_needs_art_item2": "Konzeptkunst",
85
+ "seo_needs_art_item3": "Stilübertragung",
86
+ "seo_needs_art_item4": "Künstlerische Effekte",
87
+ "seo_needs_photo_title": "Fotografie",
88
+ "seo_needs_photo_item1": "Hintergrundersetzung",
89
+ "seo_needs_photo_item2": "Objektentfernung",
90
+ "seo_needs_photo_item3": "Beleuchtungsanpassung",
91
+ "seo_needs_photo_item4": "Porträtverbesserung",
92
+ "seo_needs_ecom_title": "E-Commerce",
93
+ "seo_needs_ecom_item1": "Produktfotografie",
94
+ "seo_needs_ecom_item2": "Lifestyle-Aufnahmen",
95
+ "seo_needs_ecom_item3": "Farbvarianten",
96
+ "seo_needs_ecom_item4": "Szenenersetzung",
97
+ "seo_needs_social_title": "Soziale Medien",
98
+ "seo_needs_social_item1": "Inhaltserstellung",
99
+ "seo_needs_social_item2": "Meme-Generierung",
100
+ "seo_needs_social_item3": "Markenvisuals",
101
+ "seo_needs_social_item4": "Virale Inhalte"
102
+ }
i18n/en.json ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "app_title": "AI Image Editor",
3
+ "header_title": "🎨 AI Image Editor",
4
+ "news_banner_prefix": "🚀 NEWS: ",
5
+ "news_banner_link": "World's First Multi-Image Editing Tool →",
6
+ "global_editor_tab": "🌍 Global Editor",
7
+ "upload_image_header": "### 📸 Upload Image",
8
+ "upload_image_label": "Select image to edit",
9
+ "editing_instructions_header": "### ✍️ Editing Instructions",
10
+ "prompt_input_label": "Enter editing prompt",
11
+ "prompt_input_placeholder": "For example: change background to beach, add rainbow, remove background, etc...",
12
+ "start_editing_button": "🚀 Start Editing",
13
+ "editing_result_header": "### 🎯 Editing Result",
14
+ "output_image_label": "Edited image",
15
+ "use_as_input_button": "🔄 Use as Input",
16
+ "status_output_label": "Processing status",
17
+ "prompt_examples_header": "### 💡 Prompt Examples",
18
+ "local_inpaint_tab": "🖌️ Local Inpaint",
19
+ "upload_and_draw_mask_header": "### 📸 Upload Image and Draw Mask",
20
+ "upload_and_draw_mask_label": "Upload image and draw mask",
21
+ "reference_image_header": "### 🖼️ Reference Image(Optional)",
22
+ "reference_image_label": "Upload reference image (optional)",
23
+ "local_prompt_input_label": "Enter local editing prompt",
24
+ "local_prompt_input_placeholder": "For example: change selected area hair to golden, add patterns to selected object, change selected area color, etc...",
25
+ "start_local_editing_button": "🎯 Start Local Editing",
26
+ "local_output_image_label": "Local edited image",
27
+ "local_inpaint_example_header": "### 💡 Local Inpaint Example",
28
+ "panda_to_cat_example_header": "#### 🐼➡️🐱 Example: Panda to Cat Transformation",
29
+ "main_image_label": "Main Image",
30
+ "mask_label": "Mask",
31
+ "reference_label": "Reference",
32
+ "panda_example_note": "**Prompt**: let the cat ride on the panda \n**Note**: Mask will be automatically applied when you submit this example",
33
+ "load_panda_example_button": "🎨 Load Panda Example",
34
+ "refresh_editor_button": "🔄 Refresh Image Editor",
35
+
36
+ "error_upload_first": "Please upload an image first",
37
+ "error_enter_prompt": "Please enter editing prompt",
38
+ "error_prompt_too_short": "❌ Editing prompt must be more than 3 characters",
39
+ "error_request_processing": "❌ Request processing error",
40
+ "error_free_limit_reached": "❌ You have reached Hugging Face's free generation limit. Please visit https://omnicreator.net/#generator for unlimited generation",
41
+ "error_free_limit_wait": "❌ You have reached Hugging Face's free generation limit. Please visit https://omnicreator.net/#generator for unlimited generation, or wait {wait_minutes_int} minutes before generating again",
42
+ "status_checking_result": "Checking result image...",
43
+ "status_applying_filter": "Applying content filter...",
44
+ "warning_content_filter": "⚠️ Content filter applied due to Hugging Face community guidelines. For unlimited creative freedom, visit our official website https://omnicreator.net/#generator",
45
+ "warning_content_review": "⚠️ Content review required. Please visit https://omnicreator.net/#generator for better experience",
46
+ "status_completed_message": "✅ {message}",
47
+ "status_processing_completed": "Processing completed",
48
+ "error_processing_failed": "❌ {message}",
49
+ "error_processing_exception": "❌ Error occurred during processing: {error}",
50
+ "error_upload_and_draw": "Please upload an image and draw the area to edit",
51
+ "error_draw_on_image": "Please draw the area to edit on the image",
52
+ "error_no_image_found": "❌ No image found. Please upload an image first.",
53
+
54
+ "seo_unlimited_title": "Unlimited AI Image Generation & Editing",
55
+ "seo_unlimited_desc": "Experience the ultimate freedom in AI image creation! Generate and edit unlimited images without restrictions, with complete creative freedom and no limits on your imagination with our premium AI image editing platform.",
56
+ "seo_unlimited_button": "Get Unlimited Access Now",
57
+ "seo_unlimited_footer": "Join thousands of creators who trust Omni Creator for unrestricted AI image generation!",
58
+ "seo_professional_title": "Professional AI Image Editor - No Restrictions",
59
+ "seo_professional_desc": "Transform your creative vision into reality with our advanced AI image editing platform. Whether you're creating art, editing photos, designing content, or working with any type of imagery - our powerful AI removes all limitations and gives you complete creative freedom.",
60
+ "seo_feature1_title": "Unlimited Generation",
61
+ "seo_feature1_desc": "Premium users enjoy unlimited image generation without daily limits, rate restrictions, or content barriers. Create as many images as you need, whenever you need them.",
62
+ "seo_feature2_title": "Creative Freedom",
63
+ "seo_feature2_desc": "Generate and edit any type of content with complete creative freedom and no limits on your imagination. Unlimited possibilities for artists, designers, and content creators.",
64
+ "seo_feature3_title": "Lightning Fast Processing",
65
+ "seo_feature3_desc": "Advanced AI infrastructure delivers high-quality results in seconds. No waiting in queues, no processing delays - just instant, professional-grade image editing.",
66
+ "seo_feature4_title": "Advanced Editing Tools",
67
+ "seo_feature4_desc": "Global transformations, precision local editing, style transfer, object removal, background replacement, and dozens of other professional editing capabilities.",
68
+ "seo_feature5_title": "Premium Quality",
69
+ "seo_feature5_desc": "State-of-the-art AI models trained on millions of images deliver exceptional quality and realism. Professional results suitable for commercial use and high-end projects.",
70
+ "seo_feature6_title": "Multi-Modal Support",
71
+ "seo_feature6_desc": "Support for all image formats, styles, and use cases. From photorealistic portraits to artistic creations, product photography to digital art - we handle everything.",
72
+ "seo_protips_title": "Pro Tips for Best Results",
73
+ "seo_protip1_title": "Clear Descriptions:",
74
+ "seo_protip1_desc": "Use detailed, specific prompts for better results. Describe colors, styles, lighting, and composition clearly.",
75
+ "seo_protip2_title": "Local Editing:",
76
+ "seo_protip2_desc": "Use precise brush strokes to select areas for local editing. Smaller, focused edits often yield better results.",
77
+ "seo_protip3_title": "Iterative Process:",
78
+ "seo_protip3_desc": "Use \"Use as Input\" feature to refine results. Multiple iterations can achieve complex transformations.",
79
+ "seo_protip4_title": "Image Quality:",
80
+ "seo_protip4_desc": "Higher resolution input images (up to 10MB) generally produce better editing results and finer details.",
81
+ "seo_needs_title": "Perfect For Every Creative Need",
82
+ "seo_needs_art_title": "Digital Art",
83
+ "seo_needs_art_item1": "Character design",
84
+ "seo_needs_art_item2": "Concept art",
85
+ "seo_needs_art_item3": "Style transfer",
86
+ "seo_needs_art_item4": "Artistic effects",
87
+ "seo_needs_photo_title": "Photography",
88
+ "seo_needs_photo_item1": "Background replacement",
89
+ "seo_needs_photo_item2": "Object removal",
90
+ "seo_needs_photo_item3": "Lighting adjustment",
91
+ "seo_needs_photo_item4": "Portrait enhancement",
92
+ "seo_needs_ecom_title": "E-commerce",
93
+ "seo_needs_ecom_item1": "Product photography",
94
+ "seo_needs_ecom_item2": "Lifestyle shots",
95
+ "seo_needs_ecom_item3": "Color variations",
96
+ "seo_needs_ecom_item4": "Context placement",
97
+ "seo_needs_social_title": "Social Media",
98
+ "seo_needs_social_item1": "Content creation",
99
+ "seo_needs_social_item2": "Meme generation",
100
+ "seo_needs_social_item3": "Brand visuals",
101
+ "seo_needs_social_item4": "Viral content"
102
+ }
i18n/es.json ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "app_title": "Editor de Imágenes con IA",
3
+ "header_title": "🎨 Editor de Imágenes con IA",
4
+ "news_banner_prefix": "🚀 Noticias: ",
5
+ "news_banner_link": "La primera herramienta de edición de múltiples imágenes del mundo →",
6
+ "global_editor_tab": "🌍 Edición Global",
7
+ "upload_image_header": "### 📸 Subir Imagen",
8
+ "upload_image_label": "Selecciona una imagen para editar",
9
+ "editing_instructions_header": "### ✍️ Instrucciones de Edición",
10
+ "prompt_input_label": "Introduce la instrucción de edición",
11
+ "prompt_input_placeholder": "Ej: cambiar el fondo a una playa, añadir un arcoíris, eliminar el fondo, etc.",
12
+ "start_editing_button": "🚀 Empezar a Editar",
13
+ "editing_result_header": "### 🎯 Resultado de la Edición",
14
+ "output_image_label": "Imagen editada",
15
+ "use_as_input_button": "🔄 Usar como Entrada",
16
+ "status_output_label": "Estado del Procesamiento",
17
+ "prompt_examples_header": "### 💡 Ejemplos de Instrucciones",
18
+ "local_inpaint_tab": "🖌️ Inpainting Local",
19
+ "upload_and_draw_mask_header": "### 📸 Subir Imagen y Dibujar Máscara",
20
+ "upload_and_draw_mask_label": "Sube una imagen y dibuja una máscara",
21
+ "reference_image_header": "### 🖼️ Imagen de Referencia (Opcional)",
22
+ "reference_image_label": "Subir imagen de referencia (opcional)",
23
+ "local_prompt_input_label": "Introduce la instrucción de edición local",
24
+ "local_prompt_input_placeholder": "Ej: cambiar el pelo del área seleccionada a rubio, añadir un patrón al objeto seleccionado, cambiar el color del área seleccionada, etc.",
25
+ "start_local_editing_button": "🎯 Empezar Edición Local",
26
+ "local_output_image_label": "Imagen editada localmente",
27
+ "local_inpaint_example_header": "### 💡 Ejemplo de Inpainting Local",
28
+ "panda_to_cat_example_header": "#### 🐼➡️🐱 Ejemplo: Transformar Panda en Gato",
29
+ "main_image_label": "Imagen Principal",
30
+ "mask_label": "Máscara",
31
+ "reference_label": "Imagen de Referencia",
32
+ "panda_example_note": "**Instrucción**: let the cat ride on the panda\n**Nota**: La máscara se aplicará automáticamente al enviar este ejemplo",
33
+ "load_panda_example_button": "🎨 Cargar Ejemplo de Panda",
34
+ "refresh_editor_button": "🔄 Actualizar Editor de Imágenes",
35
+
36
+ "error_upload_first": "Por favor, sube una imagen primero",
37
+ "error_enter_prompt": "Por favor, introduce una instrucción de edición",
38
+ "error_prompt_too_short": "❌ La instrucción de edición debe tener más de 3 caracteres",
39
+ "error_request_processing": "❌ Error al procesar la solicitud",
40
+ "error_free_limit_reached": "❌ Has alcanzado tu límite de generaciones gratuitas en Hugging Face. Visita https://omnicreator.net/#generator para generaciones ilimitadas",
41
+ "error_free_limit_wait": "❌ Has alcanzado tu límite de generaciones gratuitas en Hugging Face. Visita https://omnicreator.net/#generator para generaciones ilimitadas, o espera {wait_minutes_int} minutos y vuelve a intentarlo",
42
+ "status_checking_result": "Comprobando la imagen resultante...",
43
+ "status_applying_filter": "Aplicando filtro de contenido...",
44
+ "warning_content_filter": "⚠️ Se ha aplicado un filtro de contenido según las directrices de la comunidad de Hugging Face. Para una libertad creativa ilimitada, visita nuestro sitio web oficial https://omnicreator.net/#generator",
45
+ "warning_content_review": "⚠️ Se requiere revisión de contenido. Visita https://omnicreator.net/#generator para una mejor experiencia",
46
+ "status_completed_message": "✅ {message}",
47
+ "status_processing_completed": "Procesamiento completado",
48
+ "error_processing_failed": "❌ {message}",
49
+ "error_processing_exception": "❌ Error durante el procesamiento: {error}",
50
+ "error_upload_and_draw": "Por favor, sube una imagen y dibuja el área a editar",
51
+ "error_draw_on_image": "Por favor, dibuja en la imagen el área que quieres editar",
52
+ "error_no_image_found": "❌ No se encontró ninguna imagen. Por favor, sube una imagen primero.",
53
+
54
+ "seo_unlimited_title": "Generación y Edición de Imágenes con IA Ilimitadas",
55
+ "seo_unlimited_desc": "¡Experimenta la máxima libertad en la creación de imágenes con IA! Genera y edita imágenes sin límites ni restricciones, y da rienda suelta a tu imaginación con nuestra avanzada plataforma de edición de imágenes con IA.",
56
+ "seo_unlimited_button": "Obtén Acceso Ilimitado Ahora",
57
+ "seo_unlimited_footer": "¡Únete a miles de creadores que confían en Omni Creator para la generación ilimitada de imágenes con IA!",
58
+ "seo_professional_title": "Editor Profesional de Imágenes con IA - Ilimitado",
59
+ "seo_professional_desc": "Convierte tus visiones creativas en realidad con nuestra avanzada plataforma de edición de imágenes con IA. Ya sea que estés creando arte, editando fotos, diseñando contenido o trabajando con cualquier tipo de imagen, nuestra potente IA elimina todos los límites para darte total libertad creativa.",
60
+ "seo_feature1_title": "Generaciones Ilimitadas",
61
+ "seo_feature1_desc": "Los usuarios Premium disfrutan de generaciones de imágenes ilimitadas, sin límites diarios, de velocidad o de contenido. Crea tantas imágenes como quieras, cuando y donde quieras.",
62
+ "seo_feature2_title": "Libertad Creativa",
63
+ "seo_feature2_desc": "Genera y edita cualquier tipo de contenido con total libertad creativa y sin límites para tu imaginación. Infinitas posibilidades para artistas, diseñadores y creadores de contenido.",
64
+ "seo_feature3_title": "Procesamiento Ultrarrápido",
65
+ "seo_feature3_desc": "Una infraestructura de IA avanzada ofrece resultados de alta calidad en segundos. Sin colas, sin retrasos de procesamiento: solo edición de imágenes instantánea y de nivel profesional.",
66
+ "seo_feature4_title": "Herramientas de Edición Avanzadas",
67
+ "seo_feature4_desc": "Transformaciones globales, ediciones locales precisas, transferencia de estilo, eliminación de objetos, reemplazo de fondo y docenas de otras funciones de edición profesionales.",
68
+ "seo_feature5_title": "Calidad Excepcional",
69
+ "seo_feature5_desc": "Modelos de IA de vanguardia entrenados en millones de imágenes ofrecen una calidad y un realismo excepcionales. Resultados de nivel profesional adecuados para uso comercial y proyectos de alta gama.",
70
+ "seo_feature6_title": "Soporte Multimodal",
71
+ "seo_feature6_desc": "Soporte para todos los formatos de imagen, estilos y casos de uso. Desde retratos fotorrealistas hasta creaciones artísticas, desde fotografía de productos hasta arte digital, lo manejamos todo.",
72
+ "seo_protips_title": "Consejos Profesionales para los Mejores Resultados",
73
+ "seo_protip1_title": "Descripciones Claras:",
74
+ "seo_protip1_desc": "Usa instrucciones detalladas y específicas para obtener mejores resultados. Describe claramente los colores, el estilo, la iluminación y la composición.",
75
+ "seo_protip2_title": "Edición Local:",
76
+ "seo_protip2_desc": "Usa pinceladas precisas para seleccionar áreas para ediciones locales. Las ediciones más pequeñas y enfocadas suelen producir mejores resultados.",
77
+ "seo_protip3_title": "Proceso Iterativo:",
78
+ "seo_protip3_desc": "Usa la función 'Usar como Entrada' para refinar los resultados. Múltiples iteraciones pueden llevar a transformaciones complejas.",
79
+ "seo_protip4_title": "Calidad de la Imagen:",
80
+ "seo_protip4_desc": "Las imágenes de entrada de mayor resolución (hasta 10 MB) suelen producir mejores ediciones y detalles más finos.",
81
+ "seo_needs_title": "Para Cada Necesidad Creativa",
82
+ "seo_needs_art_title": "Arte Digital",
83
+ "seo_needs_art_item1": "Diseño de Personajes",
84
+ "seo_needs_art_item2": "Arte Conceptual",
85
+ "seo_needs_art_item3": "Transferencia de Estilo",
86
+ "seo_needs_art_item4": "Efectos Artísticos",
87
+ "seo_needs_photo_title": "Fotografía",
88
+ "seo_needs_photo_item1": "Reemplazo de Fondo",
89
+ "seo_needs_photo_item2": "Eliminación de Objetos",
90
+ "seo_needs_photo_item3": "Ajuste de Iluminación",
91
+ "seo_needs_photo_item4": "Mejora de Retratos",
92
+ "seo_needs_ecom_title": "Comercio Electrónico",
93
+ "seo_needs_ecom_item1": "Fotografía de Producto",
94
+ "seo_needs_ecom_item2": "Fotos de Estilo de Vida",
95
+ "seo_needs_ecom_item3": "Variaciones de Color",
96
+ "seo_needs_ecom_item4": "Reemplazo de Escena",
97
+ "seo_needs_social_title": "Redes Sociales",
98
+ "seo_needs_social_item1": "Creación de Contenido",
99
+ "seo_needs_social_item2": "Generación de Memes",
100
+ "seo_needs_social_item3": "Visuales de Marca",
101
+ "seo_needs_social_item4": "Contenido Viral"
102
+ }
i18n/fr.json ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "app_title": "Éditeur d'Images IA",
3
+ "header_title": "🎨 Éditeur d'Images IA",
4
+ "news_banner_prefix": "🚀 Actualités : ",
5
+ "news_banner_link": "Le premier outil de retouche multi-images au monde →",
6
+ "global_editor_tab": "🌍 Édition Globale",
7
+ "upload_image_header": "### 📸 Télécharger une image",
8
+ "upload_image_label": "Sélectionnez une image à modifier",
9
+ "editing_instructions_header": "### ✍️ Instructions de modification",
10
+ "prompt_input_label": "Saisissez votre instruction de modification",
11
+ "prompt_input_placeholder": "Ex : changer l'arrière-plan en plage, ajouter un arc-en-ciel, supprimer l'arrière-plan, etc.",
12
+ "start_editing_button": "🚀 Commencer la modification",
13
+ "editing_result_header": "### 🎯 Résultat de la modification",
14
+ "output_image_label": "Image modifiée",
15
+ "use_as_input_button": "🔄 Utiliser comme entrée",
16
+ "status_output_label": "Statut du traitement",
17
+ "prompt_examples_header": "### 💡 Exemples d'instructions",
18
+ "local_inpaint_tab": "🖌️ Remplissage Localisé",
19
+ "upload_and_draw_mask_header": "### 📸 Télécharger une image et dessiner un masque",
20
+ "upload_and_draw_mask_label": "Téléchargez une image et dessinez un masque",
21
+ "reference_image_header": "### 🖼️ Image de référence (Optionnel)",
22
+ "reference_image_label": "Télécharger une image de référence (optionnel)",
23
+ "local_prompt_input_label": "Saisissez l'instruction de modification locale",
24
+ "local_prompt_input_placeholder": "Ex : changer les cheveux dans la zone sélectionnée en blonds, ajouter un motif à l'objet sélectionné, changer la couleur de la zone sélectionnée, etc.",
25
+ "start_local_editing_button": "🎯 Commencer la modification locale",
26
+ "local_output_image_label": "Image modifiée localement",
27
+ "local_inpaint_example_header": "### 💡 Exemple de remplissage localisé",
28
+ "panda_to_cat_example_header": "#### 🐼➡️🐱 Exemple : Transformer un panda en chat",
29
+ "main_image_label": "Image principale",
30
+ "mask_label": "Masque",
31
+ "reference_label": "Image de référence",
32
+ "panda_example_note": "**Instruction** : let the cat ride on the panda\n**Note** : Le masque sera appliqué automatiquement en soumettant cet exemple",
33
+ "load_panda_example_button": "🎨 Charger l'exemple du panda",
34
+ "refresh_editor_button": "🔄 Actualiser l'éditeur d'images",
35
+
36
+ "error_upload_first": "Veuillez d'abord télécharger une image",
37
+ "error_enter_prompt": "Veuillez saisir une instruction de modification",
38
+ "error_prompt_too_short": "❌ L'instruction de modification doit comporter plus de 3 caractères",
39
+ "error_request_processing": "❌ Erreur lors du traitement de la requête",
40
+ "error_free_limit_reached": "❌ Vous avez atteint votre limite de générations gratuites sur Hugging Face. Visitez https://omnicreator.net/#generator pour des générations illimitées",
41
+ "error_free_limit_wait": "❌ Vous avez atteint votre limite de générations gratuites sur Hugging Face. Visitez https://omnicreator.net/#generator pour des générations illimitées, ou attendez {wait_minutes_int} minutes et réessayez",
42
+ "status_checking_result": "Vérification de l'image résultante...",
43
+ "status_applying_filter": "Application du filtre de contenu...",
44
+ "warning_content_filter": "⚠️ Un filtre de contenu a été appliqué conformément aux directives de la communauté Hugging Face. Pour une liberté de création illimitée, visitez notre site officiel https://omnicreator.net/#generator",
45
+ "warning_content_review": "⚠️ Un examen du contenu est requis. Visitez https://omnicreator.net/#generator pour une meilleure expérience",
46
+ "status_completed_message": "✅ {message}",
47
+ "status_processing_completed": "Traitement terminé",
48
+ "error_processing_failed": "❌ {message}",
49
+ "error_processing_exception": "❌ Une erreur s'est produite lors du traitement : {error}",
50
+ "error_upload_and_draw": "Veuillez télécharger une image et dessiner la zone à modifier",
51
+ "error_draw_on_image": "Veuillez dessiner sur l'image la zone que vous souhaitez modifier",
52
+ "error_no_image_found": "❌ Aucune image trouvée. Veuillez d'abord télécharger une image.",
53
+
54
+ "seo_unlimited_title": "Génération et Retouche d'Images IA Illimitées",
55
+ "seo_unlimited_desc": "Découvrez la liberté ultime de la création d'images par IA ! Générez et retouchez des images sans limites ni restrictions, et libérez votre imagination avec notre plateforme avancée de retouche d'images par IA.",
56
+ "seo_unlimited_button": "Obtenez un Accès Illimité Maintenant",
57
+ "seo_unlimited_footer": "Rejoignez des milliers de créateurs qui font confiance à Omni Creator pour une génération d'images IA illimitée !",
58
+ "seo_professional_title": "Éditeur d'Images IA Professionnel - Illimité",
59
+ "seo_professional_desc": "Transformez vos visions créatives en réalité avec notre plateforme avancée de retouche d'images par IA. Que vous créiez de l'art, retouchiez des photos, conceviez du contenu ou travailliez avec n'importe quel type d'image, notre IA puissante supprime toutes les limites pour vous offrir une liberté de création totale.",
60
+ "seo_feature1_title": "Générations Illimitées",
61
+ "seo_feature1_desc": "Les utilisateurs Premium bénéficient de générations d'images illimitées, sans limites quotidiennes, sans limitation de débit et sans barrières de contenu. Créez autant d'images que vous le souhaitez, quand vous le voulez, où vous le voulez.",
62
+ "seo_feature2_title": "Liberté de Création",
63
+ "seo_feature2_desc": "Générez et retouchez tout type de contenu avec une liberté de création totale et sans aucune limite à votre imagination. Des possibilités infinies pour les artistes, les designers et les créateurs de contenu.",
64
+ "seo_feature3_title": "Traitement Ultra-Rapide",
65
+ "seo_feature3_desc": "Une infrastructure IA avancée fournit des résultats de haute qualité en quelques secondes. Pas de files d'attente, pas de délais de traitement - juste une retouche d'image instantanée de niveau professionnel.",
66
+ "seo_feature4_title": "Outils de Retouche Avancés",
67
+ "seo_feature4_desc": "Transformations globales, modifications locales précises, transfert de style, suppression d'objets, remplacement d'arrière-plan et des dizaines d'autres fonctionnalités de retouche professionnelles.",
68
+ "seo_feature5_title": "Qualité Exceptionnelle",
69
+ "seo_feature5_desc": "Des modèles d'IA de pointe entraînés sur des millions d'images offrent une qualité et un réalisme exceptionnels. Des résultats de niveau professionnel adaptés à un usage commercial et à des projets haut de gamme.",
70
+ "seo_feature6_title": "Support Multimodal",
71
+ "seo_feature6_desc": "Prise en charge de tous les formats d'image, styles et cas d'utilisation. Des portraits photoréalistes aux créations artistiques, de la photographie de produits à l'art numérique - nous gérons tout.",
72
+ "seo_protips_title": "Conseils de Pro pour les Meilleurs Résultats",
73
+ "seo_protip1_title": "Descriptions Claires :",
74
+ "seo_protip1_desc": "Utilisez des instructions détaillées et spécifiques pour de meilleurs résultats. Décrivez clairement les couleurs, le style, l'éclairage et la composition.",
75
+ "seo_protip2_title": "Modification Locale :",
76
+ "seo_protip2_desc": "Utilisez des coups de pinceau précis pour sélectionner les zones à modifier localement. Des modifications plus petites et plus ciblées donnent souvent de meilleurs résultats.",
77
+ "seo_protip3_title": "Processus Itératif :",
78
+ "seo_protip3_desc": "Utilisez la fonction 'Utiliser comme entrée' pour affiner les résultats. Plusieurs itérations peuvent aboutir à des transformations complexes.",
79
+ "seo_protip4_title": "Qualité de l'Image :",
80
+ "seo_protip4_desc": "Des images d'entrée à plus haute résolution (jusqu'à 10 Mo) produisent généralement de meilleures modifications et des détails plus fins.",
81
+ "seo_needs_title": "Pour Tous les Besoins Créatifs",
82
+ "seo_needs_art_title": "Art Numérique",
83
+ "seo_needs_art_item1": "Création de Personnages",
84
+ "seo_needs_art_item2": "Art Conceptuel",
85
+ "seo_needs_art_item3": "Transfert de Style",
86
+ "seo_needs_art_item4": "Effets Artistiques",
87
+ "seo_needs_photo_title": "Photographie",
88
+ "seo_needs_photo_item1": "Remplacement d'Arrière-plan",
89
+ "seo_needs_photo_item2": "Suppression d'Objets",
90
+ "seo_needs_photo_item3": "Ajustement de l'Éclairage",
91
+ "seo_needs_photo_item4": "Amélioration de Portrait",
92
+ "seo_needs_ecom_title": "E-commerce",
93
+ "seo_needs_ecom_item1": "Photographie de Produit",
94
+ "seo_needs_ecom_item2": "Photos de Style de Vie",
95
+ "seo_needs_ecom_item3": "Variations de Couleur",
96
+ "seo_needs_ecom_item4": "Remplacement de Scène",
97
+ "seo_needs_social_title": "Réseaux Sociaux",
98
+ "seo_needs_social_item1": "Création de Contenu",
99
+ "seo_needs_social_item2": "Génération de Mèmes",
100
+ "seo_needs_social_item3": "Visuels de Marque",
101
+ "seo_needs_social_item4": "Contenu Viral"
102
+ }
i18n/id.json ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "app_title": "Editor Gambar AI",
3
+ "header_title": "🎨 Editor Gambar AI",
4
+ "news_banner_prefix": "🚀 Berita: ",
5
+ "news_banner_link": "Alat edit multi-gambar pertama di dunia →",
6
+ "global_editor_tab": "🌍 Pengeditan Global",
7
+ "upload_image_header": "### 📸 Unggah Gambar",
8
+ "upload_image_label": "Pilih gambar untuk diedit",
9
+ "editing_instructions_header": "### ✍️ Instruksi Pengeditan",
10
+ "prompt_input_label": "Masukkan prompt pengeditan",
11
+ "prompt_input_placeholder": "Contoh: ubah latar belakang menjadi pantai, tambahkan pelangi, hapus latar belakang, dll...",
12
+ "start_editing_button": "🚀 Mulai Mengedit",
13
+ "editing_result_header": "### 🎯 Hasil Editan",
14
+ "output_image_label": "Gambar yang telah diedit",
15
+ "use_as_input_button": "🔄 Gunakan sebagai Input",
16
+ "status_output_label": "Status Pemrosesan",
17
+ "prompt_examples_header": "### 💡 Contoh Prompt",
18
+ "local_inpaint_tab": "🖌️ Inpainting Lokal",
19
+ "upload_and_draw_mask_header": "### 📸 Unggah Gambar & Gambar Masker",
20
+ "upload_and_draw_mask_label": "Unggah gambar dan gambar masker",
21
+ "reference_image_header": "### 🖼️ Gambar Referensi (Opsional)",
22
+ "reference_image_label": "Unggah gambar referensi (opsional)",
23
+ "local_prompt_input_label": "Masukkan prompt pengeditan lokal",
24
+ "local_prompt_input_placeholder": "Contoh: ubah rambut di area yang dipilih menjadi pirang, tambahkan pola ke objek yang dipilih, ubah warna area yang dipilih, dll...",
25
+ "start_local_editing_button": "🎯 Mulai Pengeditan Lokal",
26
+ "local_output_image_label": "Gambar yang diedit secara lokal",
27
+ "local_inpaint_example_header": "### 💡 Contoh Inpainting Lokal",
28
+ "panda_to_cat_example_header": "#### 🐼➡️🐱 Contoh: Ubah Panda menjadi Kucing",
29
+ "main_image_label": "Gambar Utama",
30
+ "mask_label": "Masker",
31
+ "reference_label": "Gambar Referensi",
32
+ "panda_example_note": "**Prompt**: let the cat ride on the panda\n**Catatan**: Masker akan diterapkan secara otomatis saat mengirimkan contoh ini",
33
+ "load_panda_example_button": "🎨 Muat Contoh Panda",
34
+ "refresh_editor_button": "🔄 Segarkan Editor Gambar",
35
+
36
+ "error_upload_first": "Silakan unggah gambar terlebih dahulu",
37
+ "error_enter_prompt": "Silakan masukkan prompt pengeditan",
38
+ "error_prompt_too_short": "❌ Prompt pengeditan harus lebih dari 3 karakter",
39
+ "error_request_processing": "❌ Kesalahan saat memproses permintaan",
40
+ "error_free_limit_reached": "❌ Anda telah mencapai batas generasi gratis di Hugging Face. Kunjungi https://omnicreator.net/#generator untuk generasi tanpa batas",
41
+ "error_free_limit_wait": "❌ Anda telah mencapai batas generasi gratis di Hugging Face. Kunjungi https://omnicreator.net/#generator untuk generasi tanpa batas, atau tunggu {wait_minutes_int} menit dan coba lagi",
42
+ "status_checking_result": "Memeriksa gambar hasil...",
43
+ "status_applying_filter": "Menerapkan filter konten...",
44
+ "warning_content_filter": "⚠️ Filter konten telah diterapkan sesuai dengan pedoman komunitas Hugging Face. Untuk kebebasan berkreasi tanpa batas, kunjungi situs web resmi kami https://omnicreator.net/#generator",
45
+ "warning_content_review": "⚠️ Diperlukan tinjauan konten. Kunjungi https://omnicreator.net/#generator untuk pengalaman yang lebih baik",
46
+ "status_completed_message": "✅ {message}",
47
+ "status_processing_completed": "Pemrosesan selesai",
48
+ "error_processing_failed": "❌ {message}",
49
+ "error_processing_exception": "❌ Terjadi kesalahan saat pemrosesan: {error}",
50
+ "error_upload_and_draw": "Silakan unggah gambar dan gambar area yang akan diedit",
51
+ "error_draw_on_image": "Silakan gambar area yang ingin Anda edit pada gambar",
52
+ "error_no_image_found": "❌ Tidak ada gambar yang ditemukan. Silakan unggah gambar terlebih dahulu.",
53
+
54
+ "seo_unlimited_title": "Pembuatan & Pengeditan Gambar AI Tanpa Batas",
55
+ "seo_unlimited_desc": "Rasakan kebebasan tertinggi dalam kreasi gambar AI! Hasilkan dan edit gambar tanpa batas atau batasan, dan bebaskan imajinasi Anda dengan platform pengeditan gambar AI canggih kami.",
56
+ "seo_unlimited_button": "Dapatkan Akses Tanpa Batas Sekarang",
57
+ "seo_unlimited_footer": "Bergabunglah dengan ribuan kreator yang memercayai Omni Creator untuk pembuatan gambar AI tanpa batas!",
58
+ "seo_professional_title": "Editor Gambar AI Profesional - Tanpa Batas",
59
+ "seo_professional_desc": "Wujudkan visi kreatif Anda menjadi kenyataan dengan platform pengeditan gambar AI canggih kami. Baik Anda membuat seni, mengedit foto, merancang konten, atau bekerja dengan jenis gambar apa pun - AI kami yang kuat menghilangkan semua batasan untuk memberi Anda kebebasan berkreasi total.",
60
+ "seo_feature1_title": "Generasi Tanpa Batas",
61
+ "seo_feature1_desc": "Pengguna premium menikmati generasi gambar tanpa batas, tanpa batasan harian, batasan kecepatan, atau penghalang konten. Buat gambar sebanyak yang Anda inginkan, kapan pun dan di mana pun Anda mau.",
62
+ "seo_feature2_title": "Kebebasan Berkreasi",
63
+ "seo_feature2_desc": "Hasilkan dan edit semua jenis konten dengan kebebasan berkreasi penuh dan tanpa batas pada imajinasi Anda. Kemungkinan tak terbatas untuk seniman, desainer, dan pembuat konten.",
64
+ "seo_feature3_title": "Pemrosesan Secepat Kilat",
65
+ "seo_feature3_desc": "Infrastruktur AI canggih memberikan hasil berkualitas tinggi dalam hitungan detik. Tanpa antrian, tanpa penundaan pemrosesan - hanya pengeditan gambar instan tingkat profesional.",
66
+ "seo_feature4_title": "Alat Pengeditan Canggih",
67
+ "seo_feature4_desc": "Transformasi global, pengeditan lokal yang presisi, transfer gaya, penghapusan objek, penggantian latar belakang, dan puluhan fitur pengeditan profesional lainnya.",
68
+ "seo_feature5_title": "Kualitas Luar Biasa",
69
+ "seo_feature5_desc": "Model AI canggih yang dilatih pada jutaan gambar memberikan kualitas dan realisme yang luar biasa. Hasil tingkat profesional yang cocok untuk penggunaan komersial dan proyek kelas atas.",
70
+ "seo_feature6_title": "Dukungan Multimodal",
71
+ "seo_feature6_desc": "Dukungan untuk semua format gambar, gaya, dan kasus penggunaan. Dari potret fotorealistik hingga kreasi artistik, dari fotografi produk hingga seni digital - kami menangani semuanya.",
72
+ "seo_protips_title": "Kiat Pro untuk Hasil Terbaik",
73
+ "seo_protip1_title": "Deskripsi yang Jelas:",
74
+ "seo_protip1_desc": "Gunakan prompt yang detail dan spesifik untuk hasil yang lebih baik. Jelaskan warna, gaya, pencahayaan, dan komposisi dengan jelas.",
75
+ "seo_protip2_title": "Pengeditan Lokal:",
76
+ "seo_protip2_desc": "Gunakan sapuan kuas yang presisi untuk memilih area untuk pengeditan lokal. Pengeditan yang lebih kecil dan lebih terfokus seringkali menghasilkan hasil yang lebih baik.",
77
+ "seo_protip3_title": "Proses Iteratif:",
78
+ "seo_protip3_desc": "Gunakan fitur 'Gunakan sebagai Input' untuk menyempurnakan hasil. Beberapa iterasi dapat mengarah pada transformasi yang kompleks.",
79
+ "seo_protip4_title": "Kualitas Gambar:",
80
+ "seo_protip4_desc": "Gambar input beresolusi lebih tinggi (hingga 10MB) biasanya menghasilkan editan yang lebih baik dan detail yang lebih halus.",
81
+ "seo_needs_title": "Untuk Setiap Kebutuhan Kreatif",
82
+ "seo_needs_art_title": "Seni Digital",
83
+ "seo_needs_art_item1": "Desain Karakter",
84
+ "seo_needs_art_item2": "Seni Konsep",
85
+ "seo_needs_art_item3": "Transfer Gaya",
86
+ "seo_needs_art_item4": "Efek Artistik",
87
+ "seo_needs_photo_title": "Fotografi",
88
+ "seo_needs_photo_item1": "Penggantian Latar Belakang",
89
+ "seo_needs_photo_item2": "Penghapusan Objek",
90
+ "seo_needs_photo_item3": "Penyesuaian Pencahayaan",
91
+ "seo_needs_photo_item4": "Penyempurnaan Potret",
92
+ "seo_needs_ecom_title": "E-commerce",
93
+ "seo_needs_ecom_item1": "Fotografi Produk",
94
+ "seo_needs_ecom_item2": "Foto Gaya Hidup",
95
+ "seo_needs_ecom_item3": "Variasi Warna",
96
+ "seo_needs_ecom_item4": "Penggantian Pemandangan",
97
+ "seo_needs_social_title": "Media Sosial",
98
+ "seo_needs_social_item1": "Pembuatan Konten",
99
+ "seo_needs_social_item2": "Pembuatan Meme",
100
+ "seo_needs_social_item3": "Visual Merek",
101
+ "seo_needs_social_item4": "Konten Viral"
102
+ }
i18n/it.json ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "app_title": "Editor di Immagini AI",
3
+ "header_title": "🎨 Editor di Immagini AI",
4
+ "news_banner_prefix": "🚀 Notizie: ",
5
+ "news_banner_link": "Il primo strumento di modifica multi-immagine al mondo →",
6
+ "global_editor_tab": "🌍 Modifica Globale",
7
+ "upload_image_header": "### 📸 Carica Immagine",
8
+ "upload_image_label": "Seleziona un'immagine da modificare",
9
+ "editing_instructions_header": "### ✍️ Istruzioni di Modifica",
10
+ "prompt_input_label": "Inserisci il prompt di modifica",
11
+ "prompt_input_placeholder": "Es: cambia lo sfondo in una spiaggia, aggiungi un arcobaleno, rimuovi lo sfondo, ecc...",
12
+ "start_editing_button": "🚀 Inizia a Modificare",
13
+ "editing_result_header": "### 🎯 Risultato della Modifica",
14
+ "output_image_label": "Immagine modificata",
15
+ "use_as_input_button": "🔄 Usa come Input",
16
+ "status_output_label": "Stato di Elaborazione",
17
+ "prompt_examples_header": "### 💡 Esempi di Prompt",
18
+ "local_inpaint_tab": "🖌️ Inpainting Locale",
19
+ "upload_and_draw_mask_header": "### 📸 Carica Immagine e Disegna Maschera",
20
+ "upload_and_draw_mask_label": "Carica un'immagine e disegna una maschera",
21
+ "reference_image_header": "### 🖼️ Immagine di Riferimento (Opzionale)",
22
+ "reference_image_label": "Carica immagine di riferimento (opzionale)",
23
+ "local_prompt_input_label": "Inserisci prompt per la modifica locale",
24
+ "local_prompt_input_placeholder": "Es: cambia i capelli nell'area selezionata in biondi, aggiungi un motivo all'oggetto selezionato, cambia il colore dell'area selezionata, ecc...",
25
+ "start_local_editing_button": "🎯 Inizia Modifica Locale",
26
+ "local_output_image_label": "Immagine modificata localmente",
27
+ "local_inpaint_example_header": "### 💡 Esempio di Inpainting Locale",
28
+ "panda_to_cat_example_header": "#### 🐼➡️🐱 Esempio: Trasforma Panda in Gatto",
29
+ "main_image_label": "Immagine Principale",
30
+ "mask_label": "Maschera",
31
+ "reference_label": "Immagine di Riferimento",
32
+ "panda_example_note": "**Prompt**: let the cat ride on the panda\n**Nota**: La maschera verrà applicata automaticamente inviando questo esempio",
33
+ "load_panda_example_button": "🎨 Carica Esempio Panda",
34
+ "refresh_editor_button": "🔄 Aggiorna l'Editor di Immagini",
35
+
36
+ "error_upload_first": "Per favore, carica prima un'immagine",
37
+ "error_enter_prompt": "Per favore, inserisci un prompt di modifica",
38
+ "error_prompt_too_short": "❌ Il prompt di modifica deve contenere più di 3 caratteri",
39
+ "error_request_processing": "❌ Errore nell'elaborazione della richiesta",
40
+ "error_free_limit_reached": "❌ Hai raggiunto il limite di generazioni gratuite su Hugging Face. Visita https://omnicreator.net/#generator per generazioni illimitate",
41
+ "error_free_limit_wait": "❌ Hai raggiunto il limite di generazioni gratuite su Hugging Face. Visita https://omnicreator.net/#generator per generazioni illimitate, o attendi {wait_minutes_int} minuti e riprova",
42
+ "status_checking_result": "Controllo dell'immagine risultante...",
43
+ "status_applying_filter": "Applicazione del filtro contenuti...",
44
+ "warning_content_filter": "⚠️ È stato applicato un filtro contenuti secondo le linee guida della community di Hugging Face. Per una libertà creativa illimitata, visita il nostro sito ufficiale https://omnicreator.net/#generator",
45
+ "warning_content_review": "⚠️ È richiesta la revisione dei contenuti. Visita https://omnicreator.net/#generator per un'esperienza migliore",
46
+ "status_completed_message": "✅ {message}",
47
+ "status_processing_completed": "Elaborazione completata",
48
+ "error_processing_failed": "❌ {message}",
49
+ "error_processing_exception": "❌ Si è verificato un errore durante l'elaborazione: {error}",
50
+ "error_upload_and_draw": "Per favore, carica un'immagine e disegna l'area da modificare",
51
+ "error_draw_on_image": "Per favore, disegna sull'immagine l'area che vuoi modificare",
52
+ "error_no_image_found": "❌ Nessuna immagine trovata. Per favore, carica prima un'immagine.",
53
+
54
+ "seo_unlimited_title": "Generazione e Modifica Illimitata di Immagini AI",
55
+ "seo_unlimited_desc": "Sperimenta la massima libertà nella creazione di immagini AI! Genera e modifica immagini senza limiti, senza restrizioni, e scatena la tua immaginazione con la nostra piattaforma avanzata di editing di immagini AI.",
56
+ "seo_unlimited_button": "Ottieni Subito l'Accesso Illimitato",
57
+ "seo_unlimited_footer": "Unisciti a migliaia di creatori che si fidano di Omni Creator per la generazione illimitata di immagini AI!",
58
+ "seo_professional_title": "Editor di Immagini AI Professionale - Illimitato",
59
+ "seo_professional_desc": "Trasforma le tue visioni creative in realtà con la nostra piattaforma avanzata di editing di immagini AI. Che tu stia creando arte, modificando foto, progettando contenuti o lavorando con qualsiasi tipo di immagine, la nostra potente AI rimuove ogni limite, offrendoti totale libertà creativa.",
60
+ "seo_feature1_title": "Generazioni Illimitate",
61
+ "seo_feature1_desc": "Gli utenti Premium godono di generazioni di immagini illimitate, senza limiti giornalieri, limiti di velocità o barriere di contenuto. Crea quante immagini vuoi, quando e dove vuoi.",
62
+ "seo_feature2_title": "Libertà Creativa",
63
+ "seo_feature2_desc": "Genera e modifica qualsiasi tipo di contenuto con completa libertà creativa e senza limiti alla tua immaginazione. Possibilità infinite per artisti, designer e creatori di contenuti.",
64
+ "seo_feature3_title": "Elaborazione Velocissima",
65
+ "seo_feature3_desc": "Un'infrastruttura AI avanzata fornisce risultati di alta qualità in pochi secondi. Nessuna coda, nessun ritardo di elaborazione - solo editing di immagini istantaneo e di livello professionale.",
66
+ "seo_feature4_title": "Strumenti di Modifica Avanzati",
67
+ "seo_feature4_desc": "Trasformazioni globali, editing locale preciso, trasferimento di stile, rimozione di oggetti, sostituzione dello sfondo e decine di altre funzionalità di editing professionali.",
68
+ "seo_feature5_title": "Qualità Eccezionale",
69
+ "seo_feature5_desc": "Modelli AI all'avanguardia addestrati su milioni di immagini offrono qualità e realismo eccezionali. Risultati di livello professionale adatti per uso commerciale e progetti di alto livello.",
70
+ "seo_feature6_title": "Supporto Multimodale",
71
+ "seo_feature6_desc": "Supporto per tutti i formati, stili e casi d'uso delle immagini. Dai ritratti fotorealistici alle creazioni artistiche, dalla fotografia di prodotto all'arte digitale - gestiamo tutto.",
72
+ "seo_protips_title": "Consigli Pro per i Migliori Risultati",
73
+ "seo_protip1_title": "Descrizioni Chiare:",
74
+ "seo_protip1_desc": "Usa prompt dettagliati e specifici per risultati migliori. Descrivi chiaramente colori, stile, illuminazione e composizione.",
75
+ "seo_protip2_title": "Editing Locale:",
76
+ "seo_protip2_desc": "Usa pennellate precise per selezionare le aree per le modifiche locali. Modifiche più piccole e mirate spesso producono risultati migliori.",
77
+ "seo_protip3_title": "Processo Iterativo:",
78
+ "seo_protip3_desc": "Usa la funzione 'Usa come Input' per affinare i risultati. Più iterazioni possono portare a trasformazioni complesse.",
79
+ "seo_protip4_title": "Qualità dell'Immagine:",
80
+ "seo_protip4_desc": "Immagini di input a risoluzione più alta (fino a 10MB) di solito producono modifiche migliori e dettagli più fini.",
81
+ "seo_needs_title": "Per Ogni Esigenza Creativa",
82
+ "seo_needs_art_title": "Arte Digitale",
83
+ "seo_needs_art_item1": "Design di Personaggi",
84
+ "seo_needs_art_item2": "Concept Art",
85
+ "seo_needs_art_item3": "Trasferimento di Stile",
86
+ "seo_needs_art_item4": "Effetti Artistici",
87
+ "seo_needs_photo_title": "Fotografia",
88
+ "seo_needs_photo_item1": "Sostituzione Sfondo",
89
+ "seo_needs_photo_item2": "Rimozione Oggetti",
90
+ "seo_needs_photo_item3": "Regolazione Illuminazione",
91
+ "seo_needs_photo_item4": "Miglioramento Ritratti",
92
+ "seo_needs_ecom_title": "E-commerce",
93
+ "seo_needs_ecom_item1": "Fotografia di Prodotto",
94
+ "seo_needs_ecom_item2": "Scatti Lifestyle",
95
+ "seo_needs_ecom_item3": "Variazioni di Colore",
96
+ "seo_needs_ecom_item4": "Sostituzione di Scena",
97
+ "seo_needs_social_title": "Social Media",
98
+ "seo_needs_social_item1": "Creazione di Contenuti",
99
+ "seo_needs_social_item2": "Generazione di Meme",
100
+ "seo_needs_social_item3": "Visual del Marchio",
101
+ "seo_needs_social_item4": "Contenuti Virali"
102
+ }
i18n/ja.json ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "app_title": "AI画像エディター",
3
+ "header_title": "🎨 AI画像エディター",
4
+ "news_banner_prefix": "🚀 ニュース: ",
5
+ "news_banner_link": "世界初のマルチ画像編集ツール →",
6
+ "global_editor_tab": "🌍 全体編集",
7
+ "upload_image_header": "### 📸 画像をアップロード",
8
+ "upload_image_label": "編集する画像を選択",
9
+ "editing_instructions_header": "### ✍️ 編集指示",
10
+ "prompt_input_label": "編集プロンプトを入力",
11
+ "prompt_input_placeholder": "例: 背景をビーチに変更、虹を追加、背景を削除など...",
12
+ "start_editing_button": "🚀 編集を開始",
13
+ "editing_result_header": "### 🎯 編集結果",
14
+ "output_image_label": "編集後の画像",
15
+ "use_as_input_button": "🔄 入力として使用",
16
+ "status_output_label": "処理ステータス",
17
+ "prompt_examples_header": "### 💡 プロンプトの例",
18
+ "local_inpaint_tab": "🖌️ 部分修正",
19
+ "upload_and_draw_mask_header": "### 📸 画像をアップロードしてマスクを描画",
20
+ "upload_and_draw_mask_label": "画像をアップロードしてマスクを描画",
21
+ "reference_image_header": "### 🖼️ 参考画像 (任意)",
22
+ "reference_image_label": "参考画像をアップロード (任意)",
23
+ "local_prompt_input_label": "部分編集プロンプトを入力",
24
+ "local_prompt_input_placeholder": "例: 選択した部分の髪を金色にする、選択したオブジェクトにパターンを追加する、選択した部分の色を変更する...",
25
+ "start_local_editing_button": "🎯 部分編集を開始",
26
+ "local_output_image_label": "部分編集後の画像",
27
+ "local_inpaint_example_header": "### 💡 部分修正の例",
28
+ "panda_to_cat_example_header": "#### 🐼➡️🐱 例: パンダを猫に変身",
29
+ "main_image_label": "メイン画像",
30
+ "mask_label": "マスク",
31
+ "reference_label": "参考画像",
32
+ "panda_example_note": "**プロンプト**: let the cat ride on the panda\n**注意**: この例を送信するとマスクが自動的に適用されます",
33
+ "load_panda_example_button": "🎨 パンダの例を読み込む",
34
+ "refresh_editor_button": "🔄 画像エディターを更新",
35
+
36
+ "error_upload_first": "最初に画像をアップロードしてください",
37
+ "error_enter_prompt": "編集プロンプトを入力してください",
38
+ "error_prompt_too_short": "❌ 編集プロンプトは3文字以上である必要があります",
39
+ "error_request_processing": "❌ リクエストの処理中にエラーが発生しました",
40
+ "error_free_limit_reached": "❌ Hugging Faceの無料生成回数制限に達しました。無制限の生成については https://omnicreator.net/#generator にアクセスしてください",
41
+ "error_free_limit_wait": "❌ Hugging Faceの無料生成回数制限に達しました。無制限の生成については https://omnicreator.net/#generator にアクセスするか、{wait_minutes_int}分後にもう一度お試しください",
42
+ "status_checking_result": "結果画像をチェックしています...",
43
+ "status_applying_filter": "コンテンツフィルターを適用しています...",
44
+ "warning_content_filter": "⚠️ Hugging Faceコミュニティガイドラインに基づき、コンテンツフィルターが適用されました。無制限の創造的自由を得るには、公式サイト https://omnicreator.net/#generator をご覧ください",
45
+ "warning_content_review": "⚠️ コンテンツのレビューが必要です。より良い体験のために https://omnicreator.net/#generator をご覧ください",
46
+ "status_completed_message": "✅ {message}",
47
+ "status_processing_completed": "処理が完了しました",
48
+ "error_processing_failed": "❌ {message}",
49
+ "error_processing_exception": "❌ 処理中にエラーが発生しました: {error}",
50
+ "error_upload_and_draw": "画像をアップロードし、編集したい領域を描画してください",
51
+ "error_draw_on_image": "画像上で編集したい領域を描画してください",
52
+ "error_no_image_found": "❌ 画像が見つかりません。まず画像をアップロードしてください。",
53
+
54
+ "seo_unlimited_title": "無制限のAI画像生成と編集",
55
+ "seo_unlimited_desc": "AI画像作成の究極の自由を体験してください!当社の高度なAI画像編集プラットフォームで、制限なく画像を生成・編集し、あなたの想像力を解き放ちましょう。",
56
+ "seo_unlimited_button": "今すぐ無制限アクセスを取得",
57
+ "seo_unlimited_footer": "何千人ものクリエイターが信頼するOmni Creatorに参加して、無制限のAI画像生成を体験しよう!",
58
+ "seo_professional_title": "プロフェッショナルAI画像エディター - 無制限",
59
+ "seo_professional_desc": "当社の先進的なAI画像編集プラットフ���ームで、あなたのクリエイティブなビジョンを現実にしましょう。アートの作成、写真の編集、コンテンツのデザイン、その他あらゆる種類の画像の扱いに、当社の強力なAIがすべての制限を取り払い、完全な創造的自由を与えます。",
60
+ "seo_feature1_title": "無制限の生成",
61
+ "seo_feature1_desc": "プレミアムユーザーは、日次制限、レート制限、コンテンツの障壁なしで、無制限の画像生成をお楽しみいただけます。いつでも、どこでも、好きなだけ画像を作成できます。",
62
+ "seo_feature2_title": "創造的自由",
63
+ "seo_feature2_desc": "あらゆる種類のコンテンツを生成・編集し、想像力に一切の制限なく、完全な創造的自由を享受できます。アーティスト、デザイナー、コンテンツクリエーターに無限の可能性を提供します。",
64
+ "seo_feature3_title": "超高速処理",
65
+ "seo_feature3_desc": "先進的なAIインフラが、数秒で高品質な結果を提供します。キュー待ちや処理遅延はなく、瞬時にプロレベルの画像編集が可能です。",
66
+ "seo_feature4_title": "高度な編集ツール",
67
+ "seo_feature4_desc": "全体的な変換、正確な部分編集、スタイル転送、オブジェクト除去、背景置換など、数十種類のプロフェッショナルな編集機能。",
68
+ "seo_feature5_title": "卓越した品質",
69
+ "seo_feature5_desc": "数百万枚の画像でトレーニングされた最先端のAIモデルが、卓越した品質とリアリズムを提供します。商用利用やハイエンドプロジェクトに適したプロレベルの結果。",
70
+ "seo_feature6_title": "マルチモーダル対応",
71
+ "seo_feature6_desc": "すべての画像フォーマット、スタイル、ユースケースに対応。リアルなポートレートから芸術的な創作、製品写真からデジタルアートまで、すべてをカバーします。",
72
+ "seo_protips_title": "最高の結果を得るためのプロのヒント",
73
+ "seo_protip1_title": "明確な説明:",
74
+ "seo_protip1_desc": "詳細で具体的なプロンプトを使用すると、より良い結果が得られます。色、スタイル、照明、構図を明確に記述してください。",
75
+ "seo_protip2_title": "部分編集:",
76
+ "seo_protip2_desc": "正確なブラシストロークで部分編集したい領域を選択します。より小さく、集中した編集は、通常、より良い結果を生み出します。",
77
+ "seo_protip3_title": "反復プロセス:",
78
+ "seo_protip3_desc": "「入力として使用」機能を使って結果を洗練させます。複数回の反復により、複雑な変換が可能になります。",
79
+ "seo_protip4_title": "画質:",
80
+ "seo_protip4_desc": "より高解像度の入力画像(最大10MB)は、通常、より良い編集結果と細かいディテールをもたらします。",
81
+ "seo_needs_title": "あらゆるクリエイティブニーズに対応",
82
+ "seo_needs_art_title": "デジタルアート",
83
+ "seo_needs_art_item1": "キャラクターデザイン",
84
+ "seo_needs_art_item2": "コンセプトアート",
85
+ "seo_needs_art_item3": "スタイル転送",
86
+ "seo_needs_art_item4": "アーティスティック効果",
87
+ "seo_needs_photo_title": "写真",
88
+ "seo_needs_photo_item1": "背景置換",
89
+ "seo_needs_photo_item2": "オブジェクト除去",
90
+ "seo_needs_photo_item3": "照明調整",
91
+ "seo_needs_photo_item4": "ポートレート補正",
92
+ "seo_needs_ecom_title": "eコマース",
93
+ "seo_needs_ecom_item1": "製品写真",
94
+ "seo_needs_ecom_item2": "ライフスタイル写真",
95
+ "seo_needs_ecom_item3": "色の変更",
96
+ "seo_needs_ecom_item4": "シーンの置き換え",
97
+ "seo_needs_social_title": "ソーシャルメディア",
98
+ "seo_needs_social_item1": "コンテンツ作成",
99
+ "seo_needs_social_item2": "ミーム生成",
100
+ "seo_needs_social_item3": "ブランドビジュアル",
101
+ "seo_needs_social_item4": "バイラルコンテンツ"
102
+ }
i18n/nl.json ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "app_title": "AI-beeld-editor",
3
+ "header_title": "🎨 AI-beeld-editor",
4
+ "news_banner_prefix": "🚀 Nieuws: ",
5
+ "news_banner_link": "De eerste multi-beeld-bewerkingstool ter wereld →",
6
+ "global_editor_tab": "🌍 Algemene Bewerking",
7
+ "upload_image_header": "### 📸 Afbeelding uploaden",
8
+ "upload_image_label": "Selecteer een afbeelding om te bewerken",
9
+ "editing_instructions_header": "### ✍️ Bewerkingsinstructies",
10
+ "prompt_input_label": "Voer een bewerkingsprompt in",
11
+ "prompt_input_placeholder": "Bijv.: verander de achtergrond in een strand, voeg een regenboog toe, verwijder de achtergrond, etc.",
12
+ "start_editing_button": "🚀 Start Bewerken",
13
+ "editing_result_header": "### 🎯 Resultaat van Bewerking",
14
+ "output_image_label": "Bewerkte afbeelding",
15
+ "use_as_input_button": "🔄 Gebruik als Invoer",
16
+ "status_output_label": "Verwerkingsstatus",
17
+ "prompt_examples_header": "### 💡 Voorbeeldprompts",
18
+ "local_inpaint_tab": "🖌️ Lokaal Inpainting",
19
+ "upload_and_draw_mask_header": "### 📸 Afbeelding uploaden & Masker tekenen",
20
+ "upload_and_draw_mask_label": "Upload een afbeelding en teken een masker",
21
+ "reference_image_header": "### 🖼️ Referentieafbeelding (Optioneel)",
22
+ "reference_image_label": "Upload referentieafbeelding (optioneel)",
23
+ "local_prompt_input_label": "Voer lokale bewerkingsprompt in",
24
+ "local_prompt_input_placeholder": "Bijv.: verander het haar in het geselecteerde gebied naar blond, voeg een patroon toe aan het geselecteerde object, verander de kleur van het geselecteerde gebied, etc.",
25
+ "start_local_editing_button": "🎯 Start Lokale Bewerking",
26
+ "local_output_image_label": "Lokaal bewerkte afbeelding",
27
+ "local_inpaint_example_header": "### 💡 Voorbeeld van Lokaal Inpainting",
28
+ "panda_to_cat_example_header": "#### 🐼➡️🐱 Voorbeeld: Verander Panda in Kat",
29
+ "main_image_label": "Hoofdafbeelding",
30
+ "mask_label": "Masker",
31
+ "reference_label": "Referentieafbeelding",
32
+ "panda_example_note": "**Prompt**: let the cat ride on the panda\n**Opmerking**: Het masker wordt automatisch toegepast bij het indienen van dit voorbeeld",
33
+ "load_panda_example_button": "🎨 Laad Panda-voorbeeld",
34
+ "refresh_editor_button": "🔄 Ververs Beeld-editor",
35
+
36
+ "error_upload_first": "Upload eerst een afbeelding",
37
+ "error_enter_prompt": "Voer een bewerkingsprompt in",
38
+ "error_prompt_too_short": "❌ De bewerkingsprompt moet langer zijn dan 3 tekens",
39
+ "error_request_processing": "❌ Fout bij het verwerken van het verzoek",
40
+ "error_free_limit_reached": "❌ U heeft uw limiet voor gratis generaties op Hugging Face bereikt. Bezoek https://omnicreator.net/#generator voor onbeperkte generaties",
41
+ "error_free_limit_wait": "❌ U heeft uw limiet voor gratis generaties op Hugging Face bereikt. Bezoek https://omnicreator.net/#generator voor onbeperkte generaties, of wacht {wait_minutes_int} minuten en probeer het opnieuw",
42
+ "status_checking_result": "Resultaatafbeelding controleren...",
43
+ "status_applying_filter": "Contentfilter toepassen...",
44
+ "warning_content_filter": "⚠️ Er is een contentfilter toegepast volgens de communityrichtlijnen van Hugging Face. Voor onbeperkte creatieve vrijheid, bezoek onze officiële website https://omnicreator.net/#generator",
45
+ "warning_content_review": "⚠️ Contentbeoordeling vereist. Bezoek https://omnicreator.net/#generator voor een betere ervaring",
46
+ "status_completed_message": "✅ {message}",
47
+ "status_processing_completed": "Verwerking voltooid",
48
+ "error_processing_failed": "❌ {message}",
49
+ "error_processing_exception": "❌ Er is een fout opgetreden tijdens de verwerking: {error}",
50
+ "error_upload_and_draw": "Upload een afbeelding en teken het te bewerken gebied",
51
+ "error_draw_on_image": "Teken het gebied dat u wilt bewerken op de afbeelding",
52
+ "error_no_image_found": "❌ Geen afbeelding gevonden. Upload eerst een afbeelding.",
53
+
54
+ "seo_unlimited_title": "Onbeperkte AI-beeldgeneratie & -bewerking",
55
+ "seo_unlimited_desc": "Ervaar de ultieme vrijheid in AI-beeldcreatie! Genereer en bewerk afbeeldingen zonder limieten of beperkingen, en laat uw verbeelding de vrije loop met ons geavanceerde AI-beeldbewerkingsplatform.",
56
+ "seo_unlimited_button": "Krijg nu onbeperkte toegang",
57
+ "seo_unlimited_footer": "Sluit u aan bij duizenden makers die Omni Creator vertrouwen voor onbeperkte AI-beeldgeneratie!",
58
+ "seo_professional_title": "Professionele AI-beeld-editor - Onbeperkt",
59
+ "seo_professional_desc": "Breng uw creatieve visies tot leven met ons geavanceerde AI-beeldbewerkingsplatform. Of u nu kunst creëert, foto's bewerkt, content ontwerpt of met welk type afbeelding dan ook werkt - onze krachtige AI verwijdert alle limieten om u volledige creatieve vrijheid te geven.",
60
+ "seo_feature1_title": "Onbeperkte Generaties",
61
+ "seo_feature1_desc": "Premium-gebruikers genieten van onbeperkte beeldgeneraties, zonder dagelijkse limieten, snelheidsbeperkingen of contentbarrières. Creëer zoveel afbeeldingen als u wilt, waar en wanneer u maar wilt.",
62
+ "seo_feature2_title": "Creatieve Vrijheid",
63
+ "seo_feature2_desc": "Genereer en bewerk elk type content met volledige creatieve vrijheid en zonder limieten aan uw verbeelding. Eindeloze mogelijkheden voor kunstenaars, ontwerpers en contentmakers.",
64
+ "seo_feature3_title": "Bliksemsnelle Verwerking",
65
+ "seo_feature3_desc": "Een geavanceerde AI-infrastructuur levert binnen enkele seconden resultaten van hoge kwaliteit. Geen wachtrijen, geen verwerkingsvertragingen - alleen directe, professionele beeldbewerking.",
66
+ "seo_feature4_title": "Geavanceerde Bewerkingstools",
67
+ "seo_feature4_desc": "Globale transformaties, precieze lokale bewerkingen, stijloverdracht, objectverwijdering, achtergrondvervanging en tientallen andere professionele bewerkingsfuncties.",
68
+ "seo_feature5_title": "Uitzonderlijke Kwaliteit",
69
+ "seo_feature5_desc": "State-of-the-art AI-modellen getraind op miljoenen afbeeldingen leveren uitzonderlijke kwaliteit en realisme. Resultaten van professioneel niveau, geschikt voor commercieel gebruik en high-end projecten.",
70
+ "seo_feature6_title": "Multimodale Ondersteuning",
71
+ "seo_feature6_desc": "Ondersteuning voor alle beeldformaten, stijlen en use-cases. Van fotorealistische portretten tot artistieke creaties, van productfotografie tot digitale kunst - wij kunnen het allemaal aan.",
72
+ "seo_protips_title": "Pro-tips voor de Beste Resultaten",
73
+ "seo_protip1_title": "Duidelijke Beschrijvingen:",
74
+ "seo_protip1_desc": "Gebruik gedetailleerde en specifieke prompts voor betere resultaten. Beschrijf kleuren, stijl, belichting en compositie duidelijk.",
75
+ "seo_protip2_title": "Lokale Bewerking:",
76
+ "seo_protip2_desc": "Gebruik precieze penseelstreken om gebieden voor lokale bewerkingen te selecteren. Kleinere, meer gerichte bewerkingen leveren vaak betere resultaten op.",
77
+ "seo_protip3_title": "Iteratief Proces:",
78
+ "seo_protip3_desc": "Gebruik de functie 'Gebruik als Invoer' om resultaten te verfijnen. Meerdere iteraties kunnen leiden tot complexe transformaties.",
79
+ "seo_protip4_title": "Beeldkwaliteit:",
80
+ "seo_protip4_desc": "Invoer-afbeeldingen met een hogere resolutie (tot 10 MB) leveren doorgaans betere bewerkingen en fijnere details op.",
81
+ "seo_needs_title": "Voor Elke Creatieve Behoefte",
82
+ "seo_needs_art_title": "Digitale Kunst",
83
+ "seo_needs_art_item1": "Karakterontwerp",
84
+ "seo_needs_art_item2": "Concept Art",
85
+ "seo_needs_art_item3": "Stijloverdracht",
86
+ "seo_needs_art_item4": "Artistieke Effecten",
87
+ "seo_needs_photo_title": "Fotografie",
88
+ "seo_needs_photo_item1": "Achtergrondvervanging",
89
+ "seo_needs_photo_item2": "Objectverwijdering",
90
+ "seo_needs_photo_item3": "Belichtingsaanpassing",
91
+ "seo_needs_photo_item4": "Portretverbetering",
92
+ "seo_needs_ecom_title": "E-commerce",
93
+ "seo_needs_ecom_item1": "Productfotografie",
94
+ "seo_needs_ecom_item2": "Lifestylefoto's",
95
+ "seo_needs_ecom_item3": "Kleurvariaties",
96
+ "seo_needs_ecom_item4": "Scène-vervanging",
97
+ "seo_needs_social_title": "Sociale Media",
98
+ "seo_needs_social_item1": "Contentcreatie",
99
+ "seo_needs_social_item2": "Meme-generatie",
100
+ "seo_needs_social_item3": "Merkvisuals",
101
+ "seo_needs_social_item4": "Virale Content"
102
+ }
i18n/ru.json ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "app_title": "Редактор изображений с ИИ",
3
+ "header_title": "🎨 Редактор изображений с ИИ",
4
+ "news_banner_prefix": "🚀 Новости: ",
5
+ "news_banner_link": "Первый в мире инструмент для редактирования нескольких изображений →",
6
+ "global_editor_tab": "🌍 Глобальное редактирование",
7
+ "upload_image_header": "### 📸 Загрузить изображение",
8
+ "upload_image_label": "Выберите изображение для редактирования",
9
+ "editing_instructions_header": "### ✍️ Инструкции по редактированию",
10
+ "prompt_input_label": "Введите текстовую подсказку для редактирования",
11
+ "prompt_input_placeholder": "Например: изменить фон на пляж, добавить радугу, удалить фон и т.д.",
12
+ "start_editing_button": "🚀 Начать редактирование",
13
+ "editing_result_header": "### 🎯 Результат редактирования",
14
+ "output_image_label": "Отредактированное изображение",
15
+ "use_as_input_button": "🔄 Использовать как входное",
16
+ "status_output_label": "Статус обработки",
17
+ "prompt_examples_header": "### 💡 Примеры подсказок",
18
+ "local_inpaint_tab": "🖌️ Локальное восстановление",
19
+ "upload_and_draw_mask_header": "### 📸 Загрузить изображение и нарисовать маску",
20
+ "upload_and_draw_mask_label": "Загрузите изображение и нарисуйте маску",
21
+ "reference_image_header": "### 🖼️ Референсное изображение (необязательно)",
22
+ "reference_image_label": "Загрузить референсное изображение (необязательно)",
23
+ "local_prompt_input_label": "Введите подсказку для локального редактирования",
24
+ "local_prompt_input_placeholder": "Например: сделать волосы в выделенной области светлыми, добавить узор на выбранный объект, изменить цвет выделенной области и т.д.",
25
+ "start_local_editing_button": "🎯 Начать локальное редактирование",
26
+ "local_output_image_label": "Локально отредактированное изображение",
27
+ "local_inpaint_example_header": "### 💡 Пример локального восстановления",
28
+ "panda_to_cat_example_header": "#### 🐼➡️🐱 Пример: Превратить панду в кота",
29
+ "main_image_label": "Основное изображение",
30
+ "mask_label": "Маска",
31
+ "reference_label": "Референс",
32
+ "panda_example_note": "**Подсказка**: let the cat ride on the panda\n**Примечание**: Маска будет применена автоматически при отправке этого примера",
33
+ "load_panda_example_button": "🎨 Загрузить пример с пандой",
34
+ "refresh_editor_button": "🔄 Обновить редактор изображений",
35
+
36
+ "error_upload_first": "Пожалуйста, сначала загрузите изображение",
37
+ "error_enter_prompt": "Пожалуйста, введите подсказку для редактирования",
38
+ "error_prompt_too_short": "❌ Подсказка для редактирования должна быть длиннее 3 символов",
39
+ "error_request_processing": "❌ Ошибка обработки запроса",
40
+ "error_free_limit_reached": "❌ Вы достигли лимита бесплатных генераций на Hugging Face. Посетите https://omnicreator.net/#generator для неограниченных генераций",
41
+ "error_free_limit_wait": "❌ Вы достигли лимита бесплатных генераций на Hugging Face. Посетите https://omnicreator.net/#generator для неограниченных генераций или подождите {wait_minutes_int} минут и попробуйте снова",
42
+ "status_checking_result": "Проверка результирующего изображения...",
43
+ "status_applying_filter": "Применение фильтра контента...",
44
+ "warning_content_filter": "⚠️ Был применен фильтр контента в соответствии с правилами сообщества Hugging Face. Для неограниченной творческой свободы посетите наш официальный сайт https://omnicreator.net/#generator",
45
+ "warning_content_review": "⚠️ Требуется проверка контента. Посетите https://omnicreator.net/#generator для лучшего опыта",
46
+ "status_completed_message": "✅ {message}",
47
+ "status_processing_completed": "Обработка завершена",
48
+ "error_processing_failed": "❌ {message}",
49
+ "error_processing_exception": "❌ Произошла ошибка во время обработки: {error}",
50
+ "error_upload_and_draw": "Пожалуйста, загрузите изображение и нарисуйте область для редактирования",
51
+ "error_draw_on_image": "Пожалуйста, нарисуйте на изображении область, которую хотите отредактировать",
52
+ "error_no_image_found": "❌ Изображение не найдено. Пожалуйста, сначала загрузите изображение.",
53
+
54
+ "seo_unlimited_title": "Безлимитная генерация и редактирование изображений с ИИ",
55
+ "seo_unlimited_desc": "Испытайте абсолютную свободу в создании изображений с ИИ! Генерируйте и редактируйте изображения без ограничений и лимитов, и дайте волю своему воображению с нашей передовой платформой для редактирования изображений с ИИ.",
56
+ "seo_unlimited_button": "Получить безлимитный доступ сейчас",
57
+ "seo_unlimited_footer": "Присоединяйтесь к тысячам творцов, которые доверяют Omni Creator для безлимитной генерации изображений с ИИ!",
58
+ "seo_professional_title": "Профессиональный редактор изображений с ИИ - безлимитно",
59
+ "seo_professional_desc": "Воплотите свои творческие замыслы в реальность с нашей передовой платформой для редактирования изображений с ИИ. Создаете ли вы искусство, редактируете фотографии, разрабатываете контент или работаете с любым типом изображений — наш мощный ИИ снимает все ограничения, предоставляя вам полную творческую свободу.",
60
+ "seo_feature1_title": "Безлимитные генерации",
61
+ "seo_feature1_desc": "Премиум-пользователи получают неограниченное количество генераций изображений без дневных лимитов, ограничений по скорости или контенту. Создавайте столько изображений, сколько хотите, когда и где угодно.",
62
+ "seo_feature2_title": "Творческая свобода",
63
+ "seo_feature2_desc": "Генерируйте и редактируйте любой тип контента с полной творческой свободой и без ограничений для вашего воображения. Бесконечные возможности для художников, дизайнеров и создателей контента.",
64
+ "seo_feature3_title": "Молниеносная обработка",
65
+ "seo_feature3_desc": "Передовая инфраструктура ИИ обеспечивает высококачественные результаты за считанные секунды. Никаких очередей, никаких задержек в обработке — только мгновенное редактирование изображений на профессиональном уровне.",
66
+ "seo_feature4_title": "Расширенные инструменты редактирования",
67
+ "seo_feature4_desc": "Глобальные преобразования, точное локальное редактирование, перенос стиля, удаление объектов, замена фона и десятки других профессиональных функций редактирования.",
68
+ "seo_feature5_title": "Исключительное качество",
69
+ "seo_feature5_desc": "Самые современные модели ИИ, обученные на миллионах изображений, обеспечивают исключительное качество и реализм. Результаты профессионального уровня, подходящие для коммерческого использования и высококлассных проектов.",
70
+ "seo_feature6_title": "Мультимодальная поддержка",
71
+ "seo_feature6_desc": "Поддержка всех форматов изображений, стилей и сценариев использования. От фотореалистичных портретов до художественных творений, от предметной съемки до цифрового искусства — мы справимся со всем.",
72
+ "seo_protips_title": "Профессиональные советы для лучших результатов",
73
+ "seo_protip1_title": "Четкие описания:",
74
+ "seo_protip1_desc": "Используйте подробные и конкретные подсказки для лучших результатов. Четко описывайте цвета, стиль, освещение и композицию.",
75
+ "seo_protip2_title": "Локальное редактирование:",
76
+ "seo_protip2_desc": "Используйте точные мазки кистью для выбора областей для локального редактирования. Меньшие, более сфокусированные правки часто дают лучшие результаты.",
77
+ "seo_protip3_title": "Итеративный процесс:",
78
+ "seo_protip3_desc": "Используйте функцию «Использовать как входное», чтобы уточнить результаты. Несколько итераций могут привести к сложным преобразованиям.",
79
+ "seo_protip4_title": "Качество изображения:",
80
+ "seo_protip4_desc": "Изображения с более высоким разрешением на входе (до 10 МБ) обычно приводят к лучшим правкам и более тонким деталям.",
81
+ "seo_needs_title": "Для любых творческих нужд",
82
+ "seo_needs_art_title": "Цифровое искусство",
83
+ "seo_needs_art_item1": "Дизайн персонажей",
84
+ "seo_needs_art_item2": "Концепт-арт",
85
+ "seo_needs_art_item3": "Перенос стиля",
86
+ "seo_needs_art_item4": "Художественные эффекты",
87
+ "seo_needs_photo_title": "Фотография",
88
+ "seo_needs_photo_item1": "Замена фона",
89
+ "seo_needs_photo_item2": "Удаление объектов",
90
+ "seo_needs_photo_item3": "Коррекция освещения",
91
+ "seo_needs_photo_item4": "Улучшение портретов",
92
+ "seo_needs_ecom_title": "Электронная коммерция",
93
+ "seo_needs_ecom_item1": "Предметная съемка",
94
+ "seo_needs_ecom_item2": "Лайфстайл-фото",
95
+ "seo_needs_ecom_item3": "Вариации цвета",
96
+ "seo_needs_ecom_item4": "Замена сцены",
97
+ "seo_needs_social_title": "Социальные сети",
98
+ "seo_needs_social_item1": "Создание контента",
99
+ "seo_needs_social_item2": "Генерация мемов",
100
+ "seo_needs_social_item3": "Визуальные материалы бренда",
101
+ "seo_needs_social_item4": "Вирусный контент"
102
+ }
i18n/zh.json ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "app_title": "AI 图像编辑器",
3
+ "header_title": "🎨 AI 图像编辑器",
4
+ "news_banner_prefix": "🚀 新闻: ",
5
+ "news_banner_link": "全球首款多图像编辑工具 →",
6
+ "global_editor_tab": "🌍 全局编辑",
7
+ "upload_image_header": "### 📸 上传图片",
8
+ "upload_image_label": "选择要编辑的图片",
9
+ "editing_instructions_header": "### ✍️ 编辑指令",
10
+ "prompt_input_label": "输入编辑提示",
11
+ "prompt_input_placeholder": "例如: 将背景更改为海滩,添加彩虹,移除背景等...",
12
+ "start_editing_button": "🚀 开始编辑",
13
+ "editing_result_header": "### 🎯 编辑结果",
14
+ "output_image_label": "编辑后的图片",
15
+ "use_as_input_button": "🔄 用作输入",
16
+ "status_output_label": "处理状态",
17
+ "prompt_examples_header": "### 💡 提示示例",
18
+ "local_inpaint_tab": "🖌️ 局部修复",
19
+ "upload_and_draw_mask_header": "### 📸 上传图片并绘制蒙版",
20
+ "upload_and_draw_mask_label": "上传图片并绘制蒙版",
21
+ "reference_image_header": "### 🖼️ 参考图 (可选)",
22
+ "reference_image_label": "上传参考图 (可选)",
23
+ "local_prompt_input_label": "输入局部编辑提示",
24
+ "local_prompt_input_placeholder": "例如: 将选中区域的头发变为金色,为选中对象添加图案,更改选中区域颜色等...",
25
+ "start_local_editing_button": "🎯 开始局部编辑",
26
+ "local_output_image_label": "局部编辑后的图片",
27
+ "local_inpaint_example_header": "### 💡 局部修复示例",
28
+ "panda_to_cat_example_header": "#### 🐼➡️🐱 示例: 熊猫变猫咪",
29
+ "main_image_label": "主图",
30
+ "mask_label": "蒙版",
31
+ "reference_label": "参考图",
32
+ "panda_example_note": "**提示**: let the cat ride on the panda\n**注意**: 提交此示例时将自动应用蒙版",
33
+ "load_panda_example_button": "🎨 加载熊猫示例",
34
+ "refresh_editor_button": "🔄 刷新图片编辑器",
35
+
36
+ "error_upload_first": "请先上传图片",
37
+ "error_enter_prompt": "请输入编辑提示",
38
+ "error_prompt_too_short": "❌ 编辑提示必须超过3个字符",
39
+ "error_request_processing": "❌ 请求处理错误",
40
+ "error_free_limit_reached": "❌ 您已达到 Hugging Face 的免费生成次数限制。请访问 https://omnicreator.net/#generator 进行无限制生成",
41
+ "error_free_limit_wait": "❌ 您已达到 Hugging Face 的免费生成次数限制。请访问 https://omnicreator.net/#generator 进行无限制生成,或等待 {wait_minutes_int} 分钟后重试",
42
+ "status_checking_result": "正在检查结果图片...",
43
+ "status_applying_filter": "正在应用内容过滤器...",
44
+ "warning_content_filter": "⚠️ 根据 Hugging Face 社区准则,已应用内容过滤器。如需无限创作自由,请访问我们的官方网站 https://omnicreator.net/#generator",
45
+ "warning_content_review": "⚠️ 需要内容审核。请访问 https://omnicreator.net/#generator 以获得更好的体验",
46
+ "status_completed_message": "✅ {message}",
47
+ "status_processing_completed": "处理完成",
48
+ "error_processing_failed": "❌ {message}",
49
+ "error_processing_exception": "❌ 处理过程中发生错误: {error}",
50
+ "error_upload_and_draw": "请上传图片并绘制要编辑的区域",
51
+ "error_draw_on_image": "请在图片上绘制要编辑的区域",
52
+ "error_no_image_found": "❌ 未找到图片。请先上传图片。",
53
+
54
+ "seo_unlimited_title": "无限AI图像生成与编辑",
55
+ "seo_unlimited_desc": "体验AI图像创作的终极自由!无限制地生成和编辑图像,无任何限制,通过我们高级的AI图像编辑平台,让您的想象力完全释放。",
56
+ "seo_unlimited_button": "立即获取无限制访问权限",
57
+ "seo_unlimited_footer": "加入成千上万信任Omni Creator的创作者,进行无限制的AI图像生成!",
58
+ "seo_professional_title": "专业AI图像编辑器 - 无限制",
59
+ "seo_professional_desc": "通过我们先进的AI图像编辑平台,将您的创意愿景变为现实。无论您是创作艺术、编辑照片、设计内容,还是处理任何类型的图像 - 我们强大的AI将消除所有限制,给予您完全的创作自由。",
60
+ "seo_feature1_title": "无限生成",
61
+ "seo_feature1_desc": "高级用户享受无限图像生成,无每日限制、速率限制或内容障碍。随时随地,随心所欲地创建任意数量的图像。",
62
+ "seo_feature2_title": "创作自由",
63
+ "seo_feature2_desc": "生成和编辑任何类型的内容,拥有完全的创作自由,对您的想象力没有任何限制。为艺术家、设计师和内容创作者提供无限可能。",
64
+ "seo_feature3_title": "闪电般的处理速度",
65
+ "seo_feature3_desc": "先进的AI基础设施可在几秒钟内提供高质量的结果。无需排队等待,无处理延迟 - 只有即时、专业级的图像编辑。",
66
+ "seo_feature4_title": "高级编辑工具",
67
+ "seo_feature4_desc": "全局转换、精确的局部编辑、风格迁移、对象移除、背景替换以及数十种其他专业编辑功能。",
68
+ "seo_feature5_title": "卓越品质",
69
+ "seo_feature5_desc": "在数百万张图像上训练的最先进的AI模型,提供卓越的质量和逼真度。适用于商业用途和高端项目的专业级结果。",
70
+ "seo_feature6_title": "多模式支持",
71
+ "seo_feature6_desc": "支持所有图像格式、风格和用例。从逼真的肖像到艺术创作,从产品摄影到数字艺术 - 我们都能处理。",
72
+ "seo_protips_title": "获得最佳效果的专业提示",
73
+ "seo_protip1_title": "清晰的描述:",
74
+ "seo_protip1_desc": "使用详细、具体的提示以获得更好的结果。清晰地描述颜色、风格、光照和构图。",
75
+ "seo_protip2_title": "局部编辑:",
76
+ "seo_protip2_desc": "使用精确的笔触选择要进行局部编辑的区域。更小、更集中的编辑通常会产生更好的效果。",
77
+ "seo_protip3_title": "迭代过程:",
78
+ "seo_protip3_desc": "使用“用作输入”功能来优化结果。多次迭代可以实现复杂的转换。",
79
+ "seo_protip4_title": "图像质量:",
80
+ "seo_protip4_desc": "更高分辨率的输入图像(最大10MB)通常会产生更好的编辑效果和更精细的细节。",
81
+ "seo_needs_title": "满足各种创意需求",
82
+ "seo_needs_art_title": "数字艺术",
83
+ "seo_needs_art_item1": "角色设计",
84
+ "seo_needs_art_item2": "概念艺术",
85
+ "seo_needs_art_item3": "风格迁移",
86
+ "seo_needs_art_item4": "艺术效果",
87
+ "seo_needs_photo_title": "摄影",
88
+ "seo_needs_photo_item1": "背景替换",
89
+ "seo_needs_photo_item2": "对象移除",
90
+ "seo_needs_photo_item3": "光照调整",
91
+ "seo_needs_photo_item4": "肖像增强",
92
+ "seo_needs_ecom_title": "电子商务",
93
+ "seo_needs_ecom_item1": "产品摄影",
94
+ "seo_needs_ecom_item2": "生活照",
95
+ "seo_needs_ecom_item3": "颜色变化",
96
+ "seo_needs_ecom_item4": "场景置换",
97
+ "seo_needs_social_title": "社交媒体",
98
+ "seo_needs_social_item1": "内容创作",
99
+ "seo_needs_social_item2": "表情包生成",
100
+ "seo_needs_social_item3": "品牌视觉",
101
+ "seo_needs_social_item4": "病毒式内容"
102
+ }
tmp/1.txt ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ country_dict = {
3
+ "zh": ["中国", "香港"],
4
+ "en": ["美国", "澳大利亚", "英国", "加拿大", "新西兰", "爱尔兰"],
5
+ "es": ["西班牙", "墨西哥", "阿根廷", "哥伦比亚", "智利", "秘鲁", "巴西"],
6
+ "fr": ["法国", "比利时", "摩纳哥"],
7
+ "de": ["德国", "奥地利", ],
8
+ "it": ["意大利", "圣马力诺", "梵蒂冈"],
9
+ "ja": ["日本"],
10
+ "ru": ["俄罗斯"],
11
+ "ar": ["沙特阿拉伯", "埃及"],
12
+ "nl":["荷兰"],
13
+ "id":["印度尼西亚"]
14
+ }