openfree commited on
Commit
56a8412
ยท
verified ยท
1 Parent(s): 1baf032

Upload 7 files

Browse files
Files changed (8) hide show
  1. .gitattributes +1 -0
  2. README (1).md +13 -0
  3. app (1).css +397 -0
  4. app (23).py +2 -0
  5. config (1).py +228 -0
  6. mouse (1).gif +3 -0
  7. packages (3).txt +1 -0
  8. requirements (5).txt +14 -0
.gitattributes CHANGED
@@ -34,3 +34,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  jewel.gif filter=lfs diff=lfs merge=lfs -text
 
 
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  jewel.gif filter=lfs diff=lfs merge=lfs -text
37
+ mouse[[:space:]](1).gif filter=lfs diff=lfs merge=lfs -text
README (1).md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: MOUSE Gallery
3
+ emoji: ๐Ÿ”ฅ
4
+ colorFrom: purple
5
+ colorTo: pink
6
+ sdk: gradio
7
+ sdk_version: 5.6.0
8
+ app_file: app.py
9
+ pinned: false
10
+ license: apache-2.0
11
+ ---
12
+
13
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app (1).css ADDED
@@ -0,0 +1,397 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Modern color scheme */
2
+ :root {
3
+ --primary: #0066cc;
4
+ --secondary: #3385ff;
5
+ --accent: #66a3ff;
6
+ --background: #f7f9fc;
7
+ --surface: #ffffff;
8
+ --text-primary: #2c3e50;
9
+ --text-secondary: #546e7a;
10
+ --text-tertiary: #78909c;
11
+ --success: #34c759;
12
+ --warning: #ff9500;
13
+ --error: #ff3b30;
14
+ --neutral-100: #f8f9fa;
15
+ --neutral-200: #e9ecef;
16
+ --neutral-300: #dee2e6;
17
+ --neutral-400: #ced4da;
18
+ }
19
+
20
+ body {
21
+ font-family: 'Inter', system-ui, sans-serif;
22
+ background: var(--background);
23
+ color: var(--text-primary);
24
+ line-height: 1.5;
25
+ }
26
+
27
+ /* ํƒญ ์Šคํƒ€์ผ ๊ฐ•ํ™” */
28
+ .main-tabs > div.tab-nav {
29
+ background: rgba(255, 255, 255, 0.95);
30
+ padding: 10px 10px 0 10px;
31
+ border-radius: 12px 12px 0 0;
32
+ box-shadow: 0 -4px 20px rgba(0,0,0,0.05);
33
+ }
34
+
35
+ .main-tabs > div.tab-nav > button {
36
+ font-size: 1.2em !important;
37
+ padding: 0.8em 1.5em !important;
38
+ background: rgba(255, 255, 255, 0.9) !important;
39
+ border: 1px solid #eef2f6 !important;
40
+ border-bottom: none !important;
41
+ border-radius: 12px 12px 0 0 !important;
42
+ margin-right: 8px !important;
43
+ color: #94a3b8 !important;
44
+ font-weight: 500 !important;
45
+ transition: all 0.3s ease !important;
46
+ position: relative !important;
47
+ top: 1px !important;
48
+ }
49
+
50
+ .main-tabs > div.tab-nav > button:hover {
51
+ background: linear-gradient(to bottom, #ffffff, #f8fafc) !important;
52
+ color: #64748b !important;
53
+ transform: translateY(-2px);
54
+ }
55
+
56
+ .main-tabs > div.tab-nav > button.selected {
57
+ background: linear-gradient(45deg, #0084ff, #00a3ff) !important;
58
+ color: white !important;
59
+ border: none !important;
60
+ box-shadow: 0 4px 15px rgba(0,132,255,0.3) !important;
61
+ transform: translateY(-2px);
62
+ }
63
+
64
+ .main-tabs {
65
+ margin-top: -20px !important;
66
+ border-radius: 0 0 15px 15px !important;
67
+ box-shadow: 0 4px 20px rgba(0,0,0,0.08) !important;
68
+ border: 1px solid rgba(255,255,255,0.8) !important;
69
+ background: white !important;
70
+ }
71
+
72
+ /* ํƒญ ์ปจํ…์ธ  ์˜์—ญ */
73
+ .main-tabs > div[role="tabpanel"] {
74
+ background: white;
75
+ border-radius: 0 0 12px 12px;
76
+ padding: 20px;
77
+ box-shadow: inset 0 2px 10px rgba(0,0,0,0.03);
78
+ }
79
+
80
+ /* ํ”„๋กฌํ”„ํŠธ ์ž…๋ ฅ์ฐฝ ์Šคํƒ€์ผ - ๋” ๊ตฌ์ฒด์ ์ธ ์„ ํƒ์ž */
81
+ .mouse-tab .ant-input-textarea .ant-input,
82
+ .mouse-tab .ant-input-textarea-large .ant-input,
83
+ #mouse-tab .ant-input-textarea .ant-input,
84
+ #mouse-tab .ant-input-textarea-large .ant-input,
85
+ .ant-input-textarea .ant-input,
86
+ .ant-input-textarea-large .ant-input,
87
+ div[class*="ant-input"] textarea,
88
+ textarea.ant-input {
89
+ height: 300px !important;
90
+ min-height: 300px !important;
91
+ max-height: 300px !important;
92
+ resize: none !important;
93
+ border: 2px solid var(--neutral-200) !important;
94
+ border-radius: 12px !important;
95
+ padding: 1rem !important;
96
+ font-size: 14px !important;
97
+ line-height: 1.5 !important;
98
+ width: 100% !important;
99
+ box-sizing: border-box !important;
100
+ overflow-y: auto !important;
101
+ }
102
+
103
+ /* ์ปจํ…Œ์ด๋„ˆ ์Šคํƒ€์ผ๋„ ๊ฐ•์ œ ์ ์šฉ */
104
+ .mouse-tab .ant-input-textarea,
105
+ .mouse-tab .ant-input-textarea-large,
106
+ #mouse-tab .ant-input-textarea,
107
+ #mouse-tab .ant-input-textarea-large,
108
+ .ant-input-textarea,
109
+ .ant-input-textarea-large,
110
+ div[class*="ant-input-textarea"] {
111
+ height: 300px !important;
112
+ min-height: 300px !important;
113
+ max-height: 300px !important;
114
+ }
115
+
116
+
117
+ /* ์ถ”๊ฐ€์ ์ธ ์Šคํƒ€์ผ ์˜ค๋ฒ„๋ผ์ด๋“œ */
118
+ .ant-input-textarea-large .ant-input {
119
+ height: 300px !important;
120
+ min-height: 300px !important;
121
+ max-height: 300px !important;
122
+ }
123
+
124
+ /* Gradio ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ ์˜ค๋ฒ„๋ผ์ด๋“œ */
125
+ .gradio-container .gr-text-input,
126
+ .gradio-container textarea {
127
+ height: 300px !important;
128
+ min-height: 300px !important;
129
+ max-height: 300px !important;
130
+ }
131
+
132
+
133
+ /* ์ž…๋ ฅ์ฐฝ ๋ถ€๋ชจ ์š”์†Œ๋“ค์˜ ๋†’์ด ์ œํ•œ ํ•ด์ œ */
134
+ .ant-input-textarea-show-count::after,
135
+ .ant-input-textarea-large::after,
136
+ .ant-input-textarea::after {
137
+ height: auto !important;
138
+ min-height: auto !important;
139
+ max-height: none !important;
140
+ }
141
+
142
+ /* iframe ์ปจํ…Œ์ด๋„ˆ */
143
+ .html_content {
144
+ height: 800px !important;
145
+ max-height: 800px !important;
146
+ min-height: 800px !important;
147
+ border-radius: 12px;
148
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
149
+ background: var(--surface);
150
+ }
151
+
152
+ /* iframe ์ž์ฒด */
153
+ iframe {
154
+ height: 800px !important;
155
+ max-height: 800px !important;
156
+ min-height: 800px !important;
157
+ width: 100% !important;
158
+ border: none !important;
159
+ }
160
+
161
+ .left_header {
162
+ display: flex;
163
+ flex-direction: column;
164
+ justify-content: center;
165
+ align-items: center;
166
+ background: linear-gradient(135deg, var(--surface), var(--neutral-100));
167
+ backdrop-filter: blur(10px);
168
+ border-radius: 24px;
169
+ padding: 2rem;
170
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
171
+ border: 1px solid var(--neutral-200);
172
+ text-align: center;
173
+ margin-bottom: 2rem;
174
+ }
175
+
176
+ .left_header img {
177
+ width: 180px;
178
+ margin-bottom: 1rem;
179
+ border-radius: 12px;
180
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
181
+ }
182
+
183
+ .left_header h1 {
184
+ margin: 0.5rem 0;
185
+ font-weight: 600;
186
+ color: var(--text-primary);
187
+ }
188
+
189
+ .render_header {
190
+ height: 30px;
191
+ width: 100%;
192
+ padding: 5px 16px;
193
+ background-color: var(--neutral-100);
194
+ margin-top: 50px;
195
+ border-radius: 8px 8px 0 0;
196
+ }
197
+
198
+ .header_btn {
199
+ display: inline-block;
200
+ height: 10px;
201
+ width: 10px;
202
+ border-radius: 50%;
203
+ margin-right: 4px;
204
+ }
205
+
206
+ .render_header > .header_btn:nth-child(1) {
207
+ background-color: var(--error);
208
+ }
209
+
210
+ .render_header > .header_btn:nth-child(2) {
211
+ background-color: var(--warning);
212
+ }
213
+
214
+ .render_header > .header_btn:nth-child(3) {
215
+ background-color: var(--success);
216
+ }
217
+
218
+ .setting-buttons {
219
+ position: sticky;
220
+ top: 1rem;
221
+ right: 0;
222
+ z-index: 1000;
223
+ display: flex;
224
+ gap: 8px;
225
+ padding: 12px;
226
+ background: rgba(255, 255, 255, 0.9);
227
+ backdrop-filter: blur(8px);
228
+ border-radius: 12px;
229
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
230
+ border: 1px solid var(--neutral-200);
231
+ }
232
+
233
+ .ant-btn {
234
+ flex: 1;
235
+ min-width: 80px;
236
+ border-radius: 8px;
237
+ font-weight: 500;
238
+ transition: all 0.3s;
239
+ height: 40px;
240
+ display: flex;
241
+ align-items: center;
242
+ justify-content: center;
243
+ }
244
+
245
+ .ant-btn-primary {
246
+ background: linear-gradient(to right, var(--primary), var(--secondary));
247
+ border: none;
248
+ color: white;
249
+ }
250
+
251
+ .ant-btn-primary:hover {
252
+ transform: translateY(-2px);
253
+ box-shadow: 0 4px 12px rgba(0, 102, 204, 0.3);
254
+ }
255
+
256
+ .ant-btn-default {
257
+ background: var(--surface);
258
+ border: 1px solid var(--primary);
259
+ color: var(--primary);
260
+ }
261
+
262
+ .ant-btn-default:hover {
263
+ color: var(--secondary);
264
+ border-color: var(--secondary);
265
+ transform: translateY(-2px);
266
+ box-shadow: 0 4px 12px rgba(0, 102, 204, 0.1);
267
+ }
268
+
269
+ .ant-btn-default[title="Code ์‹คํ–‰"] {
270
+ background-color: var(--success);
271
+ color: white;
272
+ border: none;
273
+ }
274
+
275
+ .ant-btn-default[title="Code ์‹คํ–‰"]:hover {
276
+ background-color: #40d869;
277
+ }
278
+
279
+ /* ์Šคํฌ๋กค๋ฐ” ์„ค์ • */
280
+ ::-webkit-scrollbar {
281
+ width: 8px;
282
+ height: 8px;
283
+ }
284
+
285
+ ::-webkit-scrollbar-track {
286
+ background: var(--neutral-100);
287
+ }
288
+
289
+ ::-webkit-scrollbar-thumb {
290
+ background: var(--neutral-300);
291
+ border-radius: 4px;
292
+ }
293
+
294
+ ::-webkit-scrollbar-thumb:hover {
295
+ background: var(--neutral-400);
296
+ }
297
+
298
+ /* Drawer customization */
299
+ .ant-drawer-content-wrapper {
300
+ border-radius: 16px 0 0 16px;
301
+ }
302
+
303
+ .ant-drawer-header {
304
+ background: var(--primary);
305
+ color: white;
306
+ border-radius: 16px 0 0 0;
307
+ }
308
+
309
+ .ant-drawer-title {
310
+ color: white;
311
+ font-weight: 500;
312
+ }
313
+
314
+ .ant-drawer-close {
315
+ color: white;
316
+ }
317
+
318
+ .ant-drawer-body {
319
+ background: var(--surface);
320
+ }
321
+
322
+ /* ์ž…๋ ฅ์ฐฝ ํฌ์ปค์Šค ์Šคํƒ€์ผ */
323
+ .ant-input-textarea textarea:focus {
324
+ border-color: var(--accent);
325
+ box-shadow: 0 0 0 3px rgba(102, 163, 255, 0.2);
326
+ }
327
+
328
+ /* Responsive adjustments */
329
+ @media (max-width: 768px), screen and (max-height: 900px) {
330
+ .left_header {
331
+ padding: 1rem;
332
+ }
333
+
334
+ .setting-buttons {
335
+ flex-wrap: wrap;
336
+ }
337
+
338
+ .ant-btn {
339
+ min-width: 60px;
340
+ font-size: 0.9rem;
341
+ }
342
+
343
+ /* ๋ชจ๋ฐ”์ผ์—์„œ๋„ ๋™์ผํ•œ ๋†’์ด ์œ ์ง€ */
344
+ div[class*="ant-input-textarea"],
345
+ div[class*="ant-input-textarea"] textarea,
346
+ .ant-input-textarea,
347
+ .ant-input-textarea textarea,
348
+ .ant-input-textarea-large,
349
+ .ant-input-textarea-large textarea,
350
+ .ant-input.ant-input-textarea-large,
351
+ .ant-input.ant-input-textarea-large textarea,
352
+ textarea.ant-input,
353
+ .ant-input-textarea .ant-input,
354
+ .ant-input-textarea-large .ant-input,
355
+ #mouse-tab textarea,
356
+ .mouse-tab textarea,
357
+ [class*="textbox"] textarea,
358
+ .gradio-container textarea,
359
+ .gr-text-input,
360
+ textarea.gr-text-input,
361
+ .gr-panel textarea {
362
+ height: 300px !important;
363
+ min-height: 300px !important;
364
+ max-height: 300px !important;
365
+ }
366
+
367
+ .html_content,
368
+ iframe {
369
+ height: 800px !important;
370
+ min-height: 800px !important;
371
+ max-height: 800px !important;
372
+ }
373
+
374
+ .right_panel {
375
+ height: calc(100vh - 80px);
376
+ min-height: 600px;
377
+ }
378
+
379
+ .html_content {
380
+ height: calc(100vh - 160px);
381
+ min-height: 500px;
382
+ }
383
+ }
384
+
385
+ footer, .footer, div[class*="footer"], #footer {
386
+ display: none !important;
387
+ }
388
+
389
+ /* ์šฐ์ธก ํŒจ๋„ ์Šคํƒ€์ผ */
390
+ .right_panel {
391
+ background: white;
392
+ border-radius: 15px;
393
+ padding: 20px;
394
+ box-shadow: 0 4px 15px rgba(0,0,0,0.1);
395
+ height: calc(100vh - 100px);
396
+ min-height: 800px;
397
+ }
app (23).py ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ import os
2
+ exec(os.environ.get('APP'))
config (1).py ADDED
@@ -0,0 +1,228 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ DEMO_LIST = [
3
+
4
+ {
5
+ "card": {
6
+ "index": 1
7
+ },
8
+ "title": "3D ๋ถ„์ž ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ",
9
+ "description": "Three.js๋กœ 3D ๋ถ„์ž ๊ตฌ์กฐ๋ฅผ ์‹œ๊ฐํ™”ํ•˜์„ธ์š”. ํšŒ์ „, ์คŒ, ์›์ž ์ •๋ณด ํ‘œ์‹œ ๊ธฐ๋Šฅ๊ณผ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•˜์„ธ์š”."
10
+ },
11
+ {
12
+ "card": {
13
+ "index": 2,
14
+ },
15
+ "title": "๋‹ค์ด๋‚˜๋ฏน ์ฐจํŠธ ๋Œ€์‰ฌ๋ณด๋“œ",
16
+ "description": "Create an interactive dashboard with Chart.js showing different types of charts (line, bar, pie) with smooth animations. Include buttons to switch between different data views.",
17
+ },
18
+
19
+ {
20
+ "card": {
21
+ "index": 4,
22
+ },
23
+ "title": "์Œ์•… ๋น„์ฃผ์–ผ๋ผ์ด์ €",
24
+ "description": "Web Audio API์™€ Canvas๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋””์˜ค ๋น„์ฃผ์–ผ๋ผ์ด์ €๋ฅผ ์ œ์ž‘ํ•ด ๋ณด์„ธ์š”. ์Œ์•… ์ฃผํŒŒ์ˆ˜ ๋ฐ์ดํ„ฐ์— ๋ฐ˜์‘ํ•˜๋Š” ๋™์ ์ธ ๋ง‰๋Œ€๋“ค์ด ๋ถ€๋“œ๋Ÿฌ์šด ์• ๋‹ˆ๋ฉ”์ด์…˜์œผ๋กœ ์›€์ง์ด๋„๋ก ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์žฌ์ƒ/์ผ์‹œ ์ •์ง€ ์ปจํŠธ๋กค๊ณผ ์ƒ‰์ƒ ํ…Œ๋งˆ ์„ ํƒ ๊ธฐ๋Šฅ๋„ ํฌํ•จํ•˜์„ธ์š”."
25
+ },
26
+ {
27
+ "card": {
28
+ "index": 5,
29
+ },
30
+ "title": "Interactive Timeline",
31
+ "description": "Create a vertical timeline with animated entry points. When clicking on timeline items, show detailed information with smooth transitions. Include filtering options and scroll animations."
32
+ },
33
+ {
34
+ "card": {
35
+ "index": 6,
36
+ },
37
+ "title": "์นด๋“œ ๊ธฐ์–ต ๊ฒŒ์ž„",
38
+ "description": "Create a classic memory matching card game with flip animations. Include a scoring system, timer, and difficulty levels. Add satisfying match/mismatch animations and sound effects using Web Audio API."
39
+ },
40
+
41
+ {
42
+ "card": {
43
+ "index": 7
44
+ },
45
+ "title": "์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ปฌ๋Ÿฌ ํŒ”๋ ˆํŠธ",
46
+ "description": "๋งˆ์šฐ์Šค ์›€์ง์ž„์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” ์ปฌ๋Ÿฌ ํŒ”๋ ˆํŠธ๋ฅผ ๋งŒ๋“œ์„ธ์š”. ์ƒ‰์ƒ ์„ ํƒ, ์ €์žฅ, ์กฐํ•ฉ ๊ธฐ๋Šฅ๊ณผ ํ•จ๊ป˜ ๋ถ€๋“œ๋Ÿฌ์šด ๊ทธ๋ผ๋ฐ์ด์…˜ ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•˜์„ธ์š”."
47
+ },
48
+ {
49
+ "card": {
50
+ "index": 8
51
+ },
52
+ "title": "๋‚ ์”จ ์œ„์ ฏ ์• ๋‹ˆ๋ฉ”์ด์…˜",
53
+ "description": "ํ˜„์žฌ ๋‚ ์”จ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ์œ„์ ฏ์„ ๋งŒ๋“œ์„ธ์š”. ๋น„, ๋ˆˆ, ๊ตฌ๋ฆ„, ๋ฒˆ๊ฐœ ๋“ฑ์˜ ๋‚ ์”จ ํšจ๊ณผ๋ฅผ Canvas๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ๋ถ€๋“œ๋Ÿฌ์šด ์ „ํ™˜ ํšจ๊ณผ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”."
54
+ },
55
+ {
56
+ "card": {
57
+ "index": 9
58
+ },
59
+ "title": "ํŒŒํ‹ฐํด ํ…์ŠคํŠธ ์ดํŽ™ํŠธ",
60
+ "description": "ํ…์ŠคํŠธ๊ฐ€ ํŒŒํ‹ฐํด๋กœ ๋ณ€ํ™˜๋˜๋Š” ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•˜์„ธ์š”. ๋งˆ์šฐ์Šค ํ˜ธ๋ฒ„์‹œ ๊ธ€์ž๊ฐ€ ํฉ์–ด์กŒ๋‹ค๊ฐ€ ๋‹ค์‹œ ๋ชจ์ด๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ Canvas๋กœ ๋งŒ๋“œ์„ธ์š”."
61
+ },
62
+ {
63
+ "card": {
64
+ "index": 10
65
+ },
66
+ "title": "3D ์ฑ…์žฅ ๊ฐค๋Ÿฌ๋ฆฌ",
67
+ "description": "CSS 3D ๋ณ€ํ™˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํšŒ์ „ํ•˜๋Š” ์ฑ…์žฅ ํ˜•ํƒœ์˜ ๊ฐค๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“œ์„ธ์š”. ๊ฐ ์ฑ…์„ ํด๋ฆญํ•˜๋ฉด ์ƒ์„ธ ์ •๋ณด๊ฐ€ ๋‚˜ํƒ€๋‚˜๋„๋ก ๊ตฌํ˜„ํ•˜์„ธ์š”."
68
+ },
69
+ {
70
+ "card": {
71
+ "index": 11
72
+ },
73
+ "title": "๋ฆฌ๋“ฌ ๊ฒŒ์ž„",
74
+ "description": "Web Audio API๋ฅผ ํ™œ์šฉํ•œ ๊ฐ„๋‹จํ•œ ๋ฆฌ๋“ฌ ๊ฒŒ์ž„์„ ๋งŒ๋“œ์„ธ์š”. ๋–จ์–ด์ง€๋Š” ๋…ธํŠธ์™€ ํƒ€์ด๋ฐ ํŒ์ •, ์ ์ˆ˜ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜์„ธ์š”."
75
+ },
76
+ {
77
+ "card": {
78
+ "index": 12
79
+ },
80
+ "title": "SVG ํŒจ์Šค ์• ๋‹ˆ๋ฉ”์ด์…˜",
81
+ "description": "SVG ํŒจ์Šค๋ฅผ ๋”ฐ๋ผ ์›€์ง์ด๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ•˜์„ธ์š”. ๋‹ค์–‘ํ•œ ๋„ํ˜•์ด ๊ทธ๋ ค์ง€๋Š” ๊ณผ์ •์„ ๋ณด์—ฌ์ฃผ๊ณ  ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•œ ์ปจํŠธ๋กค์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”."
82
+ },
83
+ {
84
+ "card": {
85
+ "index": 13
86
+ },
87
+ "title": "๋“œ๋กœ์ž‰ ๋ณด๋“œ",
88
+ "description": "Canvas๋ฅผ ์‚ฌ์šฉํ•œ ๊ทธ๋ฆฌ๊ธฐ ๋„๊ตฌ๋ฅผ ๋งŒ๋“œ์„ธ์š”. ๋ธŒ๋Ÿฌ์‹œ ํฌ๊ธฐ, ์ƒ‰์ƒ ๋ณ€๊ฒฝ, ์ง€์šฐ๊ฐœ ๊ธฐ๋Šฅ๊ณผ ๊ทธ๋ฆฌ๊ธฐ ๊ธฐ๋ก ์ €์žฅ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์„ธ์š”."
89
+ },
90
+ {
91
+ "card": {
92
+ "index": 14
93
+ },
94
+ "title": "ํผ์ฆ ์Šฌ๋ผ์ด๋“œ ๊ฒŒ์ž„",
95
+ "description": "์ˆซ์ž๋‚˜ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•œ ์Šฌ๋ผ์ด๋“œ ํผ์ฆ ๊ฒŒ์ž„์„ ๋งŒ๋“œ์„ธ์š”. ์ด๋™ ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ์™„์„ฑ ํ™•์ธ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”."
96
+ },
97
+ {
98
+ "card": {
99
+ "index": 15
100
+ },
101
+ "title": "ํŒŒํ‹ฐํด ์ปค์„œ ํšจ๊ณผ",
102
+ "description": "๋งˆ์šฐ์Šค ์ปค์„œ๋ฅผ ๋”ฐ๋ผ๋‹ค๋‹ˆ๋Š” ํŒŒํ‹ฐํด ํšจ๊ณผ๋ฅผ ๋งŒ๋“œ์„ธ์š”. ๋‹ค์–‘ํ•œ ํŒŒํ‹ฐํด ํŒจํ„ด๊ณผ ์ƒ‰์ƒ ๋ณ€ํ™”๋ฅผ ๊ตฌํ˜„ํ•˜์„ธ์š”."
103
+ },
104
+ {
105
+ "card": {
106
+ "index": 16
107
+ },
108
+ "title": "์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋‹ฌ๋ ฅ",
109
+ "description": "๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์œผ๋กœ ์ผ์ •์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ฌ๋ ฅ์„ ๋งŒ๋“œ์„ธ์š”. ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ์™€ ์ผ์ • ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”."
110
+ },
111
+
112
+ {
113
+ "card": {
114
+ "index": 18
115
+ },
116
+ "title": "ํƒ€์ž ๊ฒŒ์ž„",
117
+ "description": "๋–จ์–ด์ง€๋Š” ๋‹จ์–ด๋ฅผ ํƒ€์ดํ•‘ํ•˜์—ฌ ์ ์ˆ˜๋ฅผ ์–ป๋Š” ๊ฒŒ์ž„์„ ๋งŒ๋“œ์„ธ์š”. ๋‚œ์ด๋„ ์กฐ์ ˆ๊ณผ ํšจ๊ณผ์Œ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”."
118
+ },
119
+ {
120
+ "card": {
121
+ "index": 19
122
+ },
123
+ "title": "๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ์• ๋‹ˆ๋ฉ”์ด์…˜",
124
+ "description": "D3.js๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ณ€ํ™”๋ฅผ ์• ๋‹ˆ๋ฉ”์ด์…˜์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ์ฐจํŠธ๋ฅผ ๋งŒ๋“œ์„ธ์š”. ๋‹ค์–‘ํ•œ ์ „ํ™˜ ํšจ๊ณผ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”."
125
+ },
126
+
127
+ {
128
+ "card": {
129
+ "index": 21
130
+ },
131
+ "title": "๋ฌผ๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜",
132
+ "description": "Canvas๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ๋ฌผ๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๊ตฌํ˜„ํ•˜์„ธ์š”. ์ค‘๋ ฅ, ์ถฉ๋Œ, ํƒ„์„ฑ ํšจ๊ณผ๋ฅผ ์ ์šฉํ•œ ๊ณต ํŠ€๊ธฐ๊ธฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๋งŒ๋“œ์„ธ์š”."
133
+ },
134
+ {
135
+ "card": {
136
+ "index": 22
137
+ },
138
+ "title": "์‚ฌ์šด๋“œ ๋ฏน์„œ",
139
+ "description": "Web Audio API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์Œ์›์„ ๋ฏน์‹ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“œ์„ธ์š”. ๋ณผ๋ฅจ, ํŒจ๋‹, ์ดํŽ™ํŠธ ์กฐ์ ˆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์„ธ์š”."
140
+ },
141
+ {
142
+ "card": {
143
+ "index": 23
144
+ },
145
+ "title": "3D ์นด๋“œ ๊ฐค๋Ÿฌ๋ฆฌ",
146
+ "description": "Three.js๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 3D ๊ณต๊ฐ„์—์„œ ํšŒ์ „ํ•˜๋Š” ์นด๋“œ ๊ฐค๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“œ์„ธ์š”. ๋งˆ์šฐ์Šค ์ธํ„ฐ๋ž™์…˜๊ณผ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”."
147
+ },
148
+ {
149
+ "card": {
150
+ "index": 24
151
+ },
152
+ "title": "์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋งต",
153
+ "description": "SVG๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•œ ์ง€๋„๋ฅผ ๋งŒ๋“œ์„ธ์š”. ์ง€์—ญ ์„ ํƒ, ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”, ์คŒ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์„ธ์š”."
154
+ },
155
+ {
156
+ "card": {
157
+ "index": 25
158
+ },
159
+ "title": "๋ฒฝ๋Œ๊นจ๊ธฐ ๊ฒŒ์ž„",
160
+ "description": "๋ฒฝ๋Œ๊นจ๊ธฐ ๊ฒŒ์ž„"
161
+ },
162
+ {
163
+ "card": {
164
+ "index": 26
165
+ },
166
+ "title": "ํฌํ†  ์—๋””ํ„ฐ",
167
+ "description": "Canvas๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ์ ์ธ ์ด๋ฏธ์ง€ ํŽธ์ง‘ ๋„๊ตฌ๋ฅผ ๋งŒ๋“œ์„ธ์š”. ํ•„ํ„ฐ ์ ์šฉ, ์ž๋ฅด๊ธฐ, ํšŒ์ „ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์„ธ์š”."
168
+ },
169
+
170
+
171
+ {
172
+ "card": {
173
+ "index": 30
174
+ },
175
+ "title": "์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋งˆ์ธ๋“œ๋งต",
176
+ "description": "D3.js๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์  ๋งˆ์ธ๋“œ๋งต์„ ๋งŒ๋“œ์„ธ์š”. ๋…ธ๋“œ ์ถ”๊ฐ€/์‚ญ์ œ, ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ, ํ™•์žฅ/์ถ•์†Œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ•˜์„ธ์š”."
177
+ },
178
+ {
179
+ "card": {
180
+ "index": 31
181
+ },
182
+ "title": "3D ์ง€ํ˜• ์ƒ์„ฑ๊ธฐ",
183
+ "description": "Three.js๋กœ ํ”„๋กœ์‹œ์ €๋Ÿด ์ง€ํ˜•์„ ์ƒ์„ฑํ•˜์„ธ์š”. ๊ณ ๋„, ํ…์Šค์ฒ˜, ๋ฌผ ํšจ๊ณผ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ์„ธ์š”."
184
+ },
185
+
186
+
187
+
188
+ {
189
+ "card": {
190
+ "index": 35
191
+ },
192
+ "title": "3D ํ…์ŠคํŠธ ์• ๋‹ˆ๋ฉ”์ดํ„ฐ",
193
+ "description": "Three.js๋กœ 3D ํ…์ŠคํŠธ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“œ์„ธ์š”. ๋‹ค์–‘ํ•œ ๋ณ€ํ™˜ ํšจ๊ณผ์™€ ๋ฌผ๋ฆฌ ๊ธฐ๋ฐ˜ ์ž…์ž ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•˜์„ธ์š”."
194
+ },
195
+
196
+
197
+
198
+ {
199
+ "card": {
200
+ "index": 39
201
+ },
202
+ "title": "ํŒจํ„ด ๋””์ž์ด๋„ˆ",
203
+ "description": "SVG๋กœ ๋ฐ˜๋ณต ํŒจํ„ด์„ ๋””์ž์ธํ•˜๋Š” ๋„๊ตฌ๋ฅผ ๋งŒ๋“œ์„ธ์š”. ๋Œ€์นญ ์˜ต์…˜, ์ƒ‰์ƒ ์Šคํ‚ค๋งˆ ๊ด€๋ฆฌ, ์‹ค์‹œ๊ฐ„ ํ”„๋ฆฌ๋ทฐ๋ฅผ ๊ตฌํ˜„ํ•˜์„ธ์š”."
204
+ },
205
+
206
+ {
207
+ "card": {
208
+ "index": 41
209
+ },
210
+ "title": "์‹ค์‹œ๊ฐ„ ํ•„ํ„ฐ ์นด๋ฉ”๋ผ",
211
+ "description": "WebRTC์™€ Canvas๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ๋น„๋””์˜ค ํ•„ํ„ฐ ์•ฑ์„ ๋งŒ๋“œ์„ธ์š”. ๋‹ค์–‘ํ•œ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•˜์„ธ์š”."
212
+ },
213
+
214
+ {
215
+ "card": {
216
+ "index": 47
217
+ },
218
+ "title": "Interactive Stars",
219
+ "description": "Interactive Stars: Watch stars and constellations appear in the night sky as you move your mouse."
220
+ },
221
+ {
222
+ "card": {
223
+ "index": 46
224
+ },
225
+ "title": "์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ํ”Œ๋กœ์šฐ",
226
+ "description": "D3.js๋กœ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์‹œ๊ฐํ™”ํ•˜์„ธ์š”. ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ•˜์„ธ์š”."
227
+ }
228
+ ]
mouse (1).gif ADDED

Git LFS Details

  • SHA256: 55e49ab15b482f04e0da028f70ec04b331ac580ea942e0dfc828af3790da84d6
  • Pointer size: 132 Bytes
  • Size of remote file: 1.24 MB
packages (3).txt ADDED
@@ -0,0 +1 @@
 
 
1
+ chromium-driver
requirements (5).txt ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ requests
2
+ gradio
3
+ pandas
4
+ selenium
5
+ Pillow
6
+ huggingface_hub
7
+ torch
8
+ dashscope
9
+ sentencepiece
10
+ modelscope_studio~=1.0.0b
11
+ anthropic
12
+ transformers
13
+ accelerate
14
+ openai