""" Ultimate Brand Theory Generator =============================== 2025-05-28 | 15개 이론을 통합한 종합 브랜드 생성기 ----------------------------------------------------- 통합된 이론들: 1. Square Theory - 의미적 사각형 구조 2. Conceptual Blending - 개념 혼합 3. Sound Symbolism - 음향 상징주의 4. Linguistic Relativity - 언어 상대성 5. Archetype Theory - 원형 이론 6. Jobs-to-be-Done - 할 일 이론 7. SCAMPER Method - 창의적 변형 8. Design Thinking - 디자인 사고 9. Biomimicry - 생체모방 10. Cognitive Load - 인지 부하 11. Von Restorff Effect - 고립 효과 12. Network Effects - 네트워크 효과 13. Memetics - 밈 이론 14. Color Psychology - 색상 심리학 15. Gestalt Principles - 게슈탈트 원칙 """ import os import json import gradio as gr import openai from openai import OpenAI from datetime import datetime from typing import List, Dict, Tuple, Optional import random # OpenAI 클라이언트 if not os.getenv("OPENAI_API_KEY"): raise EnvironmentError("OPENAI_API_KEY 환경 변수를 설정하세요.") client = OpenAI() # ===== 1. SQUARE THEORY ===== SQUARE_THEORY_PROMPT = """ 당신은 Square Theory 전문가입니다. Square Theory는 4개의 단어가 의미적 관계로 연결되어 사각형을 이루는 구조입니다. 브랜드명이 Square를 완성하며 "아하!" 모먼트를 만들어야 합니다. 사용자 입력(업종/키워드)을 받아 다음 JSON 형식의 배열을 생성하세요: { "brand_name": "브랜드명", "tl": "왼쪽상단", "tr": "오른쪽상단", "bl": "왼쪽하단", "br": "오른쪽하단", "top_edge": "상단 관계", "bottom_edge": "하단 관계", "left_edge": "왼쪽 관계", "right_edge": "오른쪽 관계", "slogan": "슬로건", "explanation": "왜 효과적인지" } 반드시 유효한 JSON 형식으로 응답하세요. """ # ===== 2. CONCEPTUAL BLENDING ===== CONCEPTUAL_BLENDING_PROMPT = """ 당신은 Conceptual Blending Theory 전문가입니다. 두 개 이상의 개념을 혼합하여 새로운 의미를 창출합니다. 다음 JSON 형식으로 브랜드를 생성하세요: { "brand_name": "브랜드명", "input_space1": "첫 번째 개념", "input_space2": "두 번째 개념", "generic_space": "공통 구조", "blended_space": "혼합된 새로운 의미", "emergent_properties": "창발적 속성들", "slogan": "슬로건", "explanation": "혼합이 효과적인 이유" } 예시: Netflix = Net(인터넷) + Flix(영화) → 온라인 스트리밍의 새로운 개념 반드시 유효한 JSON 형식으로 응답하세요. """ # ===== 3. SOUND SYMBOLISM ===== SOUND_SYMBOLISM_PROMPT = """ 당신은 Sound Symbolism 전문가입니다. 음소와 의미 간의 연관성을 활용합니다. 음향 원칙: - 전설모음(i,e): 작고, 빠르고, 가벼움 - 후설모음(o,u): 크고, 느리고, 무거움 - 유음(l,r,m,n): 부드럽고 유연함 - 파열음(p,t,k,b,d,g): 강하고 역동적 다음 JSON 형식으로 브랜드를 생성하세요: { "brand_name": "브랜드명", "phonetic_analysis": "음성 분석", "sound_meaning": "음향이 전달하는 의미", "target_emotion": "목표 감정", "industry_fit": "업종 적합성", "pronunciation_guide": "발음 가이드", "slogan": "슬로건" } 반드시 유효한 JSON 형식으로 응답하세요. """ # ===== 4. LINGUISTIC RELATIVITY ===== LINGUISTIC_RELATIVITY_PROMPT = """ 당신은 Linguistic Relativity 전문가입니다. 언어별 사고방식 차이를 고려합니다. 다음 JSON 형식으로 다언어 브랜드를 생성하세요: { "brand_name": "글로벌 브랜드명", "korean_adaptation": "한국어 적응", "english_meaning": "영어 의미", "cultural_considerations": "문화적 고려사항", "avoid_meanings": "피해야 할 의미들", "localization_strategy": "현지화 전략", "slogan": "슬로건" } 반드시 유효한 JSON 형식으로 응답하세요. """ # ===== 5. ARCHETYPE THEORY ===== ARCHETYPE_THEORY_PROMPT = """ 당신은 Jung의 Archetype Theory 전문가입니다. 12가지 원형 중 하나를 선택하여 브랜드를 만듭니다. 12 원형: Innocent, Hero, Outlaw, Explorer, Creator, Ruler, Magician, Lover, Caregiver, Jester, Sage, Regular Guy 다음 JSON 형식으로 브랜드를 생성하세요: { "brand_name": "브랜드명", "archetype": "선택된 원형", "archetype_traits": "원형의 특징들", "brand_personality": "브랜드 성격", "visual_direction": "시각적 방향", "voice_tone": "목소리 톤", "slogan": "슬로건", "mythology_reference": "신화적 참조" } 반드시 유효한 JSON 형식으로 응답하세요. """ # ===== 6. JOBS-TO-BE-DONE ===== JOBS_TO_BE_DONE_PROMPT = """ 당신은 Jobs-to-be-Done Theory 전문가입니다. 고객이 해결하려는 '일'에 초점을 맞춥니다. 다음 JSON 형식으로 브랜드를 생성하세요: { "brand_name": "브랜드명", "functional_job": "기능적 일", "emotional_job": "감정적 일", "social_job": "사회적 일", "job_statement": "핵심 Job 문장", "outcome_metrics": "성과 지표", "slogan": "슬로건", "value_proposition": "가치 제안" } 반드시 유효한 JSON 형식으로 응답하세요. """ # ===== 7. SCAMPER METHOD ===== SCAMPER_PROMPT = """ 당신은 SCAMPER Method 전문가입니다. 7가지 창의적 기법을 적용합니다. S - Substitute (대체) C - Combine (결합) A - Adapt (적응) M - Modify/Magnify (수정/확대) P - Put to another use (다른 용도) E - Eliminate (제거) R - Reverse (역전) 다음 JSON 형식으로 브랜드를 생성하세요: { "brand_name": "브랜드명", "scamper_technique": "사용된 기법", "original_concept": "원래 개념", "transformation": "변형 과정", "innovative_aspect": "혁신적 측면", "slogan": "슬로건" } 반드시 유효한 JSON 형식으로 응답하세요. """ # ===== 8. DESIGN THINKING ===== DESIGN_THINKING_PROMPT = """ 당신은 IDEO의 Design Thinking 전문가입니다. 인간 중심 혁신을 추구합니다. 다음 JSON 형식으로 브랜드를 생성하세요: { "brand_name": "브랜드명", "user_insight": "사용자 통찰", "pain_point": "해결하는 문제점", "desirability": "바람직함 (인간)", "feasibility": "실현가능성 (기술)", "viability": "생존가능성 (비즈니스)", "prototype_concept": "프로토타입 컨셉", "slogan": "슬로건" } 반드시 유효한 JSON 형식으로 응답하세요. """ # ===== 9. BIOMIMICRY ===== BIOMIMICRY_PROMPT = """ 당신은 Biomimicry 전문가입니다. 자연에서 영감을 받은 브랜드를 만듭니다. 다음 JSON 형식으로 브랜드를 생성하세요: { "brand_name": "브랜드명", "natural_inspiration": "자연적 영감원", "biomimetic_principle": "생체모방 원리", "form_function": "형태와 기능", "sustainability_aspect": "지속가능성 측면", "adaptation_strategy": "적응 전략", "slogan": "슬로건" } 반드시 유효한 JSON 형식으로 응답하세요. """ # ===== 10. COGNITIVE LOAD ===== COGNITIVE_LOAD_PROMPT = """ 당신은 Cognitive Load Theory 전문가입니다. 인지 처리를 최소화하는 브랜드를 만듭니다. 다음 JSON 형식으로 브랜드를 생성하세요: { "brand_name": "브랜드명", "syllable_count": "음절 수", "processing_ease": "처리 용이성 점수", "memory_hooks": "기억 고리", "pronunciation_simplicity": "발음 단순성", "cognitive_fluency": "인지적 유창성", "slogan": "슬로건" } 반드시 유효한 JSON 형식으로 응답하세요. """ # ===== 11. VON RESTORFF EFFECT ===== VON_RESTORFF_PROMPT = """ 당신은 Von Restorff Effect 전문가입니다. 독특하고 기억에 남는 브랜드를 만듭니다. 다음 JSON 형식으로 브랜드를 생성하세요: { "brand_name": "브랜드명", "category_norm": "카테고리 표준", "deviation_strategy": "일탈 전략", "uniqueness_factors": "독특성 요소들", "memorability_score": "기억성 점수", "attention_triggers": "주의 트리거", "slogan": "슬로건" } 반드시 유효한 JSON 형식으로 응답하세요. """ # ===== 12. NETWORK EFFECTS ===== NETWORK_EFFECTS_PROMPT = """ 당신은 Network Effects 전문가입니다. 네트워크 가치를 극대화하는 브랜드를 만듭니다. 다음 JSON 형식으로 브랜드를 생성하세요: { "brand_name": "브랜드명", "network_type": "네트워크 유형", "viral_coefficient": "바이럴 계수", "sharing_ease": "공유 용이성", "community_aspect": "커뮤니티 측면", "network_value": "네트워크 가치", "slogan": "슬로건" } 반드시 유효한 JSON 형식으로 응답하세요. """ # ===== 13. MEMETICS ===== MEMETICS_PROMPT = """ 당신은 Memetics 전문가입니다. 문화적으로 복제되고 진화하는 브랜드를 만듭니다. 다음 JSON 형식으로 브랜드를 생성하세요: { "brand_name": "브랜드명", "meme_structure": "밈 구조", "replication_ease": "복제 용이성", "mutation_potential": "변이 잠재력", "cultural_fitness": "문화적 적합도", "transmission_channels": "전달 채널", "slogan": "슬로건" } 반드시 유효한 JSON 형식으로 응답하세요. """ # ===== 14. COLOR PSYCHOLOGY ===== COLOR_PSYCHOLOGY_PROMPT = """ 당신은 Color Psychology 전문가입니다. 색상 연상과 감정을 활용한 브랜드를 만듭니다. 다음 JSON 형식으로 브랜드를 생성하세요: { "brand_name": "브랜드명", "primary_color": "주 색상", "color_meaning": "색상 의미", "emotional_response": "감정적 반응", "cultural_associations": "문화적 연상", "industry_alignment": "업종 정렬", "slogan": "슬로건" } 반드시 유효한 JSON 형식으로 응답하세요. """ # ===== 15. GESTALT PRINCIPLES ===== GESTALT_PROMPT = """ 당신은 Gestalt Theory 전문가입니다. 지각 원리를 활용한 브랜드를 만듭니다. 다음 JSON 형식으로 브랜드를 생성하세요: { "brand_name": "브랜드명", "gestalt_principle": "활용 원칙", "visual_structure": "시각적 구조", "perceptual_grouping": "지각적 그룹화", "figure_ground": "전경-배경 관계", "closure_effect": "폐쇄 효과", "slogan": "슬로건" } 반드시 유효한 JSON 형식으로 응답하세요. """ # 이론별 프롬프트 매핑 THEORY_PROMPTS = { "square": SQUARE_THEORY_PROMPT, "blending": CONCEPTUAL_BLENDING_PROMPT, "sound": SOUND_SYMBOLISM_PROMPT, "linguistic": LINGUISTIC_RELATIVITY_PROMPT, "archetype": ARCHETYPE_THEORY_PROMPT, "jobs": JOBS_TO_BE_DONE_PROMPT, "scamper": SCAMPER_PROMPT, "design": DESIGN_THINKING_PROMPT, "biomimicry": BIOMIMICRY_PROMPT, "cognitive": COGNITIVE_LOAD_PROMPT, "vonrestorff": VON_RESTORFF_PROMPT, "network": NETWORK_EFFECTS_PROMPT, "memetics": MEMETICS_PROMPT, "color": COLOR_PSYCHOLOGY_PROMPT, "gestalt": GESTALT_PROMPT } def generate_by_theory(industry: str, keywords: str, theory: str, count: int = 3) -> Tuple[str, str]: """특정 이론으로 브랜드 생성""" if not industry or not keywords: return "⚠️ 업종과 키워드를 입력해주세요.", "" prompt = THEORY_PROMPTS.get(theory, SQUARE_THEORY_PROMPT) user_input = f"""업종: {industry} 키워드: {keywords} 위 정보로 {count}개의 브랜드를 생성하세요. 반드시 JSON 형식으로 응답하세요. 결과는 브랜드 객체들의 JSON 배열이어야 합니다.""" try: response = client.chat.completions.create( model="gpt-4o-mini", messages=[ {"role": "system", "content": prompt}, {"role": "user", "content": user_input} ], temperature=0.8, max_tokens=2000, response_format={"type": "json_object"} ) content = response.choices[0].message.content data = json.loads(content) # 응답 정규화 if isinstance(data, dict): if "results" in data: results = data["results"] elif "brands" in data: results = data["brands"] elif "brand_name" in data: # 단일 브랜드를 배열로 변환 results = [data] else: # 래핑된 응답 처리 results = [] for key, value in data.items(): if isinstance(value, list): results = value break elif isinstance(value, dict) and "brand_name" in value: results = [value] break else: results = data if not isinstance(results, list): results = [results] # 마크다운 생성 markdown = generate_theory_markdown(theory, results, industry, keywords) # HTML 시각화 생성 html = generate_theory_visualization(theory, results) return markdown, html except Exception as e: return f"❌ 오류: {str(e)}", "" def generate_theory_markdown(theory: str, results: List[Dict], industry: str, keywords: str) -> str: """이론별 맞춤 마크다운 생성""" theory_names = { "square": "Square Theory", "blending": "Conceptual Blending", "sound": "Sound Symbolism", "linguistic": "Linguistic Relativity", "archetype": "Archetype Theory", "jobs": "Jobs-to-be-Done", "scamper": "SCAMPER Method", "design": "Design Thinking", "biomimicry": "Biomimicry", "cognitive": "Cognitive Load Theory", "vonrestorff": "Von Restorff Effect", "network": "Network Effects", "memetics": "Memetics", "color": "Color Psychology", "gestalt": "Gestalt Principles" } markdown = f"""# 🎯 {theory_names[theory]} 결과 **업종**: {industry} | **키워드**: {keywords} *생성 시각: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}* --- """ for idx, result in enumerate(results, 1): brand_name = result.get('brand_name', 'N/A') slogan = result.get('slogan', 'N/A') markdown += f"\n## {idx}. {brand_name}\n" markdown += f"**슬로건**: *\"{slogan}\"*\n\n" # 이론별 특수 필드 표시 if theory == "square": markdown += f""" ### Square 구조 ``` [{result.get('tl')}] ─({result.get('top_edge')})─ [{result.get('tr')}] │ │ ({result.get('left_edge')}) ({result.get('right_edge')}) │ │ [{result.get('bl')}] ─({result.get('bottom_edge')})─ [{result.get('br')}] ``` """ elif theory == "blending": markdown += f""" ### 개념 혼합 - **입력 공간 1**: {result.get('input_space1')} - **입력 공간 2**: {result.get('input_space2')} - **일반 공간**: {result.get('generic_space')} - **혼합 공간**: {result.get('blended_space')} - **창발적 속성**: {result.get('emergent_properties')} """ elif theory == "sound": markdown += f""" ### 음향 분석 - **음성 분석**: {result.get('phonetic_analysis')} - **음향 의미**: {result.get('sound_meaning')} - **목표 감정**: {result.get('target_emotion')} - **발음 가이드**: {result.get('pronunciation_guide')} """ elif theory == "archetype": markdown += f""" ### 원형 분석 - **원형**: {result.get('archetype')} - **원형 특징**: {result.get('archetype_traits')} - **브랜드 성격**: {result.get('brand_personality')} - **목소리 톤**: {result.get('voice_tone')} """ # 설명 추가 explanation = result.get('explanation', result.get('value_proposition', '')) if explanation: markdown += f"\n💡 **핵심 가치**: {explanation}\n" markdown += "\n---\n" return markdown def generate_theory_visualization(theory: str, results: List[Dict]) -> str: """이론별 맞춤 시각화 생성""" html_parts = [] for idx, result in enumerate(results, 1): if theory == "square": html_parts.append(visualize_square_brand(result)) elif theory == "blending": html_parts.append(visualize_conceptual_blend(result)) elif theory == "sound": html_parts.append(visualize_sound_symbolism(result)) elif theory == "archetype": html_parts.append(visualize_archetype(result)) elif theory == "color": html_parts.append(visualize_color_psychology(result)) else: html_parts.append(visualize_generic_brand(result, theory)) return "\n".join(html_parts) # 시각화 함수들 (일부만 예시) def visualize_square_brand(brand: Dict) -> str: """Square Theory 시각화""" return f"""
"{brand.get('slogan', '')}"
"{slogan}"
{brand.get('archetype_traits', '')}
브랜드 성격: {brand.get('brand_personality', '')}
목소리 톤: {brand.get('voice_tone', '')}
"{brand.get('slogan', '')}"
주 색상: {brand.get('primary_color', '')}
색상 의미: {brand.get('color_meaning', '')}
감정적 반응: {brand.get('emotional_response', '')}
문화적 연상: {brand.get('cultural_associations', '')}
"{brand.get('slogan', '')}"
"{brand.get('slogan', '')}"
{json_str}