Update app.py
Browse files
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. *** μνμ λ³Έμ§μ νΉμ±μ μ μ§νλ, μνμ ν¬μ»€μ€λ₯Ό λ§μΆ° λͺ¨λ μΈλΆ μ¬νμ΄ μ λͺ
νκ² λλ¬λλλ‘
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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)
|