Kims12 commited on
Commit
61b020a
ยท
verified ยท
1 Parent(s): 4793701

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -107
app.py CHANGED
@@ -10,111 +10,29 @@ GEMINI_API_KEY = os.environ.get("GEMINI_API_KEY", "")
10
  # Gemini API ์ดˆ๊ธฐํ™”
11
  genai.configure(api_key=GEMINI_API_KEY)
12
 
13
- # ๋ฐฐ๊ฒฝ ์˜ต์…˜ - ๊ฐ„๋‹จํžˆ ๊ตฌ๋ถ„
14
- # 1. ์‹ฌํ”Œ ๋ฐฐ๊ฒฝ (๋ฏธ๋‹ˆ๋ฉ€ํ•œ ๋ฐฐ๊ฒฝ, ๋‹จ์ƒ‰ ๋ฐฐ๊ฒฝ ๋“ฑ)
15
- SIMPLE_BACKGROUNDS = {
16
- "ํ™”์ดํŠธ ๋ฐฐ๊ฒฝ": "white background",
17
- "๋ธ”๋ž™ ๋ฐฐ๊ฒฝ": "black background",
18
- "๊ทธ๋ผ๋ฐ์ด์…˜ ๋ฐฐ๊ฒฝ": "gradient background",
19
- "๋ฒ ์ด์ง€ ๋ฐฐ๊ฒฝ": "beige background",
20
- "๊ทธ๋ ˆ์ด ๋ฐฐ๊ฒฝ": "gray background",
21
- "ํŒŒ์Šคํ…” ๋ฐฐ๊ฒฝ": "pastel background",
22
- "๊ทธ๋ฆฐ ๋ฐฐ๊ฒฝ": "green background",
23
- "๋ธ”๋ฃจ ๋ฐฐ๊ฒฝ": "blue background",
24
- "ํ•‘ํฌ ๋ฐฐ๊ฒฝ": "pink background",
25
- "์˜๋กœ์šฐ ๋ฐฐ๊ฒฝ": "yellow background",
26
- "ํผํ”Œ ๋ฐฐ๊ฒฝ": "purple background",
27
- "์˜ค๋ Œ์ง€ ๋ฐฐ๊ฒฝ": "orange background",
28
- "๋ธŒ๋ผ์šด ๋ฐฐ๊ฒฝ": "brown background",
29
- "๋ฏผํŠธ ๋ฐฐ๊ฒฝ": "mint background",
30
- "๋ผ๋ฒค๋” ๋ฐฐ๊ฒฝ": "lavender background",
31
- "์ฝ”๋ž„ ๋ฐฐ๊ฒฝ": "coral background",
32
- "ํ„ฐ์ฟผ์ด์ฆˆ ๋ฐฐ๊ฒฝ": "turquoise background",
33
- "๋„ค์ด๋น„ ๋ฐฐ๊ฒฝ": "navy background",
34
- "์ƒŒ๋“œ ๋ฐฐ๊ฒฝ": "sand background",
35
- "ํŽ˜์ดํผ ๋ฐฐ๊ฒฝ": "paper background"
36
- }
37
 
38
- # 2. ์ŠคํŠœ๋””์˜ค ๋ฐฐ๊ฒฝ (์ œํ’ˆ ์‚ฌ์ง„ ์ŠคํŠœ๋””์˜ค ๋А๋‚Œ)
39
- STUDIO_BACKGROUNDS = {
40
- "์ œํ’ˆ ์‚ฌ์ง„ ์ŠคํŠœ๋””์˜ค": "product photography studio",
41
- "๋ฏธ๋‹ˆ๋ฉ€ ์ŠคํŠœ๋””์˜ค": "minimal studio",
42
- "ํ•˜์ดํ‚ค ์ŠคํŠœ๋””์˜ค": "high key studio",
43
- "๋กœ์šฐํ‚ค ์ŠคํŠœ๋””์˜ค": "low key studio",
44
- "์†Œํ”„ํŠธ๋ฐ•์Šค ์กฐ๋ช…": "softbox lighting studio",
45
- "๋ง๋ผ์ดํŠธ ์ŠคํŠœ๋””์˜ค": "ring light studio",
46
- "๋ฆฌํ”Œ๋ ‰ํ„ฐ ์ŠคํŠœ๋””์˜ค": "reflector studio",
47
- "๊ทธ๋ฆผ์ž ์ŠคํŠœ๋””์˜ค": "shadow studio",
48
- "๋ฐฑ๋ผ์ดํŠธ ์ŠคํŠœ๋””์˜ค": "backlight studio",
49
- "์‚ฌ์ด๋“œ๋ผ์ดํŠธ ์ŠคํŠœ๋””์˜ค": "sidelight studio",
50
- "์ŠคํฌํŠธ๋ผ์ดํŠธ ์ŠคํŠœ๋””์˜ค": "spotlight studio",
51
- "ํ…์Šค์ฒ˜ ๋ฐฐ๊ฒฝ ์ŠคํŠœ๋””์˜ค": "textured background studio",
52
- "๋Œ€๋ฆฌ์„ ๋ฐฐ๊ฒฝ ์ŠคํŠœ๋””์˜ค": "marble background studio",
53
- "์ฝ˜ํฌ๋ฆฌํŠธ ๋ฐฐ๊ฒฝ ์ŠคํŠœ๋””์˜ค": "concrete background studio",
54
- "์šฐ๋“œ ๋ฐฐ๊ฒฝ ์ŠคํŠœ๋””์˜ค": "wooden background studio",
55
- "ํŒจ๋ธŒ๋ฆญ ๋ฐฐ๊ฒฝ ์ŠคํŠœ๋””์˜ค": "fabric background studio",
56
- "๊ธ€๋ž˜์Šค ํ‘œ๋ฉด ์ŠคํŠœ๋””์˜ค": "glass surface studio",
57
- "๋ฉ”ํƒˆ ํ‘œ๋ฉด ์ŠคํŠœ๋””์˜ค": "metal surface studio",
58
- "๋ฐ˜์‚ฌ ํ‘œ๋ฉด ์ŠคํŠœ๋””์˜ค": "reflective surface studio",
59
- "๋งคํŠธ ํ‘œ๋ฉด ์ŠคํŠœ๋””์˜ค": "matte surface studio"
60
- }
61
 
62
- # 3. ์ž์—ฐ ํ™˜๊ฒฝ
63
- NATURE_BACKGROUNDS = {
64
- "์—ด๋Œ€ ํ•ด๋ณ€": "tropical beach",
65
- "ํ‘ธ๋ฅธ ๋ฐ”๋‹ค": "blue ocean",
66
- "์‚ฐ ํ’๊ฒฝ": "mountain landscape",
67
- "์ˆฒ ํ’๊ฒฝ": "forest landscape",
68
- "๊ฝƒ๋ฐญ": "flower garden",
69
- "์ดˆ์›": "meadow",
70
- "์‚ฌ๋ง‰": "desert",
71
- "๊ฐ•๊ฐ€": "riverside",
72
- "ํ˜ธ์ˆ˜๊ฐ€": "lakeside",
73
- "ํญํฌ": "waterfall",
74
- "์ผ๋ชฐ ํ’๊ฒฝ": "sunset landscape",
75
- "์ผ์ถœ ํ’๊ฒฝ": "sunrise landscape",
76
- "์•ˆ๊ฐœ ๋‚€ ํ’๊ฒฝ": "foggy landscape",
77
- "๋ณ„์ด ๋น›๋‚˜๋Š” ํ•˜๋Š˜": "starry sky",
78
- "๋ˆˆ ๋ฎ์ธ ํ’๊ฒฝ": "snowy landscape"
79
- }
80
-
81
- # 4. ์‹ค๋‚ด ํ™˜๊ฒฝ
82
- INDOOR_BACKGROUNDS = {
83
- "๋ชจ๋˜ ๋ฆฌ๋น™๋ฃธ": "modern living room",
84
- "๋ฏธ๋‹ˆ๋ฉ€ ์ฃผ๋ฐฉ": "minimal kitchen",
85
- "๋Ÿญ์…”๋ฆฌ ์š•์‹ค": "luxury bathroom",
86
- "์นจ์‹ค": "bedroom",
87
- "ํ™ˆ ์˜คํ”ผ์Šค": "home office",
88
- "์นดํŽ˜": "cafe",
89
- "๋ ˆ์Šคํ† ๋ž‘": "restaurant",
90
- "ํ˜ธํ…” ๋กœ๋น„": "hotel lobby",
91
- "์•„ํŠธ ๊ฐค๋Ÿฌ๋ฆฌ": "art gallery",
92
- "์„œ์žฌ": "library",
93
- "์ŠคํŒŒ": "spa",
94
- "์‡ผ๋ฃธ": "showroom",
95
- "๋ถ€ํ‹ฐํฌ": "boutique",
96
- "ํŽธ์ง‘์ƒต": "concept store",
97
- "์ผ๋ณธ์‹ ์ธํ…Œ๋ฆฌ์–ด": "japanese interior"
98
- }
99
 
100
- # 5. ์ถ”์ƒ/ํŠน์ˆ˜ ๋ฐฐ๊ฒฝ
101
- ABSTRACT_BACKGROUNDS = {
102
- "๋„ค์˜จ ์กฐ๋ช…": "neon lights",
103
- "์œ ์ฒด ์ถ”์ƒํ™”": "fluid abstract",
104
- "๊ธฐํ•˜ํ•™์  ํŒจํ„ด": "geometric patterns",
105
- "๋ฏธ๋‹ˆ๋ฉ€ ์ถ”์ƒ": "minimal abstract",
106
- "๋„ค์˜จ ์ถ”์ƒ": "neon abstract",
107
- "๊ฐ€์ƒ ํ™˜๊ฒฝ": "virtual environment",
108
- "ํŒํƒ€์ง€ ์„ธ๊ณ„": "fantasy world",
109
- "๊ณต์ƒ๊ณผํ•™ ๋ฐฐ๊ฒฝ": "sci-fi background",
110
- "๋””์ง€ํ„ธ ์„ธ๊ณ„": "digital world",
111
- "์šฐ์ฃผ ๊ณต๊ฐ„": "outer space",
112
- "๋ฏธ๋ž˜ ๋„์‹œ": "future city",
113
- "ํŒํƒ€์ง€ ์ž์—ฐ": "fantasy nature",
114
- "๊ธ€๋ฆฌ์น˜ ํšจ๊ณผ": "glitch effect",
115
- "ํ™€๋กœ๊ทธ๋žจ ๋ฐฐ๊ฒฝ": "hologram background",
116
- "์ž…์ž ํšจ๊ณผ": "particle effect"
117
- }
118
 
119
  def generate_system_instruction():
120
  return """๋‹น์‹ ์€ ์ƒํ’ˆ ์ด๋ฏธ์ง€์˜ ๋ฐฐ๊ฒฝ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ํ’ˆ์งˆ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค.
@@ -234,7 +152,7 @@ def create_app():
234
  with gr.TabItem("์‹ฌํ”Œ ๋ฐฐ๊ฒฝ"):
235
  simple_dropdown = gr.Dropdown(
236
  choices=list(SIMPLE_BACKGROUNDS.keys()),
237
- value=list(SIMPLE_BACKGROUNDS.keys())[0],
238
  label="์‹ฌํ”Œ ๋ฐฐ๊ฒฝ ์„ ํƒ",
239
  interactive=True
240
  )
@@ -242,7 +160,7 @@ def create_app():
242
  with gr.TabItem("์ŠคํŠœ๋””์˜ค ๋ฐฐ๊ฒฝ"):
243
  studio_dropdown = gr.Dropdown(
244
  choices=list(STUDIO_BACKGROUNDS.keys()),
245
- value=list(STUDIO_BACKGROUNDS.keys())[0],
246
  label="์ŠคํŠœ๋””์˜ค ๋ฐฐ๊ฒฝ ์„ ํƒ",
247
  interactive=True
248
  )
@@ -250,7 +168,7 @@ def create_app():
250
  with gr.TabItem("์ž์—ฐ ํ™˜๊ฒฝ"):
251
  nature_dropdown = gr.Dropdown(
252
  choices=list(NATURE_BACKGROUNDS.keys()),
253
- value=list(NATURE_BACKGROUNDS.keys())[0],
254
  label="์ž์—ฐ ํ™˜๊ฒฝ ์„ ํƒ",
255
  interactive=True
256
  )
@@ -258,7 +176,7 @@ def create_app():
258
  with gr.TabItem("์‹ค๋‚ด ํ™˜๊ฒฝ"):
259
  indoor_dropdown = gr.Dropdown(
260
  choices=list(INDOOR_BACKGROUNDS.keys()),
261
- value=list(INDOOR_BACKGROUNDS.keys())[0],
262
  label="์‹ค๋‚ด ํ™˜๊ฒฝ ์„ ํƒ",
263
  interactive=True
264
  )
@@ -266,7 +184,7 @@ def create_app():
266
  with gr.TabItem("์ถ”์ƒ/ํŠน์ˆ˜ ๋ฐฐ๊ฒฝ"):
267
  abstract_dropdown = gr.Dropdown(
268
  choices=list(ABSTRACT_BACKGROUNDS.keys()),
269
- value=list(ABSTRACT_BACKGROUNDS.keys())[0],
270
  label="์ถ”์ƒ/ํŠน์ˆ˜ ๋ฐฐ๊ฒฝ ์„ ํƒ",
271
  interactive=True
272
  )
 
10
  # Gemini API ์ดˆ๊ธฐํ™”
11
  genai.configure(api_key=GEMINI_API_KEY)
12
 
13
+ # ๋ฐฐ๊ฒฝ JSON ํŒŒ์ผ ๊ฒฝ๋กœ ์„ค์ •
14
+ BACKGROUNDS_DIR = os.path.join(os.path.dirname(__file__), "background")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
 
16
+ # JSON ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
17
+ if not os.path.exists(BACKGROUNDS_DIR):
18
+ os.makedirs(BACKGROUNDS_DIR)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
 
20
+ # JSON ํŒŒ์ผ ๋กœ๋“œ ํ•จ์ˆ˜
21
+ def load_background_json(filename):
22
+ file_path = os.path.join(BACKGROUNDS_DIR, filename)
23
+ try:
24
+ with open(file_path, 'r', encoding='utf-8') as f:
25
+ return json.load(f)
26
+ except FileNotFoundError:
27
+ print(f"๊ฒฝ๊ณ : {filename} ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.")
28
+ return {}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
 
30
+ # ๋ฐฐ๊ฒฝ ๋ฐ์ดํ„ฐ ๋กœ๋“œ
31
+ SIMPLE_BACKGROUNDS = load_background_json("simple_backgrounds.json")
32
+ STUDIO_BACKGROUNDS = load_background_json("studio_backgrounds.json")
33
+ NATURE_BACKGROUNDS = load_background_json("nature_backgrounds.json")
34
+ INDOOR_BACKGROUNDS = load_background_json("indoor_backgrounds.json")
35
+ ABSTRACT_BACKGROUNDS = load_background_json("abstract_backgrounds.json")
 
 
 
 
 
 
 
 
 
 
 
 
36
 
37
  def generate_system_instruction():
38
  return """๋‹น์‹ ์€ ์ƒํ’ˆ ์ด๋ฏธ์ง€์˜ ๋ฐฐ๊ฒฝ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ํ’ˆ์งˆ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค.
 
152
  with gr.TabItem("์‹ฌํ”Œ ๋ฐฐ๊ฒฝ"):
153
  simple_dropdown = gr.Dropdown(
154
  choices=list(SIMPLE_BACKGROUNDS.keys()),
155
+ value=list(SIMPLE_BACKGROUNDS.keys())[0] if SIMPLE_BACKGROUNDS else None,
156
  label="์‹ฌํ”Œ ๋ฐฐ๊ฒฝ ์„ ํƒ",
157
  interactive=True
158
  )
 
160
  with gr.TabItem("์ŠคํŠœ๋””์˜ค ๋ฐฐ๊ฒฝ"):
161
  studio_dropdown = gr.Dropdown(
162
  choices=list(STUDIO_BACKGROUNDS.keys()),
163
+ value=list(STUDIO_BACKGROUNDS.keys())[0] if STUDIO_BACKGROUNDS else None,
164
  label="์ŠคํŠœ๋””์˜ค ๋ฐฐ๊ฒฝ ์„ ํƒ",
165
  interactive=True
166
  )
 
168
  with gr.TabItem("์ž์—ฐ ํ™˜๊ฒฝ"):
169
  nature_dropdown = gr.Dropdown(
170
  choices=list(NATURE_BACKGROUNDS.keys()),
171
+ value=list(NATURE_BACKGROUNDS.keys())[0] if NATURE_BACKGROUNDS else None,
172
  label="์ž์—ฐ ํ™˜๊ฒฝ ์„ ํƒ",
173
  interactive=True
174
  )
 
176
  with gr.TabItem("์‹ค๋‚ด ํ™˜๊ฒฝ"):
177
  indoor_dropdown = gr.Dropdown(
178
  choices=list(INDOOR_BACKGROUNDS.keys()),
179
+ value=list(INDOOR_BACKGROUNDS.keys())[0] if INDOOR_BACKGROUNDS else None,
180
  label="์‹ค๋‚ด ํ™˜๊ฒฝ ์„ ํƒ",
181
  interactive=True
182
  )
 
184
  with gr.TabItem("์ถ”์ƒ/ํŠน์ˆ˜ ๋ฐฐ๊ฒฝ"):
185
  abstract_dropdown = gr.Dropdown(
186
  choices=list(ABSTRACT_BACKGROUNDS.keys()),
187
+ value=list(ABSTRACT_BACKGROUNDS.keys())[0] if ABSTRACT_BACKGROUNDS else None,
188
  label="์ถ”์ƒ/ํŠน์ˆ˜ ๋ฐฐ๊ฒฝ ์„ ํƒ",
189
  interactive=True
190
  )