selfit-camera commited on
Commit
f7d53f5
·
1 Parent(s): 55c5937
Files changed (2) hide show
  1. app.py +14 -8
  2. util.py +23 -23
app.py CHANGED
@@ -10,7 +10,7 @@ from nfsw import NSFWDetector
10
  # Configuration parameters
11
 
12
  TIP_TRY_N = 4 # Show like button tip after 12 tries
13
- FREE_TRY_N = 10 # Free phase: first 15 tries without restrictions
14
  SLOW_TRY_N = 15 # Slow phase start: 25 tries
15
  SLOW2_TRY_N = 20 # Slow phase start: 32 tries
16
  RATE_LIMIT_60 = 25 # Full restriction: blocked after 40 tries
@@ -450,7 +450,7 @@ def edit_image_interface(input_image, prompt, request: gr.Request, progress=gr.P
450
  print(f"✅ Processing started - IP: {client_ip}, phase: {current_phase}, total count: {updated_count}, prompt: {prompt.strip()}", flush=True)
451
 
452
  # Call image editing processing function
453
- result_url, message, task_uuid = process_image_edit(input_image, prompt.strip(), None, progress_callback)
454
 
455
  if result_url:
456
  print(f"✅ Processing completed successfully - IP: {client_ip}, result_url: {result_url}, task_uuid: {task_uuid}", flush=True)
@@ -532,8 +532,11 @@ def edit_image_interface(input_image, prompt, request: gr.Request, progress=gr.P
532
  action_buttons_html = ""
533
  if task_uuid:
534
  task_detail_url = f"https://omnicreator.net/my-creations/task/{task_uuid}"
535
- # Create image-to-video URL with result image
536
- image_to_video_url = f"https://omnicreator.net/image-to-video?input_image={final_result}"
 
 
 
537
  action_buttons_html = f"""
538
  <div style='display: flex; justify-content: center; gap: 15px; margin: 10px 0 5px 0; padding: 0px;'>
539
  <a href='{task_detail_url}' target='_blank' style='
@@ -809,10 +812,10 @@ def local_edit_interface(image_dict, prompt, reference_image, request: gr.Reques
809
  # Call local image editing processing function
810
  if is_example_case:
811
  # For example case, pass special flag to use local mask file
812
- result_url, message, task_uuid = process_local_image_edit(base_image, layers, clean_prompt, reference_image, progress_callback, use_example_mask="datas/panda01m.jpeg")
813
  else:
814
  # Normal case
815
- result_url, message, task_uuid = process_local_image_edit(base_image, layers, clean_prompt, reference_image, progress_callback)
816
 
817
  if result_url:
818
  print(f"✅ Local editing completed successfully - IP: {client_ip}, result_url: {result_url}, task_uuid: {task_uuid}", flush=True)
@@ -894,8 +897,11 @@ def local_edit_interface(image_dict, prompt, reference_image, request: gr.Reques
894
  action_buttons_html = ""
895
  if task_uuid:
896
  task_detail_url = f"https://omnicreator.net/my-creations/task/{task_uuid}"
897
- # Create image-to-video URL with result image
898
- image_to_video_url = f"https://omnicreator.net/image-to-video?input_image={final_result}"
 
 
 
899
  action_buttons_html = f"""
900
  <div style='display: flex; justify-content: center; gap: 15px; margin: 10px 0 5px 0; padding: 0px;'>
901
  <a href='{task_detail_url}' target='_blank' style='
 
10
  # Configuration parameters
11
 
12
  TIP_TRY_N = 4 # Show like button tip after 12 tries
13
+ FREE_TRY_N = 8 # Free phase: first 15 tries without restrictions
14
  SLOW_TRY_N = 15 # Slow phase start: 25 tries
15
  SLOW2_TRY_N = 20 # Slow phase start: 32 tries
16
  RATE_LIMIT_60 = 25 # Full restriction: blocked after 40 tries
 
450
  print(f"✅ Processing started - IP: {client_ip}, phase: {current_phase}, total count: {updated_count}, prompt: {prompt.strip()}", flush=True)
451
 
452
  # Call image editing processing function
453
+ input_image_url, result_url, message, task_uuid = process_image_edit(input_image, prompt.strip(), None, progress_callback)
454
 
455
  if result_url:
456
  print(f"✅ Processing completed successfully - IP: {client_ip}, result_url: {result_url}, task_uuid: {task_uuid}", flush=True)
 
532
  action_buttons_html = ""
533
  if task_uuid:
534
  task_detail_url = f"https://omnicreator.net/my-creations/task/{task_uuid}"
535
+ # Create image-to-video URL with input image, end image, and prompt
536
+ from urllib.parse import quote
537
+ # Use result URL as end_image, original upload URL as input_image
538
+ encoded_prompt = quote(prompt.strip())
539
+ image_to_video_url = f"https://omnicreator.net/image-to-video?input_image={input_image_url}&end_image={result_url}&prompt={encoded_prompt}"
540
  action_buttons_html = f"""
541
  <div style='display: flex; justify-content: center; gap: 15px; margin: 10px 0 5px 0; padding: 0px;'>
542
  <a href='{task_detail_url}' target='_blank' style='
 
812
  # Call local image editing processing function
813
  if is_example_case:
814
  # For example case, pass special flag to use local mask file
815
+ input_image_url, result_url, message, task_uuid = process_local_image_edit(base_image, layers, clean_prompt, reference_image, progress_callback, use_example_mask="datas/panda01m.jpeg")
816
  else:
817
  # Normal case
818
+ input_image_url, result_url, message, task_uuid = process_local_image_edit(base_image, layers, clean_prompt, reference_image, progress_callback)
819
 
820
  if result_url:
821
  print(f"✅ Local editing completed successfully - IP: {client_ip}, result_url: {result_url}, task_uuid: {task_uuid}", flush=True)
 
897
  action_buttons_html = ""
898
  if task_uuid:
899
  task_detail_url = f"https://omnicreator.net/my-creations/task/{task_uuid}"
900
+ # Create image-to-video URL with input image, end image, and prompt
901
+ from urllib.parse import quote
902
+ # Use result URL as end_image, original upload URL as input_image
903
+ encoded_prompt = quote(clean_prompt)
904
+ image_to_video_url = f"https://omnicreator.net/image-to-video?input_image={input_image_url}&end_image={result_url}&prompt={encoded_prompt}"
905
  action_buttons_html = f"""
906
  <div style='display: flex; justify-content: center; gap: 15px; margin: 10px 0 5px 0; padding: 0px;'>
907
  <a href='{task_detail_url}' target='_blank' style='
util.py CHANGED
@@ -418,7 +418,7 @@ def process_image_edit(img_input, prompt, reference_image=None, progress_callbac
418
  # Upload user image directly from memory
419
  uploaded_url = upload_user_img_r2(client_ip, time_id, pil_image)
420
  if not uploaded_url:
421
- return None, "image upload failed", None
422
 
423
  # Extract actual image URL from upload URL
424
  if "?" in uploaded_url:
@@ -440,17 +440,17 @@ def process_image_edit(img_input, prompt, reference_image=None, progress_callbac
440
 
441
  reference_url = upload_user_img_r2(client_ip, time_id, reference_pil)
442
  if not reference_url:
443
- return None, "reference image upload failed", None
444
 
445
  if "?" in reference_url:
446
  reference_url = reference_url.split("?")[0]
447
  except Exception as e:
448
- return None, f"reference image processing failed: {str(e)}", None
449
 
450
  # Submit image editing task
451
  task_id, error = submit_image_edit_task(uploaded_url, prompt, reference_image_url=reference_url)
452
  if error:
453
- return None, error, None
454
 
455
  if progress_callback:
456
  progress_callback(f"task submitted, ID: {task_id}, processing...")
@@ -467,11 +467,11 @@ def process_image_edit(img_input, prompt, reference_image=None, progress_callbac
467
 
468
  if status == 'completed':
469
  if output_url:
470
- return output_url, "image edit completed", task_uuid
471
  else:
472
- return None, "Task completed but no result image returned", task_uuid
473
  elif status == 'error' or status == 'failed':
474
- return None, f"task processing failed: {task_data}", task_uuid
475
  elif status in ['queued', 'processing', 'running', 'created', 'working']:
476
  # Enhanced progress message with queue info and website promotion
477
  if progress_callback and task_data and isinstance(task_data, dict):
@@ -498,10 +498,10 @@ def process_image_edit(img_input, prompt, reference_image=None, progress_callbac
498
  progress_callback(f"unknown status: {status}")
499
  time.sleep(1)
500
 
501
- return None, "task processing timeout", task_uuid
502
 
503
  except Exception as e:
504
- return None, f"error occurred during processing: {str(e)}", None
505
 
506
 
507
  def process_local_image_edit(base_image, layers, prompt, reference_image=None, progress_callback=None, use_example_mask=None):
@@ -531,7 +531,7 @@ def process_local_image_edit(base_image, layers, prompt, reference_image=None, p
531
 
532
  # Check if base_image is valid
533
  if base_image is None:
534
- return None, "Base image is None, cannot process example mask", None
535
 
536
  if os.path.exists(use_example_mask):
537
  mask_image = Image.open(use_example_mask)
@@ -546,11 +546,11 @@ def process_local_image_edit(base_image, layers, prompt, reference_image=None, p
546
 
547
  print(f"🎭 Using example mask from: {use_example_mask}, size: {mask_image.size}")
548
  else:
549
- return None, f"Example mask file not found: {use_example_mask}", None
550
  except Exception as e:
551
  import traceback
552
  traceback.print_exc()
553
- return None, f"Failed to load example mask: {str(e)}", None
554
  else:
555
  # Normal case: create mask from layers
556
  mask_image = create_mask_from_layers(base_image, layers)
@@ -558,7 +558,7 @@ def process_local_image_edit(base_image, layers, prompt, reference_image=None, p
558
  # 检查mask是否有内容
559
  mask_array = np.array(mask_image)
560
  if np.max(mask_array) == 0:
561
- return None, "please draw mask", None
562
 
563
  # Print mask statistics
564
  if not use_example_mask:
@@ -573,7 +573,7 @@ def process_local_image_edit(base_image, layers, prompt, reference_image=None, p
573
  # 直接从内存上传原始图片
574
  uploaded_url = upload_user_img_r2(client_ip, time_id, base_image)
575
  if not uploaded_url:
576
- return None, "original image upload failed", None
577
 
578
  # 从上传 URL 中提取实际的图片 URL
579
  if "?" in uploaded_url:
@@ -585,7 +585,7 @@ def process_local_image_edit(base_image, layers, prompt, reference_image=None, p
585
  # 直接从内存上传mask图片
586
  mask_url = upload_mask_image_r2(client_ip, time_id, mask_image)
587
  if not mask_url:
588
- return None, "mask image upload failed", None
589
 
590
  # 从上传 URL 中提取实际的图片 URL
591
  if "?" in mask_url:
@@ -604,12 +604,12 @@ def process_local_image_edit(base_image, layers, prompt, reference_image=None, p
604
 
605
  reference_url = upload_user_img_r2(client_ip, time_id, reference_pil)
606
  if not reference_url:
607
- return None, "reference image upload failed", None
608
 
609
  if "?" in reference_url:
610
  reference_url = reference_url.split("?")[0]
611
  except Exception as e:
612
- return None, f"reference image processing failed: {str(e)}", None
613
 
614
  print(f"📤 图片上传成功:")
615
  print(f" 原始图片: {uploaded_url}")
@@ -629,7 +629,7 @@ def process_local_image_edit(base_image, layers, prompt, reference_image=None, p
629
  reference_image_url=reference_url
630
  )
631
  if error:
632
- return None, error, None
633
 
634
  if progress_callback:
635
  progress_callback(f"task submitted, ID: {task_id}, processing...")
@@ -649,11 +649,11 @@ def process_local_image_edit(base_image, layers, prompt, reference_image=None, p
649
  if status == 'completed':
650
  if output_url:
651
  print(f"✅ 局部编辑任务完成,结果: {output_url}")
652
- return output_url, "local image edit completed", task_uuid
653
  else:
654
- return None, "task completed but no result image returned", task_uuid
655
  elif status == 'error' or status == 'failed':
656
- return None, f"task processing failed: {task_data}", task_uuid
657
  elif status in ['queued', 'processing', 'running', 'created', 'working']:
658
  # Enhanced progress message with queue info and website promotion
659
  if progress_callback and task_data and isinstance(task_data, dict):
@@ -680,11 +680,11 @@ def process_local_image_edit(base_image, layers, prompt, reference_image=None, p
680
  progress_callback(f"unknown status: {status}")
681
  time.sleep(1)
682
 
683
- return None, "task processing timeout", task_uuid
684
 
685
  except Exception as e:
686
  print(f"❌ 局部编辑处理异常: {str(e)}")
687
- return None, f"error occurred during processing: {str(e)}", None
688
 
689
 
690
  def download_and_check_result_nsfw(image_url, nsfw_detector=None):
 
418
  # Upload user image directly from memory
419
  uploaded_url = upload_user_img_r2(client_ip, time_id, pil_image)
420
  if not uploaded_url:
421
+ return None, None, "image upload failed", None
422
 
423
  # Extract actual image URL from upload URL
424
  if "?" in uploaded_url:
 
440
 
441
  reference_url = upload_user_img_r2(client_ip, time_id, reference_pil)
442
  if not reference_url:
443
+ return None, None, "reference image upload failed", None
444
 
445
  if "?" in reference_url:
446
  reference_url = reference_url.split("?")[0]
447
  except Exception as e:
448
+ return None, None, f"reference image processing failed: {str(e)}", None
449
 
450
  # Submit image editing task
451
  task_id, error = submit_image_edit_task(uploaded_url, prompt, reference_image_url=reference_url)
452
  if error:
453
+ return None, None, error, None
454
 
455
  if progress_callback:
456
  progress_callback(f"task submitted, ID: {task_id}, processing...")
 
467
 
468
  if status == 'completed':
469
  if output_url:
470
+ return uploaded_url, output_url, "image edit completed", task_uuid
471
  else:
472
+ return None, None, "Task completed but no result image returned", task_uuid
473
  elif status == 'error' or status == 'failed':
474
+ return None, None, f"task processing failed: {task_data}", task_uuid
475
  elif status in ['queued', 'processing', 'running', 'created', 'working']:
476
  # Enhanced progress message with queue info and website promotion
477
  if progress_callback and task_data and isinstance(task_data, dict):
 
498
  progress_callback(f"unknown status: {status}")
499
  time.sleep(1)
500
 
501
+ return None, None, "task processing timeout", task_uuid
502
 
503
  except Exception as e:
504
+ return None, None, f"error occurred during processing: {str(e)}", None
505
 
506
 
507
  def process_local_image_edit(base_image, layers, prompt, reference_image=None, progress_callback=None, use_example_mask=None):
 
531
 
532
  # Check if base_image is valid
533
  if base_image is None:
534
+ return None, None, "Base image is None, cannot process example mask", None
535
 
536
  if os.path.exists(use_example_mask):
537
  mask_image = Image.open(use_example_mask)
 
546
 
547
  print(f"🎭 Using example mask from: {use_example_mask}, size: {mask_image.size}")
548
  else:
549
+ return None, None, f"Example mask file not found: {use_example_mask}", None
550
  except Exception as e:
551
  import traceback
552
  traceback.print_exc()
553
+ return None, None, f"Failed to load example mask: {str(e)}", None
554
  else:
555
  # Normal case: create mask from layers
556
  mask_image = create_mask_from_layers(base_image, layers)
 
558
  # 检查mask是否有内容
559
  mask_array = np.array(mask_image)
560
  if np.max(mask_array) == 0:
561
+ return None, None, "please draw mask", None
562
 
563
  # Print mask statistics
564
  if not use_example_mask:
 
573
  # 直接从内存上传原始图片
574
  uploaded_url = upload_user_img_r2(client_ip, time_id, base_image)
575
  if not uploaded_url:
576
+ return None, None, "original image upload failed", None
577
 
578
  # 从上传 URL 中提取实际的图片 URL
579
  if "?" in uploaded_url:
 
585
  # 直接从内存上传mask图片
586
  mask_url = upload_mask_image_r2(client_ip, time_id, mask_image)
587
  if not mask_url:
588
+ return None, None, "mask image upload failed", None
589
 
590
  # 从上传 URL 中提取实际的图片 URL
591
  if "?" in mask_url:
 
604
 
605
  reference_url = upload_user_img_r2(client_ip, time_id, reference_pil)
606
  if not reference_url:
607
+ return None, None, "reference image upload failed", None
608
 
609
  if "?" in reference_url:
610
  reference_url = reference_url.split("?")[0]
611
  except Exception as e:
612
+ return None, None, f"reference image processing failed: {str(e)}", None
613
 
614
  print(f"📤 图片上传成功:")
615
  print(f" 原始图片: {uploaded_url}")
 
629
  reference_image_url=reference_url
630
  )
631
  if error:
632
+ return None, None, error, None
633
 
634
  if progress_callback:
635
  progress_callback(f"task submitted, ID: {task_id}, processing...")
 
649
  if status == 'completed':
650
  if output_url:
651
  print(f"✅ 局部编辑任务完成,结果: {output_url}")
652
+ return uploaded_url, output_url, "local image edit completed", task_uuid
653
  else:
654
+ return None, None, "task completed but no result image returned", task_uuid
655
  elif status == 'error' or status == 'failed':
656
+ return None, None, f"task processing failed: {task_data}", task_uuid
657
  elif status in ['queued', 'processing', 'running', 'created', 'working']:
658
  # Enhanced progress message with queue info and website promotion
659
  if progress_callback and task_data and isinstance(task_data, dict):
 
680
  progress_callback(f"unknown status: {status}")
681
  time.sleep(1)
682
 
683
+ return None, None, "task processing timeout", task_uuid
684
 
685
  except Exception as e:
686
  print(f"❌ 局部编辑处理异常: {str(e)}")
687
+ return None, None, f"error occurred during processing: {str(e)}", None
688
 
689
 
690
  def download_and_check_result_nsfw(image_url, nsfw_detector=None):