Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -11,88 +11,88 @@ class ConceptAnalyzer:
|
|
11 |
def __init__(self):
|
12 |
self.monthly_data = {
|
13 |
"1월": {
|
14 |
-
"special_days": ["미니멀 챌린지", "새해 리셋", "
|
15 |
-
"trends": ["미니멀", "자기계발", "플래너", "정리정돈"],
|
16 |
"colors": ["#FF6B6B", "#4ECDC4", "#45B7D1"],
|
17 |
"mood": "희망적이고 새로운 시작",
|
18 |
-
"female_appeal": ["미니멀", "자기계발", "셀프케어"]
|
19 |
},
|
20 |
"2월": {
|
21 |
-
"special_days": ["갈렌타인데이", "셀프러브", "사랑의 달"],
|
22 |
-
"trends": ["셀프러브", "갈렌타인", "로맨스", "따뜻한 감성"],
|
23 |
"colors": ["#FF69B4", "#FFB6C1", "#DC143C"],
|
24 |
"mood": "로맨틱하고 감성적",
|
25 |
-
"female_appeal": ["셀프러브", "우정", "로맨스"]
|
26 |
},
|
27 |
"3월": {
|
28 |
-
"special_days": ["여성의 날", "봄의 시작", "새학기"],
|
29 |
-
"trends": ["봄맞이", "벚꽃 시즌", "봄 패션", "새출발"],
|
30 |
"colors": ["#FFB6C1", "#98FB98", "#87CEEB"],
|
31 |
"mood": "설렘가득하고 활기찬",
|
32 |
-
"female_appeal": ["봄 패션", "꽃구경", "새출발"]
|
33 |
},
|
34 |
"4월": {
|
35 |
-
"special_days": ["벚꽃 시즌", "봄나들이", "피크닉"],
|
36 |
-
"trends": ["벚꽃축제", "봄피크닉", "아웃도어", "꽃놀이"],
|
37 |
"colors": ["#98FB98", "#F0E68C", "#DDA0DD"],
|
38 |
"mood": "생기발랄하고 즐거운",
|
39 |
-
"female_appeal": ["벚꽃놀이", "피크닉", "봄여행"]
|
40 |
},
|
41 |
"5월": {
|
42 |
-
"special_days": ["로즈데이", "감사의 달", "
|
43 |
-
"trends": ["감사", "나들이", "로즈데이", "봄여행"],
|
44 |
"colors": ["#32CD32", "#FFB6C1", "#87CEEB"],
|
45 |
"mood": "따뜻하고 감사한",
|
46 |
-
"female_appeal": ["로즈데이", "감사표현", "힐링"]
|
47 |
},
|
48 |
"6월": {
|
49 |
-
"special_days": ["키스데이", "여름 준비", "쿨링"],
|
50 |
-
"trends": ["여름준비", "쿨링", "바캉스준비", "여름패션"],
|
51 |
"colors": ["#00CED1", "#FFD700", "#FF6347"],
|
52 |
"mood": "시원하고 활동적인",
|
53 |
-
"female_appeal": ["여름준비", "쿨링케어", "바캉스"]
|
54 |
},
|
55 |
"7월": {
|
56 |
-
"special_days": ["실버데이", "여름휴가", "바캉스"],
|
57 |
-
"trends": ["여름휴가", "바캉스", "휴가패션", "여행"],
|
58 |
"colors": ["#00BFFF", "#FFD700", "#FF6347"],
|
59 |
"mood": "역동적이고 자유로운",
|
60 |
-
"female_appeal": ["바캉스", "여행", "휴가패션"]
|
61 |
},
|
62 |
"8월": {
|
63 |
-
"special_days": ["
|
64 |
-
"trends": ["여름휴가", "바다여행", "축제", "여름추억"],
|
65 |
"colors": ["#00BFFF", "#FF6347", "#FFD700"],
|
66 |
"mood": "열정적이고 추억가득한",
|
67 |
-
"female_appeal": ["여름추억", "힐링", "여행"]
|
68 |
},
|
69 |
"9월": {
|
70 |
-
"special_days": ["포토데이", "뮤직데이", "가을시작"],
|
71 |
-
"trends": ["가을패션", "독서", "문화생활", "감성"],
|
72 |
"colors": ["#FF8C00", "#DC143C", "#B8860B"],
|
73 |
"mood": "감성적이고 성숙한",
|
74 |
-
"female_appeal": ["가을패션", "카페", "독서"]
|
75 |
},
|
76 |
"10월": {
|
77 |
-
"special_days": ["와인데이", "커피데이", "독서의 달"],
|
78 |
-
"trends": ["가을단풍", "독서", "카페문화", "와인"],
|
79 |
"colors": ["#FF8C00", "#DC143C", "#B8860B"],
|
80 |
"mood": "감성적이고 여유로운",
|
81 |
-
"female_appeal": ["단풍구경", "카페", "와인"]
|
82 |
},
|
83 |
"11월": {
|
84 |
-
"special_days": ["무비데이", "오렌지데이", "연말준비"],
|
85 |
-
"trends": ["빼빼로데이", "연말준비", "겨울패션", "따뜻함"],
|
86 |
"colors": ["#8B4513", "#A0522D", "#CD853F"],
|
87 |
"mood": "포근하고 준비하는",
|
88 |
-
"female_appeal": ["빼빼로데이", "겨울패션", "연말모임"]
|
89 |
},
|
90 |
"12월": {
|
91 |
-
"special_days": ["허그데이", "연말파티", "송년"],
|
92 |
-
"trends": ["크리스마스", "연말파티", "선물", "송년회"],
|
93 |
"colors": ["#DC143C", "#228B22", "#FFD700"],
|
94 |
"mood": "축제같고 따뜻한",
|
95 |
-
"female_appeal": ["크리스마스", "연말모임", "선물"]
|
96 |
}
|
97 |
}
|
98 |
|
@@ -126,43 +126,39 @@ class ConceptAnalyzer:
|
|
126 |
|
127 |
concepts = []
|
128 |
|
129 |
-
|
130 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
concepts.append({
|
132 |
-
"name":
|
133 |
-
"theme":
|
134 |
-
"score":
|
135 |
-
"reason": f"20-40대
|
136 |
"target": "20-40대 여성",
|
137 |
"colors": data.get("colors", ["#FF69B4"]),
|
138 |
-
"keywords":
|
139 |
-
"is_recommended":
|
140 |
-
})
|
141 |
-
|
142 |
-
if data.get("trends"):
|
143 |
-
trend = data["trends"][0]
|
144 |
-
concepts.append({
|
145 |
-
"name": f"{trend} 챌린지",
|
146 |
-
"theme": f"{trend} 트렌드 참여형 이벤트",
|
147 |
-
"score": 8.0,
|
148 |
-
"reason": f"인기 {trend} 트렌드로 높은 관심도",
|
149 |
-
"target": "20-30대 트렌드 민감층",
|
150 |
-
"colors": data.get("colors", ["#4ECDC4"]),
|
151 |
-
"keywords": data.get("trends", [])[:3],
|
152 |
-
"is_recommended": False
|
153 |
})
|
154 |
|
155 |
-
concepts.append({
|
156 |
-
"name": f"{month} 셀프케어 위크",
|
157 |
-
"theme": "나를 위한 특별한 시간",
|
158 |
-
"score": 8.3,
|
159 |
-
"reason": "셀프케어로 강한 어필",
|
160 |
-
"target": "20-40대 여성",
|
161 |
-
"colors": data.get("colors", ["#FFB6C1"]),
|
162 |
-
"keywords": ["셀프케어", "힐링", "나를 위한 시간"],
|
163 |
-
"is_recommended": True
|
164 |
-
})
|
165 |
-
|
166 |
concepts.sort(key=lambda x: (x.get("is_recommended", False), x["score"]), reverse=True)
|
167 |
|
168 |
recommended_concept = next((c for c in concepts if c.get("is_recommended", False)), concepts[0])
|
@@ -190,6 +186,87 @@ class ConceptAnalyzer:
|
|
190 |
|
191 |
return result, concept_names
|
192 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
193 |
# ================== 이벤트 관리 모듈 ==================
|
194 |
class EventManager:
|
195 |
def __init__(self):
|
@@ -510,6 +587,14 @@ def create_interface():
|
|
510 |
visible=False
|
511 |
)
|
512 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
513 |
with gr.Column():
|
514 |
concept_result = gr.Textbox(
|
515 |
label="컨셉 분석 결과",
|
|
|
11 |
def __init__(self):
|
12 |
self.monthly_data = {
|
13 |
"1월": {
|
14 |
+
"special_days": ["미니멀 챌린지", "새해 리셋", "건강한 습관 만들기", "갓생 챌린지", "21일 습관 만들기"],
|
15 |
+
"trends": ["미니멀", "자기계발", "플래너", "정리정돈", "갓생살기", "건강한 루틴", "새해 결심", "미라클 모닝", "홈트", "독서"],
|
16 |
"colors": ["#FF6B6B", "#4ECDC4", "#45B7D1"],
|
17 |
"mood": "희망적이고 새로운 시작",
|
18 |
+
"female_appeal": ["미니멀", "자기계발", "셀프케어", "건강한 습관", "갓생"]
|
19 |
},
|
20 |
"2월": {
|
21 |
+
"special_days": ["갈렌타인데이", "셀프러브", "사랑의 달", "자기사랑 챌린지", "따뜻한 마음 나누기"],
|
22 |
+
"trends": ["셀프러브", "갈렌타인", "로맨스", "따뜻한 감성", "자기사랑", "친구사랑", "감성 카페", "겨울 데이트", "따뜻한 차", "아늑한 집콕"],
|
23 |
"colors": ["#FF69B4", "#FFB6C1", "#DC143C"],
|
24 |
"mood": "로맨틱하고 감성적",
|
25 |
+
"female_appeal": ["셀프러브", "우정", "로맨스", "자기사랑", "갈렌타인"]
|
26 |
},
|
27 |
"3월": {
|
28 |
+
"special_days": ["여성의 날", "봄의 시작", "새학기", "벚꽃 예보", "봄맞이 준비"],
|
29 |
+
"trends": ["봄맞이", "벚꽃 시즌", "봄 패션", "새출발", "봄 정리", "꽃구경", "봄 여행", "라이프스타일 변화", "새 시작", "봄 데이트"],
|
30 |
"colors": ["#FFB6C1", "#98FB98", "#87CEEB"],
|
31 |
"mood": "설렘가득하고 활기찬",
|
32 |
+
"female_appeal": ["봄 패션", "꽃구경", "새출발", "라이프스타일", "봄맞이"]
|
33 |
},
|
34 |
"4월": {
|
35 |
+
"special_days": ["벚꽃 시즌", "봄나들이", "피크닉", "야외 활동", "봄 여행"],
|
36 |
+
"trends": ["벚꽃축제", "봄피크닉", "아웃도어", "꽃놀이", "야외 운동", "캠핑", "등산", "자전거", "봄 축제", "꽃구경"],
|
37 |
"colors": ["#98FB98", "#F0E68C", "#DDA0DD"],
|
38 |
"mood": "생기발랄하고 즐거운",
|
39 |
+
"female_appeal": ["벚꽃놀이", "피크닉", "봄여행", "야외활동", "꽃구경"]
|
40 |
},
|
41 |
"5월": {
|
42 |
+
"special_days": ["로즈데이", "감사의 달", "어버이날", "가정의 달", "스승의 날"],
|
43 |
+
"trends": ["감사", "나들이", "로즈데이", "봄여행", "가족사랑", "효도", "감사표현", "선물", "힐링", "여행"],
|
44 |
"colors": ["#32CD32", "#FFB6C1", "#87CEEB"],
|
45 |
"mood": "따뜻하고 감사한",
|
46 |
+
"female_appeal": ["로즈데이", "감사표현", "힐링", "가족사랑", "선물"]
|
47 |
},
|
48 |
"6월": {
|
49 |
+
"special_days": ["키스데이", "여름 준비", "쿨링", "결혼 시즌", "초여름"],
|
50 |
+
"trends": ["여름준비", "쿨링", "바캉스준비", "여름패션", "다이어트", "여름 화장품", "시원한 음료", "여름 레시피", "휴가 계획", "웨딩"],
|
51 |
"colors": ["#00CED1", "#FFD700", "#FF6347"],
|
52 |
"mood": "시원하고 활동적인",
|
53 |
+
"female_appeal": ["여름준비", "쿨링케어", "바캉스", "다이어트", "여름패션"]
|
54 |
},
|
55 |
"7월": {
|
56 |
+
"special_days": ["실버데이", "여름휴가", "바캉스", "휴가철", "여름 축제"],
|
57 |
+
"trends": ["여름휴가", "바캉스", "휴가패션", "여행", "해변", "수영장", "페스티벌", "여름 액티비티", "서핑", "다이빙"],
|
58 |
"colors": ["#00BFFF", "#FFD700", "#FF6347"],
|
59 |
"mood": "역동적이고 자유로운",
|
60 |
+
"female_appeal": ["바캉스", "여행", "휴가패션", "여름축제", "해변"]
|
61 |
},
|
62 |
"8월": {
|
63 |
+
"special_days": ["여름 마무리", "휴가", "여름 추억", "페스티벌", "야외 파티"],
|
64 |
+
"trends": ["여름휴가", "바다여행", "축제", "여름추억", "페스티벌", "야외 파티", "캠핑", "글램핑", "워터파크", "여름 간식"],
|
65 |
"colors": ["#00BFFF", "#FF6347", "#FFD700"],
|
66 |
"mood": "열정적이고 추억가득한",
|
67 |
+
"female_appeal": ["여름추억", "힐링", "여행", "페스티벌", "야외활동"]
|
68 |
},
|
69 |
"9월": {
|
70 |
+
"special_days": ["포토데이", "뮤직데이", "가을시작", "독서의 계절", "문화생활"],
|
71 |
+
"trends": ["가을패션", "독서", "문화생활", "감성", "카페", "전시회", "공연", "예술", "취미", "자기계발"],
|
72 |
"colors": ["#FF8C00", "#DC143C", "#B8860B"],
|
73 |
"mood": "감성적이고 성숙한",
|
74 |
+
"female_appeal": ["가을패션", "카페", "독서", "문화생활", "취미"]
|
75 |
},
|
76 |
"10월": {
|
77 |
+
"special_days": ["와인데이", "커피데이", "독서의 달", "할로윈", "가을 여행"],
|
78 |
+
"trends": ["가을단풍", "독서", "카페문화", "와인", "할로윈", "단풍구경", "등산", "가을 여행", "코스모스", "감성 사진"],
|
79 |
"colors": ["#FF8C00", "#DC143C", "#B8860B"],
|
80 |
"mood": "감성적이고 여유로운",
|
81 |
+
"female_appeal": ["단풍구경", "카페", "와인", "가을여행", "할로윈"]
|
82 |
},
|
83 |
"11월": {
|
84 |
+
"special_days": ["무비데이", "오렌지데이", "연말준비", "빼빼로데이", "추수감사"],
|
85 |
+
"trends": ["빼빼로데이", "연말준비", "겨울패션", "따뜻함", "영화", "독서", "겨울 준비", "연말 모임", "따뜻한 차", "홈파티"],
|
86 |
"colors": ["#8B4513", "#A0522D", "#CD853F"],
|
87 |
"mood": "포근하고 준비하는",
|
88 |
+
"female_appeal": ["빼빼로데이", "겨울패션", "연말모임", "영화감상", "홈파티"]
|
89 |
},
|
90 |
"12월": {
|
91 |
+
"special_days": ["허그데이", "연말파티", "송년", "크리스마스", "연말 결산"],
|
92 |
+
"trends": ["크리스마스", "연말파티", "선물", "송년회", "연말 결산", "한 해 마무리", "감사", "새해 계획", "겨울 데이트", "홈파티"],
|
93 |
"colors": ["#DC143C", "#228B22", "#FFD700"],
|
94 |
"mood": "축제같고 따뜻한",
|
95 |
+
"female_appeal": ["크리스마스", "연말모임", "선물", "한해마무리", "감사"]
|
96 |
}
|
97 |
}
|
98 |
|
|
|
126 |
|
127 |
concepts = []
|
128 |
|
129 |
+
# 10개의 다양한 컨셉 생성
|
130 |
+
special_days = data.get("special_days", [])
|
131 |
+
trends = data.get("trends", [])
|
132 |
+
female_appeal = data.get("female_appeal", [])
|
133 |
+
|
134 |
+
for i in range(min(10, len(special_days) + len(trends))):
|
135 |
+
if i < len(special_days):
|
136 |
+
concept_name = f"{special_days[i]} 이벤트"
|
137 |
+
theme = f"{special_days[i]}를 테마로 한 참여형 이벤트"
|
138 |
+
keywords = [special_days[i]] + female_appeal[:2]
|
139 |
+
score = 8.8 - (i * 0.1)
|
140 |
+
is_recommended = i < 3
|
141 |
+
else:
|
142 |
+
trend_idx = i - len(special_days)
|
143 |
+
if trend_idx < len(trends):
|
144 |
+
trend = trends[trend_idx]
|
145 |
+
concept_name = f"{trend} 챌린지"
|
146 |
+
theme = f"{trend} 참여형 챌린지 이벤트"
|
147 |
+
keywords = [trend] + trends[trend_idx+1:trend_idx+3]
|
148 |
+
score = 8.0 - (trend_idx * 0.1)
|
149 |
+
is_recommended = trend_idx < 2
|
150 |
+
|
151 |
concepts.append({
|
152 |
+
"name": concept_name,
|
153 |
+
"theme": theme,
|
154 |
+
"score": round(score, 1),
|
155 |
+
"reason": f"20-40대 여성에게 인기 높은 {concept_name.split()[0]} 테마",
|
156 |
"target": "20-40대 여성",
|
157 |
"colors": data.get("colors", ["#FF69B4"]),
|
158 |
+
"keywords": keywords,
|
159 |
+
"is_recommended": is_recommended
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
160 |
})
|
161 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
162 |
concepts.sort(key=lambda x: (x.get("is_recommended", False), x["score"]), reverse=True)
|
163 |
|
164 |
recommended_concept = next((c for c in concepts if c.get("is_recommended", False)), concepts[0])
|
|
|
186 |
|
187 |
return result, concept_names
|
188 |
|
189 |
+
def generate_trendy_copy(self, concept_name, month):
|
190 |
+
"""트렌디한 카피라이팅 생성 - 더 다양한 패턴 추가"""
|
191 |
+
|
192 |
+
trendy_copies = {
|
193 |
+
"미니멀": {
|
194 |
+
"sub1": "🌟 '나는 정리를 못하는 여자'는 이제 그만!",
|
195 |
+
"main": "미니멀은 '미'니로 '말'하는 거야, 작게 말해도 큰 변화! ✨",
|
196 |
+
"sub2": "올해는 진짜 '갓생'을 살아보자구요! 💪",
|
197 |
+
"hashtags": ["#갓생살기", "#미니멀", "#정리의신", "#새해정리"]
|
198 |
+
},
|
199 |
+
"셀프케어": {
|
200 |
+
"sub1": "💕 '나 자신과 연애 중'이라고 말할 수 있나요?",
|
201 |
+
"main": "셀프케어는 '셀프'로 '케어'하는 거 맞아! 💖",
|
202 |
+
"sub2": "오늘부터 내가 내 최고의 친구가 되는 거야 ✨",
|
203 |
+
"hashtags": ["#셀프케어", "#나를위한시간", "#힐링", "#자기사랑"]
|
204 |
+
},
|
205 |
+
"갓생": {
|
206 |
+
"sub1": "✨ 매일 똑같은 하루가 지겨우신가요?",
|
207 |
+
"main": "갓생은 '갓'처럼 살아보자는 거야! 너도 할 수 있어 🔥",
|
208 |
+
"sub2": "작은 변화가 큰 행복을 만들어요 💫",
|
209 |
+
"hashtags": ["#갓생살기", "#미라클모닝", "#자기계발", "#루틴만들기"]
|
210 |
+
},
|
211 |
+
"챌린지": {
|
212 |
+
"sub1": "🎯 혼자서는 어려워도 함께라면 가능해!",
|
213 |
+
"main": "챌린지는 '챌'만 해봐도 성공이야! 도전해볼까? 🚀",
|
214 |
+
"sub2": "우리 함께 새로운 나를 만나러 가요 ✨",
|
215 |
+
"hashtags": ["#챌린지", "#함께해요", "#새로운나", "#도전"]
|
216 |
+
},
|
217 |
+
"벚꽃": {
|
218 |
+
"sub1": "🌸 봄이 왔어요! 설레는 마음 준비되셨나요?",
|
219 |
+
"main": "벚꽃은 '벚'보다 '꽃'이 중요해! 꽃처럼 예쁘게 피어나요 🌺",
|
220 |
+
"sub2": "짧지만 아름다운 순간을 함께 만들어요 💕",
|
221 |
+
"hashtags": ["#벚꽃놀이", "#봄나들이", "#꽃구경", "#봄감성"]
|
222 |
+
},
|
223 |
+
"바캉스": {
|
224 |
+
"sub1": "🏖️ 더위는 싫어도 여름은 좋아하는 사람?",
|
225 |
+
"main": "바캉스는 '바'쁜 일상에서 '캉'스럽게 쉬는 거야! 🌊",
|
226 |
+
"sub2": "올여름 가장 핫한 추억을 만들어봐요 🔥",
|
227 |
+
"hashtags": ["#바캉스", "#여름휴가", "#힐링여행", "#여름추억"]
|
228 |
+
},
|
229 |
+
"카페": {
|
230 |
+
"sub1": "☕ 오늘도 카페인에 의존하며 살고 계신가요?",
|
231 |
+
"main": "카페는 '카'페인보다 '페'이스북 같은 소통공간! 📸",
|
232 |
+
"sub2": "따뜻한 커피 한 잔으로 시작하는 특별한 하루 ✨",
|
233 |
+
"hashtags": ["#카페투어", "#커피타임", "#감성카페", "#카페추천"]
|
234 |
+
},
|
235 |
+
"크리스마스": {
|
236 |
+
"sub1": "🎄 올해 크리스마스는 뭔가 특별하게 보내고 싶다면?",
|
237 |
+
"main": "크리스마스는 '크'게 '리'액션하며 '스'페셜하게! 🎅",
|
238 |
+
"sub2": "따뜻한 마음이 가득한 연말을 함께 만들어요 💝",
|
239 |
+
"hashtags": ["#크리스마스", "#연말파티", "#선물", "#따뜻한연말"]
|
240 |
+
}
|
241 |
+
}
|
242 |
+
|
243 |
+
# 기본 카피
|
244 |
+
default_copy = {
|
245 |
+
"sub1": "✨ 이런 특별한 순간을 놓칠 수 없죠!",
|
246 |
+
"main": "지금 이 순간이 바로 '찐'이야! 💫",
|
247 |
+
"sub2": "함께라면 뭐든 '레전드'가 될 수 있어요 🎉",
|
248 |
+
"hashtags": ["#찐이야", "#레전드순간", "#함께해요", "#특별한시간"]
|
249 |
+
}
|
250 |
+
|
251 |
+
# 컨셉명에서 키워드 찾기
|
252 |
+
for keyword, copy_data in trendy_copies.items():
|
253 |
+
if keyword in concept_name:
|
254 |
+
return copy_data
|
255 |
+
|
256 |
+
return default_copy False) else ""
|
257 |
+
result += f"## {i}. {concept['name']}{is_recommended_mark}\n"
|
258 |
+
result += f"**🏷️ 테마:** {concept['theme']}\n"
|
259 |
+
result += f"**⭐ 참여도 점수:** {concept['score']}/10점\n"
|
260 |
+
result += f"**💡 선정 이유:** {concept['reason']}\n"
|
261 |
+
result += f"**🎯 주요 타겟:** {concept['target']}\n"
|
262 |
+
result += f"**🔑 핵심 키워드:** {', '.join(concept['keywords'])}\n"
|
263 |
+
result += f"**🎨 추천 색상:** {', '.join(concept['colors'])}\n\n"
|
264 |
+
result += "---\n\n"
|
265 |
+
|
266 |
+
concept_names.append(concept['name'])
|
267 |
+
|
268 |
+
return result, concept_names
|
269 |
+
|
270 |
# ================== 이벤트 관리 모듈 ==================
|
271 |
class EventManager:
|
272 |
def __init__(self):
|
|
|
587 |
visible=False
|
588 |
)
|
589 |
|
590 |
+
# 추가: 직접 입력란
|
591 |
+
custom_concept_input = gr.Textbox(
|
592 |
+
label="직접 컨셉 입력",
|
593 |
+
placeholder="원하는 컨셉을 직접 입력하세요",
|
594 |
+
visible=False,
|
595 |
+
info="분석된 컨셉 외에 다른 아이디어가 있다면 입력해주세요"
|
596 |
+
)
|
597 |
+
|
598 |
with gr.Column():
|
599 |
concept_result = gr.Textbox(
|
600 |
label="컨셉 분석 결과",
|