SJLee-0525 commited on
Commit
ab1ab06
Β·
1 Parent(s): f0f41bc

[TEST] test45

Browse files
README.md CHANGED
@@ -1,5 +1,5 @@
1
  ---
2
- title: VOICE SEMANTLE
3
  emoji: πŸŽ™οΈ
4
  colorFrom: purple
5
  colorTo: pink
 
1
  ---
2
+ title: VOICE SEMENTLE
3
  emoji: πŸŽ™οΈ
4
  colorFrom: purple
5
  colorTo: pink
client/frontend/app_ui.py CHANGED
@@ -75,7 +75,7 @@ class AppUI:
75
  import json
76
  stats_json = json.dumps(stats)
77
 
78
- with gr.Blocks(title="VOICE SEMANTLE") as demo:
79
 
80
  # ============== Dashboard Stats (JSμ—μ„œ μ ‘κ·Ό κ°€λŠ₯) ==============
81
  gr.HTML(
 
75
  import json
76
  stats_json = json.dumps(stats)
77
 
78
+ with gr.Blocks(title="VOICE SEMENTLE") as demo:
79
 
80
  # ============== Dashboard Stats (JSμ—μ„œ μ ‘κ·Ό κ°€λŠ₯) ==============
81
  gr.HTML(
client/frontend/components/floating_chatbot.py CHANGED
@@ -70,7 +70,7 @@ def build_system_prompt_from_game_state(game_state: Optional[Dict], include_audi
70
  str: μ»¨ν…μŠ€νŠΈκ°€ ν¬ν•¨λœ μ‹œμŠ€ν…œ ν”„λ‘¬ν”„νŠΈ
71
  """
72
  # κΈ°λ³Έ ν”„λ‘¬ν”„νŠΈ (Phase 3: Enhanced)
73
- base_prompt = """You are the help assistant for "Voice Semantle" - an innovative pronunciation puzzle game that combines voice recognition with progressive hint discovery.
74
 
75
  ## Game Mechanics
76
  This is a BLIND pronunciation game where:
@@ -90,7 +90,7 @@ This is a BLIND pronunciation game where:
90
  ## Your Role as Help Assistant
91
  You are a friendly, encouraging coach who helps users discover the answer through strategic hints:
92
 
93
- 1. **Explain the game** - When users are confused, explain Voice Semantle mechanics clearly
94
  2. **Give progressive hints** - Start vague, gradually get more specific with each request
95
  3. **Interpret scores intelligently** - Explain what their scores mean and what to try next
96
  4. **Build on previous hints** - NEVER repeat hints, always add new information
@@ -183,7 +183,7 @@ Greet them warmly and help them understand the game:
183
  **Goal**: Get them to make their first attempt without fear
184
 
185
  **Key Points to Convey**:
186
- 1. This is Voice Semantle - a voice-based puzzle game (not just pronunciation practice!)
187
  2. They start COMPLETELY BLIND - no clues about what to say
188
  3. First step: Just say ANY word or phrase that comes to mind
189
  4. The game will analyze their voice and give similarity scores
@@ -192,12 +192,12 @@ Greet them warmly and help them understand the game:
192
  7. First attempts are always wild guesses - that's the fun part!
193
 
194
  **Example Welcome**:
195
- "Welcome! πŸ‘‹ Ready to play Voice Semantle? Here's the fun part: you start completely blind - you have NO idea what word or phrase to say! Just speak anything that comes to mind, and the game will tell you how close you are. Based on the scores and hints, you'll figure it out. Don't overthink your first attempt - it's supposed to be a shot in the dark! Need help? Just ask!"
196
 
197
  **When they ask questions**:
198
  - "How do I play?" β†’ Explain the blind start and score-based discovery
199
  - "Give me a hint" β†’ Encourage them to try first: "Take a guess first! Any word works. Then I can help based on your scores."
200
- - "What should I say?" β†’ "Anything! That's the beauty of Voice Semantle - you discover what to say through playing."
201
  - "I'm confused" β†’ Walk them through: speak β†’ get scores β†’ get hints β†’ figure it out"""
202
 
203
  # guesses μΆ”μΆœ
@@ -309,7 +309,7 @@ Greet them warmly and help them understand the game:
309
  context_parts.append("Based on their attempts and scores, provide intelligent responses:")
310
  context_parts.append("")
311
  context_parts.append("**Common Questions**:")
312
- context_parts.append("- \"How do I play?\" β†’ Explain Voice Semantle mechanics with enthusiasm")
313
  context_parts.append("- \"Give me a hint\" β†’ Follow the attempt-based progression strategy (see above)")
314
  context_parts.append("- \"What should I try next?\" β†’ Analyze their score pattern and suggest strategic next steps")
315
  context_parts.append("- \"Why are my scores low?\" β†’ Interpret scores specifically and suggest what to change")
@@ -506,7 +506,7 @@ class FloatingChatbotComponent:
506
  game_state: μ™ΈλΆ€μ—μ„œ 전달받은 gr.BrowserState (UUID 포함)
507
  """
508
  # 초기 ν™˜μ˜ λ©”μ‹œμ§€ μ •μ˜
509
- welcome_message = """Welcome to Voice Semantle! πŸ‘‹ Get ready for a unique and super fun pronunciation puzzle game where your voice is the key!
510
 
511
  Here's how it works:
512
 
 
70
  str: μ»¨ν…μŠ€νŠΈκ°€ ν¬ν•¨λœ μ‹œμŠ€ν…œ ν”„λ‘¬ν”„νŠΈ
71
  """
72
  # κΈ°λ³Έ ν”„λ‘¬ν”„νŠΈ (Phase 3: Enhanced)
73
+ base_prompt = """You are the help assistant for "Audio Sementle" - an innovative pronunciation puzzle game that combines voice recognition with progressive hint discovery.
74
 
75
  ## Game Mechanics
76
  This is a BLIND pronunciation game where:
 
90
  ## Your Role as Help Assistant
91
  You are a friendly, encouraging coach who helps users discover the answer through strategic hints:
92
 
93
+ 1. **Explain the game** - When users are confused, explain Audio Sementle mechanics clearly
94
  2. **Give progressive hints** - Start vague, gradually get more specific with each request
95
  3. **Interpret scores intelligently** - Explain what their scores mean and what to try next
96
  4. **Build on previous hints** - NEVER repeat hints, always add new information
 
183
  **Goal**: Get them to make their first attempt without fear
184
 
185
  **Key Points to Convey**:
186
+ 1. This is Audio Sementle - a voice-based puzzle game (not just pronunciation practice!)
187
  2. They start COMPLETELY BLIND - no clues about what to say
188
  3. First step: Just say ANY word or phrase that comes to mind
189
  4. The game will analyze their voice and give similarity scores
 
192
  7. First attempts are always wild guesses - that's the fun part!
193
 
194
  **Example Welcome**:
195
+ "Welcome! πŸ‘‹ Ready to play Audio Sementle? Here's the fun part: you start completely blind - you have NO idea what word or phrase to say! Just speak anything that comes to mind, and the game will tell you how close you are. Based on the scores and hints, you'll figure it out. Don't overthink your first attempt - it's supposed to be a shot in the dark! Need help? Just ask!"
196
 
197
  **When they ask questions**:
198
  - "How do I play?" β†’ Explain the blind start and score-based discovery
199
  - "Give me a hint" β†’ Encourage them to try first: "Take a guess first! Any word works. Then I can help based on your scores."
200
+ - "What should I say?" β†’ "Anything! That's the beauty of Audio Sementle - you discover what to say through playing."
201
  - "I'm confused" β†’ Walk them through: speak β†’ get scores β†’ get hints β†’ figure it out"""
202
 
203
  # guesses μΆ”μΆœ
 
309
  context_parts.append("Based on their attempts and scores, provide intelligent responses:")
310
  context_parts.append("")
311
  context_parts.append("**Common Questions**:")
312
+ context_parts.append("- \"How do I play?\" β†’ Explain Audio Sementle mechanics with enthusiasm")
313
  context_parts.append("- \"Give me a hint\" β†’ Follow the attempt-based progression strategy (see above)")
314
  context_parts.append("- \"What should I try next?\" β†’ Analyze their score pattern and suggest strategic next steps")
315
  context_parts.append("- \"Why are my scores low?\" β†’ Interpret scores specifically and suggest what to change")
 
506
  game_state: μ™ΈλΆ€μ—μ„œ 전달받은 gr.BrowserState (UUID 포함)
507
  """
508
  # 초기 ν™˜μ˜ λ©”μ‹œμ§€ μ •μ˜
509
+ welcome_message = """Welcome to Audio Sementle! πŸ‘‹ Get ready for a unique and super fun pronunciation puzzle game where your voice is the key!
510
 
511
  Here's how it works:
512
 
client/frontend/components/header.py CHANGED
@@ -1,5 +1,5 @@
1
  """
2
- 헀더 μ»΄ν¬λ„ŒνŠΈ - Voice Semantle μŠ€νƒ€μΌ
3
  μ• λ‹ˆλ©”μ΄μ…˜ν’ κ·€μ—¬μš΄ 둜고 λ””μžμΈ
4
 
5
  πŸ‘¨β€πŸ’» λ‹΄λ‹Ή: 개발자 A
@@ -9,9 +9,9 @@ import gradio as gr
9
 
10
 
11
  class HeaderComponent:
12
- """Voice Semantle μŠ€νƒ€μΌ 헀더 μ»΄ν¬λ„ŒνŠΈ"""
13
 
14
- # Voice Semantle μŠ€νƒ€μΌ 헀더 HTML ν…œν”Œλ¦Ώ
15
  HEADER_HTML_TEMPLATE = """
16
  <link href="https://fonts.googleapis.com/css2?family=Lilita+One&family=Bangers&display=swap" rel="stylesheet">
17
  <div class="vs-header">
@@ -21,7 +21,7 @@ class HeaderComponent:
21
  <span class="title-voice">VOICE</span>
22
  </span>
23
  <span class="title-line">
24
- <span class="title-semantle">SEMANTLE</span>
25
  </span>
26
  </h1>
27
  </div>
@@ -69,7 +69,7 @@ class HeaderComponent:
69
  0 0 20px rgba(90, 200, 250, 0.5);
70
  paint-order: stroke fill;
71
  }
72
- .title-semantle {
73
  font-size: 90px;
74
  font-weight: 500;
75
  color: #e8a054;
@@ -96,7 +96,7 @@ class HeaderComponent:
96
  8px 8px 0 #082a35,
97
  0 0 25px rgba(90, 200, 250, 0.6);
98
  }
99
- .dark .title-semantle {
100
  color: #e8a054;
101
  -webkit-text-stroke: 4px #5c3d1e;
102
  text-shadow:
@@ -118,7 +118,7 @@ class HeaderComponent:
118
  7px 7px 0 #0d4a5f,
119
  0 0 20px rgba(90, 200, 250, 0.5);
120
  }
121
- .title-semantle {
122
  font-size: 72px;
123
  letter-spacing: 4px;
124
  -webkit-text-stroke: 4px #8b5a2b;
@@ -136,7 +136,7 @@ class HeaderComponent:
136
  7px 7px 0 #0d4a5f,
137
  0 0 20px rgba(90, 200, 250, 0.5);
138
  }
139
- .dark .title-semantle {
140
  -webkit-text-stroke: 4px #8b5a2b;
141
  text-shadow:
142
  5px 5px 0 #8b5a2b,
@@ -157,7 +157,7 @@ class HeaderComponent:
157
  5px 5px 0 #0d4a5f,
158
  0 0 15px rgba(90, 200, 250, 0.5);
159
  }
160
- .title-semantle {
161
  font-size: 52px;
162
  letter-spacing: 3px;
163
  -webkit-text-stroke: 3px #8b5a2b;
@@ -173,7 +173,7 @@ class HeaderComponent:
173
  5px 5px 0 #082a35,
174
  0 0 20px rgba(90, 200, 250, 0.6);
175
  }
176
- .dark .title-semantle {
177
  -webkit-text-stroke: 3px #5c3d1e;
178
  text-shadow:
179
  4px 4px 0 #5c3d1e,
 
1
  """
2
+ 헀더 μ»΄ν¬λ„ŒνŠΈ - Voice Sementle μŠ€νƒ€μΌ
3
  μ• λ‹ˆλ©”μ΄μ…˜ν’ κ·€μ—¬μš΄ 둜고 λ””μžμΈ
4
 
5
  πŸ‘¨β€πŸ’» λ‹΄λ‹Ή: 개발자 A
 
9
 
10
 
11
  class HeaderComponent:
12
+ """Voice Sementle μŠ€νƒ€μΌ 헀더 μ»΄ν¬λ„ŒνŠΈ"""
13
 
14
+ # Voice Sementle μŠ€νƒ€μΌ 헀더 HTML ν…œν”Œλ¦Ώ
15
  HEADER_HTML_TEMPLATE = """
16
  <link href="https://fonts.googleapis.com/css2?family=Lilita+One&family=Bangers&display=swap" rel="stylesheet">
17
  <div class="vs-header">
 
21
  <span class="title-voice">VOICE</span>
22
  </span>
23
  <span class="title-line">
24
+ <span class="title-sementle">SEMENTLE</span>
25
  </span>
26
  </h1>
27
  </div>
 
69
  0 0 20px rgba(90, 200, 250, 0.5);
70
  paint-order: stroke fill;
71
  }
72
+ .title-sementle {
73
  font-size: 90px;
74
  font-weight: 500;
75
  color: #e8a054;
 
96
  8px 8px 0 #082a35,
97
  0 0 25px rgba(90, 200, 250, 0.6);
98
  }
99
+ .dark .title-sementle {
100
  color: #e8a054;
101
  -webkit-text-stroke: 4px #5c3d1e;
102
  text-shadow:
 
118
  7px 7px 0 #0d4a5f,
119
  0 0 20px rgba(90, 200, 250, 0.5);
120
  }
121
+ .title-sementle {
122
  font-size: 72px;
123
  letter-spacing: 4px;
124
  -webkit-text-stroke: 4px #8b5a2b;
 
136
  7px 7px 0 #0d4a5f,
137
  0 0 20px rgba(90, 200, 250, 0.5);
138
  }
139
+ .dark .title-sementle {
140
  -webkit-text-stroke: 4px #8b5a2b;
141
  text-shadow:
142
  5px 5px 0 #8b5a2b,
 
157
  5px 5px 0 #0d4a5f,
158
  0 0 15px rgba(90, 200, 250, 0.5);
159
  }
160
+ .title-sementle {
161
  font-size: 52px;
162
  letter-spacing: 3px;
163
  -webkit-text-stroke: 3px #8b5a2b;
 
173
  5px 5px 0 #082a35,
174
  0 0 20px rgba(90, 200, 250, 0.6);
175
  }
176
+ .dark .title-sementle {
177
  -webkit-text-stroke: 3px #5c3d1e;
178
  text-shadow:
179
  4px 4px 0 #5c3d1e,
client/frontend/components/welcome_modal.py CHANGED
@@ -28,12 +28,12 @@ class WelcomeModal:
28
  <div class="welcome-modal-overlay" data-welcome-overlay="true">
29
  <div class="welcome-modal-container">
30
  <div class="welcome-modal-content">
31
- <h2 class="welcome-modal-title">Welcome to Voice Semantle!</h2>
32
 
33
  <div class="welcome-modal-video">
34
  <iframe
35
  src="https://www.youtube.com/embed/${value.videoId || 'YbCf6x0B3fU'}?rel=0&modestbranding=1"
36
- title="Voice Semantle Tutorial"
37
  frameborder="0"
38
  allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
39
  referrerpolicy="strict-origin-when-cross-origin"
 
28
  <div class="welcome-modal-overlay" data-welcome-overlay="true">
29
  <div class="welcome-modal-container">
30
  <div class="welcome-modal-content">
31
+ <h2 class="welcome-modal-title">Welcome to Voice Sementle!</h2>
32
 
33
  <div class="welcome-modal-video">
34
  <iframe
35
  src="https://www.youtube.com/embed/${value.videoId || 'YbCf6x0B3fU'}?rel=0&modestbranding=1"
36
+ title="Voice Sementle Tutorial"
37
  frameborder="0"
38
  allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
39
  referrerpolicy="strict-origin-when-cross-origin"
client/frontend/styles/__init__.py CHANGED
@@ -1,5 +1,5 @@
1
  """
2
- Voice Semantle μŠ€νƒ€μΌ λͺ¨λ“ˆ
3
  μ• λ‹ˆλ©”μ΄μ…˜ν’ ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ 기반의 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ CSS
4
  """
5
 
 
1
  """
2
+ Voice Sementle μŠ€νƒ€μΌ λͺ¨λ“ˆ
3
  μ• λ‹ˆλ©”μ΄μ…˜ν’ ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ 기반의 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ CSS
4
  """
5
 
client/frontend/styles/buttons_style.py CHANGED
@@ -1,11 +1,11 @@
1
  """
2
- λ²„νŠΌ 및 μ˜€λ””μ˜€ μž…λ ₯ CSS - Voice Semantle ν…Œλ§ˆ
3
  λ²„νŠΌ μŠ€νƒ€μΌ 및 μ˜€λ””μ˜€ μ»΄ν¬λ„ŒνŠΈ μŠ€νƒ€μΌλ§
4
  """
5
 
6
- # Voice Semantle μŠ€νƒ€μΌ λ²„νŠΌ CSS - μ• λ‹ˆλ©”μ΄μ…˜ν’ ν•˜λŠ˜μƒ‰
7
  BUTTON_CSS = """
8
- /* Voice Semantle μŠ€νƒ€μΌ λ²„νŠΌ - ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ */
9
  #verify-btn,
10
  #restart-btn {
11
  font-family: 'Lilita One' !important;
 
1
  """
2
+ λ²„νŠΌ 및 μ˜€λ””μ˜€ μž…λ ₯ CSS - Voice Sementle ν…Œλ§ˆ
3
  λ²„νŠΌ μŠ€νƒ€μΌ 및 μ˜€λ””μ˜€ μ»΄ν¬λ„ŒνŠΈ μŠ€νƒ€μΌλ§
4
  """
5
 
6
+ # Voice Sementle μŠ€νƒ€μΌ λ²„νŠΌ CSS - μ• λ‹ˆλ©”μ΄μ…˜ν’ ν•˜λŠ˜μƒ‰
7
  BUTTON_CSS = """
8
+ /* Voice Sementle μŠ€νƒ€μΌ λ²„νŠΌ - ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ */
9
  #verify-btn,
10
  #restart-btn {
11
  font-family: 'Lilita One' !important;
client/frontend/styles/chatbot_style.py CHANGED
@@ -1,14 +1,14 @@
1
  """
2
- ν”Œλ‘œνŒ… AI 챗봇 CSS - Voice Semantle ν…Œλ§ˆ
3
  ν”Œλ‘œνŒ… ν† κΈ€ λ²„νŠΌ, 챗봇 μ»¨ν…Œμ΄λ„ˆ, μž…λ ₯ μ˜μ—­ μŠ€νƒ€μΌ
4
  """
5
 
6
- # ν”Œλ‘œνŒ… AI 챗봇 CSS - Voice Semantle ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ
7
  FLOATING_CHATBOT_CSS = """
8
  /* ν”Œλ‘œνŒ… ν† κΈ€ λ²„νŠΌ μ»¨ν…Œμ΄λ„ˆ */
9
  #floating-toggle {
10
  position: fixed;
11
- top: 20px;
12
  right: 20px;
13
  z-index: 1001;
14
  width: 64px;
@@ -86,7 +86,7 @@ FLOATING_CHATBOT_CSS = """
86
  /* 챗봇 μ»¨ν…Œμ΄λ„ˆ - 더 λ‘₯κΈ€κ²Œ */
87
  #chat-container {
88
  position: fixed;
89
- top: 104px;
90
  right: 20px;
91
  width: 636px;
92
  height: 840px;
 
1
  """
2
+ ν”Œλ‘œνŒ… AI 챗봇 CSS - Voice Sementle ν…Œλ§ˆ
3
  ν”Œλ‘œνŒ… ν† κΈ€ λ²„νŠΌ, 챗봇 μ»¨ν…Œμ΄λ„ˆ, μž…λ ₯ μ˜μ—­ μŠ€νƒ€μΌ
4
  """
5
 
6
+ # ν”Œλ‘œνŒ… AI 챗봇 CSS - Voice Sementle ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ
7
  FLOATING_CHATBOT_CSS = """
8
  /* ν”Œλ‘œνŒ… ν† κΈ€ λ²„νŠΌ μ»¨ν…Œμ΄λ„ˆ */
9
  #floating-toggle {
10
  position: fixed;
11
+ bottom: 20px;
12
  right: 20px;
13
  z-index: 1001;
14
  width: 64px;
 
86
  /* 챗봇 μ»¨ν…Œμ΄λ„ˆ - 더 λ‘₯κΈ€κ²Œ */
87
  #chat-container {
88
  position: fixed;
89
+ bottom: 104px;
90
  right: 20px;
91
  width: 636px;
92
  height: 840px;
client/frontend/styles/custom_css.py CHANGED
@@ -1,5 +1,5 @@
1
  """
2
- μ»€μŠ€ν…€ CSS μŠ€νƒ€μΌ - Voice Semantle ν…Œλ§ˆ
3
  μ• λ‹ˆλ©”μ΄μ…˜ν’ ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ 기반의 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ CSS
4
 
5
  이 νŒŒμΌμ€ ν•˜μœ„ ν˜Έν™˜μ„±μ„ μœ„ν•΄ μœ μ§€λ©λ‹ˆλ‹€.
 
1
  """
2
+ μ»€μŠ€ν…€ CSS μŠ€νƒ€μΌ - Voice Sementle ν…Œλ§ˆ
3
  μ• λ‹ˆλ©”μ΄μ…˜ν’ ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ 기반의 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ CSS
4
 
5
  이 νŒŒμΌμ€ ν•˜μœ„ ν˜Έν™˜μ„±μ„ μœ„ν•΄ μœ μ§€λ©λ‹ˆλ‹€.
client/frontend/styles/failure_modal_style.py CHANGED
@@ -1,11 +1,11 @@
1
  """
2
- μ‹€νŒ¨ λͺ¨λ‹¬ CSS - Voice Semantle ν…Œλ§ˆ
3
  μ‹€νŒ¨ λͺ¨λ‹¬ 및 κ²°κ³Ό 타일 μŠ€νƒ€μΌ
4
  """
5
 
6
- # μ‹€νŒ¨ λͺ¨λ‹¬ CSS - Voice Semantle ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ
7
  FAILURE_MODAL_CSS = """
8
- /* μ‹€νŒ¨ λͺ¨λ‹¬ - Voice Semantle ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ */
9
  .modal-content {
10
  text-align: center;
11
  padding: 20px;
 
1
  """
2
+ μ‹€νŒ¨ λͺ¨λ‹¬ CSS - Voice Sementle ν…Œλ§ˆ
3
  μ‹€νŒ¨ λͺ¨λ‹¬ 및 κ²°κ³Ό 타일 μŠ€νƒ€μΌ
4
  """
5
 
6
+ # μ‹€νŒ¨ λͺ¨λ‹¬ CSS - Voice Sementle ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ
7
  FAILURE_MODAL_CSS = """
8
+ /* μ‹€νŒ¨ λͺ¨λ‹¬ - Voice Sementle ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ */
9
  .modal-content {
10
  text-align: center;
11
  padding: 20px;
client/frontend/styles/falling_elements_style.py CHANGED
@@ -1,5 +1,5 @@
1
  """
2
- λ°°κ²½ 꽃/μŒν‘œ λ–¨μ–΄μ§€λŠ” μ• λ‹ˆλ©”μ΄μ…˜ - Voice Semantle ν…Œλ§ˆ
3
  λ°°κ²½ μ• λ‹ˆλ©”μ΄μ…˜ CSS 및 JavaScript
4
  """
5
 
 
1
  """
2
+ λ°°κ²½ 꽃/μŒν‘œ λ–¨μ–΄μ§€λŠ” μ• λ‹ˆλ©”μ΄μ…˜ - Voice Sementle ν…Œλ§ˆ
3
  λ°°κ²½ μ• λ‹ˆλ©”μ΄μ…˜ CSS 및 JavaScript
4
  """
5
 
client/frontend/styles/history_style.py CHANGED
@@ -1,11 +1,11 @@
1
  """
2
- νžˆμŠ€ν† λ¦¬ λ””μŠ€ν”Œλ ˆμ΄ CSS - Voice Semantle ν…Œλ§ˆ
3
  μ‹œλ„ 기둝 및 νžˆμŠ€ν† λ¦¬ ν‘œμ‹œ μŠ€νƒ€μΌ
4
  """
5
 
6
- # νžˆμŠ€ν† λ¦¬ λ””μŠ€ν”Œλ ˆμ΄ CSS - Voice Semantle ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ
7
  HISTORY_CSS = """
8
- /* μ‹œλ„ 기둝 - Voice Semantle ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ */
9
  .attempt-history {
10
  margin-top: 20px;
11
  padding: 16px;
 
1
  """
2
+ νžˆμŠ€ν† λ¦¬ λ””μŠ€ν”Œλ ˆμ΄ CSS - Voice Sementle ν…Œλ§ˆ
3
  μ‹œλ„ 기둝 및 νžˆμŠ€ν† λ¦¬ ν‘œμ‹œ μŠ€νƒ€μΌ
4
  """
5
 
6
+ # νžˆμŠ€ν† λ¦¬ λ””μŠ€ν”Œλ ˆμ΄ CSS - Voice Sementle ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ
7
  HISTORY_CSS = """
8
+ /* μ‹œλ„ 기둝 - Voice Sementle ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ */
9
  .attempt-history {
10
  margin-top: 20px;
11
  padding: 16px;
client/frontend/styles/result_screen_style.py CHANGED
@@ -1,11 +1,11 @@
1
  """
2
- 성곡 ν™”λ©΄ CSS 및 Celebration JavaScript - Voice Semantle ν…Œλ§ˆ
3
  성곡 ν™”λ©΄ μŠ€νƒ€μΌ, 톡계 μΉ΄λ“œ, Confetti 효과
4
  """
5
 
6
- # 성곡 ν™”λ©΄ CSS - Voice Semantle μ• λ‹ˆλ©”μ΄μ…˜ ν…Œλ§ˆ + Confetti 효과
7
  RESULT_SCREEN_CSS = """
8
- /* 성곡 ν™”λ©΄ - Voice Semantle ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ */
9
  #success-screen,
10
  #giveup-screen {
11
  position: fixed !important;
 
1
  """
2
+ 성곡 ν™”λ©΄ CSS 및 Celebration JavaScript - Voice Sementle ν…Œλ§ˆ
3
  성곡 ν™”λ©΄ μŠ€νƒ€μΌ, 톡계 μΉ΄λ“œ, Confetti 효과
4
  """
5
 
6
+ # 성곡 ν™”λ©΄ CSS - Voice Sementle μ• λ‹ˆλ©”μ΄μ…˜ ν…Œλ§ˆ + Confetti 효과
7
  RESULT_SCREEN_CSS = """
8
+ /* 성곡 ν™”λ©΄ - Voice Sementle ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ */
9
  #success-screen,
10
  #giveup-screen {
11
  position: fixed !important;
client/frontend/styles/theme_style.py CHANGED
@@ -1,11 +1,11 @@
1
  """
2
- κΈ°λ³Έ ν…Œλ§ˆ CSS - Voice Semantle ν…Œλ§ˆ
3
  μ• λ‹ˆλ©”μ΄μ…˜ν’ ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ 기반의 μ „μ—­ λ³€μˆ˜ 및 κΈ°λ³Έ μŠ€νƒ€μΌ
4
  """
5
 
6
- # Voice Semantle ν…Œλ§ˆ CSS - μ• λ‹ˆλ©”μ΄μ…˜ν’ ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ
7
  BASE_THEME_CSS = """
8
- /* Voice Semantle μŠ€νƒ€μΌ κΈ°λ³Έ ν…Œλ§ˆ - μ• λ‹ˆλ©”μ΄μ…˜ν’ ν•˜λŠ˜μƒ‰ */
9
  :root {
10
  /* 메인 ν…Œλ§ˆ 색상 - ν•˜λŠ˜μƒ‰ 계열 */
11
  --theme-primary: #4db8ff;
 
1
  """
2
+ κΈ°λ³Έ ν…Œλ§ˆ CSS - Voice Sementle ν…Œλ§ˆ
3
  μ• λ‹ˆλ©”μ΄μ…˜ν’ ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ 기반의 μ „μ—­ λ³€μˆ˜ 및 κΈ°λ³Έ μŠ€νƒ€μΌ
4
  """
5
 
6
+ # Voice Sementle ν…Œλ§ˆ CSS - μ• λ‹ˆλ©”μ΄μ…˜ν’ ν•˜λŠ˜μƒ‰ ν…Œλ§ˆ
7
  BASE_THEME_CSS = """
8
+ /* Voice Sementle μŠ€νƒ€μΌ κΈ°λ³Έ ν…Œλ§ˆ - μ• λ‹ˆλ©”μ΄μ…˜ν’ ν•˜λŠ˜μƒ‰ */
9
  :root {
10
  /* 메인 ν…Œλ§ˆ 색상 - ν•˜λŠ˜μƒ‰ 계열 */
11
  --theme-primary: #4db8ff;
client/utils/elevenlabs_tts.py CHANGED
@@ -2,7 +2,7 @@
2
  ElevenLabs TTS Integration for Audio Hints
3
 
4
  This module provides text-to-speech functionality for generating partial
5
- audio hints in the Audio Semantle game.
6
  """
7
 
8
  import os
@@ -87,7 +87,7 @@ def clone_voice_from_reference(reference_audio_path: str) -> Optional[str]:
87
  voice = client.voices.ivc.create(
88
  name=voice_name,
89
  files=[BytesIO(open(full_path, "rb").read())],
90
- description="Cloned voice for Audio Semantle hints",
91
  remove_background_noise=False
92
  )
93
 
 
2
  ElevenLabs TTS Integration for Audio Hints
3
 
4
  This module provides text-to-speech functionality for generating partial
5
+ audio hints in the Audio Sementle game.
6
  """
7
 
8
  import os
 
87
  voice = client.voices.ivc.create(
88
  name=voice_name,
89
  files=[BytesIO(open(full_path, "rb").read())],
90
+ description="Cloned voice for Audio Sementle hints",
91
  remove_background_noise=False
92
  )
93
 
voice_app.py CHANGED
@@ -9,7 +9,7 @@ from datetime import datetime
9
  import os
10
 
11
  # Backend API URL (ν™˜κ²½λ³€μˆ˜λ‘œ 관리 κ°€λŠ₯)
12
- BACKEND_URL = os.getenv("BACKEND_URL", "http://localhost:8000")
13
 
14
  def process_voice(audio):
15
  """
 
9
  import os
10
 
11
  # Backend API URL (ν™˜κ²½λ³€μˆ˜λ‘œ 관리 κ°€λŠ₯)
12
+ BACKEND_URL = os.getenv("BACKEND_URL")
13
 
14
  def process_voice(audio):
15
  """