Kims12 commited on
Commit
56c932a
Β·
verified Β·
1 Parent(s): 5066846

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -11
app.py CHANGED
@@ -144,7 +144,6 @@ def process_images_with_prompt(image1, prompt, variation_index=0, max_retries=3)
144
  valid_images = [img for img in images if img is not None]
145
  if not valid_images:
146
  return None, "이미지λ₯Ό μ—…λ‘œλ“œν•΄μ£Όμ„Έμš”.", ""
147
- # ν”„λ‘¬ν”„νŠΈλŠ” 이미 Gemini APIλ₯Ό 톡해 μƒμ„±λœ μ˜μ–΄ ν…μŠ€νŠΈλΌ κ°€μ •
148
  final_prompt = prompt.strip()
149
  result_img, status = generate_with_images(final_prompt, valid_images, variation_index)
150
  if result_img is not None:
@@ -198,24 +197,24 @@ if not INDOOR_BACKGROUNDS:
198
  if not ABSTRACT_BACKGROUNDS:
199
  ABSTRACT_BACKGROUNDS = {"λ„€μ˜¨ μ‘°λͺ…": "neon lights"}
200
 
201
- # ------------------- μ‹œμŠ€ν…œ μΈμŠ€νŠΈλŸ­μ…˜ μˆ˜μ • (κ³ ν™”μ§ˆ 및 μƒν’ˆ 포컀슀 μΆ”κ°€) -------------------
202
  def generate_system_instruction():
203
  return """당신은 μƒν’ˆ μ΄λ―Έμ§€μ˜ 배경을 λ³€κ²½ν•˜κΈ° μœ„ν•œ κ³ ν’ˆμ§ˆ ν”„λ‘¬ν”„νŠΈλ₯Ό μƒμ„±ν•˜λŠ” μ „λ¬Έκ°€μž…λ‹ˆλ‹€.
204
  μ‚¬μš©μžκ°€ μ œκ³΅ν•˜λŠ” μƒν’ˆλͺ…, λ°°κ²½ μœ ν˜•, μΆ”κ°€ μš”μ²­μ‚¬ν•­μ„ λ°”νƒ•μœΌλ‘œ λ―Έλ“œμ €λ‹ˆ(Midjourney)에 μ‚¬μš©ν•  수 μžˆλŠ” μƒμ„Έν•˜κ³  전문적인 ν”„λ‘¬ν”„νŠΈλ₯Ό μ˜μ–΄λ‘œ μƒμ„±ν•΄μ£Όμ„Έμš”.
205
  λ‹€μŒ κ°€μ΄λ“œλΌμΈμ„ λ°˜λ“œμ‹œ μ€€μˆ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€:
206
  1. μƒν’ˆμ„ "#1"둜 μ§€μ •ν•˜μ—¬ μ°Έμ‘°ν•©λ‹ˆλ‹€. (예: "skincare tube (#1)")
207
  2. *** 맀우 μ€‘μš”: μƒν’ˆμ˜ μ›λž˜ νŠΉμ„±(λ””μžμΈ, 색상, ν˜•νƒœ, 둜고, νŒ¨ν‚€μ§€ λ“±)은 μ–΄λ–€ μƒν™©μ—μ„œλ„ μ ˆλŒ€ λ³€κ²½ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ***
208
- 3. *** μƒν’ˆμ˜ 본질적 νŠΉμ„±μ„ μœ μ§€ν•˜λ˜, μƒν’ˆμ— 포컀슀λ₯Ό 맞좰 λͺ¨λ“  μ„ΈλΆ€ 사항이 μ„ λͺ…ν•˜κ²Œ λ“œλŸ¬λ‚˜λ„λ‘ ν•΄μ•Ό ν•˜λ©°, κ³ ν™”μ§ˆ(ultra high resolution)둜 λ Œλ”λ§λ˜μ–΄ ν™”μ§ˆ μ €ν•˜ 없이 ν‘œν˜„λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. ***
209
  4. 이미지 λΉ„μœ¨μ€ μ •ν™•νžˆ 1:1(μ •μ‚¬κ°ν˜•) ν˜•μ‹μœΌλ‘œ μ§€μ •ν•©λ‹ˆλ‹€. ν”„λ‘¬ν”„νŠΈμ— "square format", "1:1 ratio" λ˜λŠ” "aspect ratio 1:1"을 λͺ…μ‹œμ μœΌλ‘œ ν¬ν•¨ν•©λ‹ˆλ‹€.
210
  5. μƒν’ˆμ€ λ°˜λ“œμ‹œ μ •μ‚¬κ°ν˜• κ΅¬λ„μ˜ 정쀑앙에 λ°°μΉ˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
211
  6. μƒν’ˆμ„ μ΄λ―Έμ§€μ˜ μ£Όμš” 초점으둜 λΆ€κ°μ‹œν‚€κ³ , μƒν’ˆμ˜ λΉ„μœ¨μ΄ 전체 μ΄λ―Έμ§€μ—μ„œ 크게 μ°¨μ§€ν•˜λ„λ‘ ν•©λ‹ˆλ‹€.
212
  7. μƒν’ˆ 이미지 컷아웃(#1)의 κΈ°λ³Έ ν˜•νƒœμ™€ 색상은 μœ μ§€ν•˜λ©΄μ„œ, μ„ νƒν•œ ν™˜κ²½μ— μžμ—°μŠ€λŸ½κ²Œ ν†΅ν•©λ˜λ„λ‘ ν•©λ‹ˆλ‹€.
213
  8. κ³ κΈ‰μŠ€λŸ¬μš΄ 상업적 이미지λ₯Ό μœ„ν•œ λ‹€μŒ ν™˜κ²½ μš”μ†Œλ“€μ„ ν¬ν•¨ν•˜μ„Έμš”:
214
- - μƒν’ˆκ³Ό μ–΄μšΈλ¦¬λŠ” μ£Όλ³€ ν™˜κ²½/λ°°κ²½ μš”μ†Œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
215
- - ν™˜κ²½μ˜ μ‘°λͺ… 효과(λ¦Ό 라이트, 백라이트, μ†Œν”„νŠΈλ°•μŠ€ λ“±)λ₯Ό μ„€λͺ…ν•©λ‹ˆλ‹€.
216
- - μƒν’ˆμ΄ ν™˜κ²½μ— μžμ—°μŠ€λŸ½κ²Œ μ‘΄μž¬ν•˜λŠ” κ²ƒμ²˜λŸΌ 보이도둝 μ μ ˆν•œ κ·Έλ¦Όμžμ™€ λΉ› ν‘œν˜„μ„ ν¬ν•¨ν•©λ‹ˆλ‹€.
217
- - μƒν’ˆμ˜ μš©λ„λ‚˜ μž₯점을 κ°„μ ‘μ μœΌλ‘œ μ•”μ‹œν•˜λŠ” λ°°κ²½ μš”μ†Œλ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
218
- - ν”„λ‘œνŽ˜μ…”λ„ν•œ 상업 사진 효과(선택적 피사계 심도, μ†Œν”„νŠΈ 포컀슀, μŠ€νŠœλ””μ˜€ μ‘°λͺ… λ“±)λ₯Ό λͺ…μ‹œν•©λ‹ˆλ‹€.
219
  9. ν”„λ‘¬ν”„νŠΈμ— λ‹€μŒ μš”μ†Œλ“€μ„ λͺ…μ‹œμ μœΌλ‘œ ν¬ν•¨ν•˜μ„Έμš”:
220
  - "highly detailed commercial photography"
221
  - "award-winning product photography"
@@ -311,10 +310,17 @@ def get_selected_background_info(bg_type, simple, studio, nature, indoor, abstra
311
 
312
  # --- ν”„λ‘¬ν”„νŠΈμ—μ„œ 였직 Midjourney ν”„λ‘¬ν”„νŠΈ ν…μŠ€νŠΈλ§Œ μΆ”μΆœν•˜λŠ” ν•¨μˆ˜ ---
313
  def filter_prompt_only(prompt):
314
- # "Highly detailed commercial photography" λ¬Έμžμ—΄λΆ€ν„° μ‹œμž‘ν•˜λŠ” 뢀뢄을 λ°˜ν™˜
315
  idx = prompt.find("Highly detailed commercial photography")
316
  if idx != -1:
317
- return prompt[idx:].strip()
 
 
 
 
 
 
 
318
  return prompt.strip()
319
 
320
  # ------------------- 톡합 κΈ°λŠ₯: ν”„λ‘¬ν”„νŠΈ 생성 ν›„ 이미지 생성 -------------------
@@ -344,7 +350,7 @@ def generate_product_image(image, bg_type, simple, studio, nature, indoor, abstr
344
  def create_app():
345
  with gr.Blocks(title="κ³ κΈ‰ μƒν’ˆ 이미지 λ°°κ²½ ν”„λ‘¬ν”„νŠΈ 및 이미지 생성") as demo:
346
  gr.Markdown("# κ³ κΈ‰ μƒν’ˆ 이미지 λ°°κ²½ ν”„λ‘¬ν”„νŠΈ 및 이미지 생성")
347
- gr.Markdown("μƒν’ˆ 이미지λ₯Ό μ—…λ‘œλ“œν•˜κ³ , μ œν’ˆλͺ…, λ°°κ²½ μ˜΅μ…˜, μΆ”κ°€ μš”μ²­μ‚¬ν•­μ„ μž…λ ₯ν•˜λ©΄ Gemini APIλ₯Ό 톡해 μ˜μ–΄ ν”„λ‘¬ν”„νŠΈλ₯Ό μƒμ„±ν•˜κ³ , κ·Έ ν”„λ‘¬ν”„νŠΈλ‘œ 이미지λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. μƒμ„±λœ ν”„λ‘¬ν”„νŠΈλŠ” 였직 Midjourney ν”„λ‘¬ν”„νŠΈ ν…μŠ€νŠΈλ§Œ ν‘œμ‹œλ©λ‹ˆλ‹€.")
348
  with gr.Row():
349
  with gr.Column(scale=1):
350
  product_name = gr.Textbox(label="μƒν’ˆλͺ… (ν•œκ΅­μ–΄ μž…λ ₯)", placeholder="예: μŠ€ν‚¨μΌ€μ–΄ 튜브, ν…€λΈ”λŸ¬ λ“±", interactive=True)
 
144
  valid_images = [img for img in images if img is not None]
145
  if not valid_images:
146
  return None, "이미지λ₯Ό μ—…λ‘œλ“œν•΄μ£Όμ„Έμš”.", ""
 
147
  final_prompt = prompt.strip()
148
  result_img, status = generate_with_images(final_prompt, valid_images, variation_index)
149
  if result_img is not None:
 
197
  if not ABSTRACT_BACKGROUNDS:
198
  ABSTRACT_BACKGROUNDS = {"λ„€μ˜¨ μ‘°λͺ…": "neon lights"}
199
 
200
+ # ------------------- μ‹œμŠ€ν…œ μΈμŠ€νŠΈλŸ­μ…˜ μˆ˜μ • (μƒν’ˆ 포컀슀 및 κ³ ν™”μ§ˆ λ Œλ”λ§ μΆ”κ°€) -------------------
201
  def generate_system_instruction():
202
  return """당신은 μƒν’ˆ μ΄λ―Έμ§€μ˜ 배경을 λ³€κ²½ν•˜κΈ° μœ„ν•œ κ³ ν’ˆμ§ˆ ν”„λ‘¬ν”„νŠΈλ₯Ό μƒμ„±ν•˜λŠ” μ „λ¬Έκ°€μž…λ‹ˆλ‹€.
203
  μ‚¬μš©μžκ°€ μ œκ³΅ν•˜λŠ” μƒν’ˆλͺ…, λ°°κ²½ μœ ν˜•, μΆ”κ°€ μš”μ²­μ‚¬ν•­μ„ λ°”νƒ•μœΌλ‘œ λ―Έλ“œμ €λ‹ˆ(Midjourney)에 μ‚¬μš©ν•  수 μžˆλŠ” μƒμ„Έν•˜κ³  전문적인 ν”„λ‘¬ν”„νŠΈλ₯Ό μ˜μ–΄λ‘œ μƒμ„±ν•΄μ£Όμ„Έμš”.
204
  λ‹€μŒ κ°€μ΄λ“œλΌμΈμ„ λ°˜λ“œμ‹œ μ€€μˆ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€:
205
  1. μƒν’ˆμ„ "#1"둜 μ§€μ •ν•˜μ—¬ μ°Έμ‘°ν•©λ‹ˆλ‹€. (예: "skincare tube (#1)")
206
  2. *** 맀우 μ€‘μš”: μƒν’ˆμ˜ μ›λž˜ νŠΉμ„±(λ””μžμΈ, 색상, ν˜•νƒœ, 둜고, νŒ¨ν‚€μ§€ λ“±)은 μ–΄λ–€ μƒν™©μ—μ„œλ„ μ ˆλŒ€ λ³€κ²½ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ***
207
+ 3. *** μƒν’ˆμ˜ 본질적 νŠΉμ„±μ„ μœ μ§€ν•˜λ˜, μƒν’ˆμ— 포컀슀λ₯Ό 맞좰 λͺ¨λ“  μ„ΈλΆ€ 사항이 μ„ λͺ…ν•˜κ²Œ λ“œλŸ¬λ‚˜λ„λ‘ ν•˜λ©°, κ³ ν™”μ§ˆ(ultra high resolution)둜 λ Œλ”λ§λ˜μ–΄ ν™”μ§ˆ μ €ν•˜ 없이 ν‘œν˜„λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. ***
208
  4. 이미지 λΉ„μœ¨μ€ μ •ν™•νžˆ 1:1(μ •μ‚¬κ°ν˜•) ν˜•μ‹μœΌλ‘œ μ§€μ •ν•©λ‹ˆλ‹€. ν”„λ‘¬ν”„νŠΈμ— "square format", "1:1 ratio" λ˜λŠ” "aspect ratio 1:1"을 λͺ…μ‹œμ μœΌλ‘œ ν¬ν•¨ν•©λ‹ˆλ‹€.
209
  5. μƒν’ˆμ€ λ°˜λ“œμ‹œ μ •μ‚¬κ°ν˜• κ΅¬λ„μ˜ 정쀑앙에 λ°°μΉ˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
210
  6. μƒν’ˆμ„ μ΄λ―Έμ§€μ˜ μ£Όμš” 초점으둜 λΆ€κ°μ‹œν‚€κ³ , μƒν’ˆμ˜ λΉ„μœ¨μ΄ 전체 μ΄λ―Έμ§€μ—μ„œ 크게 μ°¨μ§€ν•˜λ„λ‘ ν•©λ‹ˆλ‹€.
211
  7. μƒν’ˆ 이미지 컷아웃(#1)의 κΈ°λ³Έ ν˜•νƒœμ™€ 색상은 μœ μ§€ν•˜λ©΄μ„œ, μ„ νƒν•œ ν™˜κ²½μ— μžμ—°μŠ€λŸ½κ²Œ ν†΅ν•©λ˜λ„λ‘ ν•©λ‹ˆλ‹€.
212
  8. κ³ κΈ‰μŠ€λŸ¬μš΄ 상업적 이미지λ₯Ό μœ„ν•œ λ‹€μŒ ν™˜κ²½ μš”μ†Œλ“€μ„ ν¬ν•¨ν•˜μ„Έμš”:
213
+ - μƒν’ˆκ³Ό μ–΄μšΈλ¦¬λŠ” μ£Όλ³€ ν™˜κ²½/λ°°κ²½ μš”μ†Œ
214
+ - ν™˜κ²½μ˜ μ‘°λͺ… 효과(λ¦Ό 라이트, 백라이트, μ†Œν”„νŠΈλ°•μŠ€ λ“±)
215
+ - μžμ—°μŠ€λŸ¬μš΄ κ·Έλ¦Όμžμ™€ λΉ› ν‘œν˜„
216
+ - μƒν’ˆμ˜ μš©λ„λ‚˜ μž₯점을 μ•”μ‹œν•˜λŠ” λ°°κ²½ μš”μ†Œ
217
+ - ν”„λ‘œνŽ˜μ…”λ„ν•œ 상업 사진 효과 (피사계 심도, μ†Œν”„νŠΈ 포컀슀, μŠ€νŠœλ””μ˜€ μ‘°λͺ… λ“±)
218
  9. ν”„λ‘¬ν”„νŠΈμ— λ‹€μŒ μš”μ†Œλ“€μ„ λͺ…μ‹œμ μœΌλ‘œ ν¬ν•¨ν•˜μ„Έμš”:
219
  - "highly detailed commercial photography"
220
  - "award-winning product photography"
 
310
 
311
  # --- ν”„λ‘¬ν”„νŠΈμ—μ„œ 였직 Midjourney ν”„λ‘¬ν”„νŠΈ ν…μŠ€νŠΈλ§Œ μΆ”μΆœν•˜λŠ” ν•¨μˆ˜ ---
312
  def filter_prompt_only(prompt):
313
+ # "Highly detailed commercial photography" λ¬Έμžμ—΄λΆ€ν„° μ‹œμž‘ν•˜λŠ” 뢀뢄을 찾음
314
  idx = prompt.find("Highly detailed commercial photography")
315
  if idx != -1:
316
+ prompt_text = prompt[idx:].strip()
317
+ # "--ar 1:1 --s 750 --q 2" νŒŒλΌλ―Έν„°κΉŒμ§€ ν¬ν•¨ν•œ ν›„ κ·Έ 이후 μ„€λͺ…이 μžˆλ‹€λ©΄ 제거
318
+ end_idx = prompt_text.rfind("--ar 1:1 --s 750 --q 2")
319
+ if end_idx != -1:
320
+ # νŒŒλΌλ―Έν„° ν…μŠ€νŠΈ 길이만큼 λ”ν•΄μ„œ μž˜λΌλƒ„
321
+ end_idx += len("--ar 1:1 --s 750 --q 2")
322
+ prompt_text = prompt_text[:end_idx].strip()
323
+ return prompt_text
324
  return prompt.strip()
325
 
326
  # ------------------- 톡합 κΈ°λŠ₯: ν”„λ‘¬ν”„νŠΈ 생성 ν›„ 이미지 생성 -------------------
 
350
  def create_app():
351
  with gr.Blocks(title="κ³ κΈ‰ μƒν’ˆ 이미지 λ°°κ²½ ν”„λ‘¬ν”„νŠΈ 및 이미지 생성") as demo:
352
  gr.Markdown("# κ³ κΈ‰ μƒν’ˆ 이미지 λ°°κ²½ ν”„λ‘¬ν”„νŠΈ 및 이미지 생성")
353
+ gr.Markdown("μƒν’ˆ 이미지λ₯Ό μ—…λ‘œλ“œν•˜κ³ , μ œν’ˆλͺ…, λ°°κ²½ μ˜΅μ…˜, μΆ”κ°€ μš”μ²­μ‚¬ν•­μ„ μž…λ ₯ν•˜λ©΄ Gemini APIλ₯Ό 톡해 μ˜μ–΄ ν”„λ‘¬ν”„νŠΈλ₯Ό μƒμ„±ν•˜κ³ , κ·Έ ν”„λ‘¬ν”„νŠΈλ‘œ 이미지λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. μƒμ„±λœ ν”„λ‘¬ν”„νŠΈλŠ” λΆˆν•„μš”ν•œ μ„€λͺ… 없이 였직 Midjourney ν”„λ‘¬ν”„νŠΈ ν…μŠ€νŠΈλ§Œ ν‘œμ‹œλ©λ‹ˆλ‹€.")
354
  with gr.Row():
355
  with gr.Column(scale=1):
356
  product_name = gr.Textbox(label="μƒν’ˆλͺ… (ν•œκ΅­μ–΄ μž…λ ₯)", placeholder="예: μŠ€ν‚¨μΌ€μ–΄ 튜브, ν…€λΈ”λŸ¬ λ“±", interactive=True)