Sami commited on
Commit
ada290b
·
1 Parent(s): 802577d

Auto-commit: Updates Thu Feb 6 02:16:39 CET 2025

Browse files
Voice-Clone-Multilingual.code-workspace ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "folders": [
3
+ {
4
+ "path": "."
5
+ },
6
+ {
7
+ "name": "Filtered View",
8
+ "uri": "fildir:/"
9
+ }
10
+ ],
11
+ "settings": {}
12
+ }
autome.html ADDED
@@ -0,0 +1,297 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
6
+ <meta name="theme-color" content="#1a1a2e">
7
+ <meta name="apple-mobile-web-app-capable" content="yes">
8
+ <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
9
+ <title>自动me | AutoMe</title>
10
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css">
11
+ <style>
12
+ :root {
13
+ --primary-color: #4a90e2;
14
+ --background-start: #1a1a2e;
15
+ --background-end: #16213e;
16
+ --text-color: #ffffff;
17
+ --tab-height: 60px;
18
+ }
19
+
20
+ * {
21
+ margin: 0;
22
+ padding: 0;
23
+ box-sizing: border-box;
24
+ -webkit-tap-highlight-color: transparent;
25
+ }
26
+
27
+ body {
28
+ margin: 0;
29
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
30
+ background: linear-gradient(135deg, var(--background-start), var(--background-end));
31
+ color: var(--text-color);
32
+ min-height: 100vh;
33
+ overflow-x: hidden;
34
+ }
35
+
36
+ .container {
37
+ max-width: 1200px;
38
+ margin: 0 auto;
39
+ padding: 20px;
40
+ padding-bottom: calc(var(--tab-height) + 20px);
41
+ }
42
+
43
+ .header {
44
+ text-align: center;
45
+ padding: 20px 0;
46
+ margin-bottom: 20px;
47
+ }
48
+
49
+ .logo {
50
+ font-size: 2.5em;
51
+ font-weight: bold;
52
+ background: linear-gradient(45deg, #ff6b6b, #4ecdc4);
53
+ -webkit-background-clip: text;
54
+ background-clip: text;
55
+ -webkit-text-fill-color: transparent;
56
+ margin-bottom: 10px;
57
+ }
58
+
59
+ .tabs {
60
+ position: fixed;
61
+ bottom: 0;
62
+ left: 0;
63
+ right: 0;
64
+ height: var(--tab-height);
65
+ display: flex;
66
+ background: rgba(0, 0, 0, 0.8);
67
+ backdrop-filter: blur(10px);
68
+ -webkit-backdrop-filter: blur(10px);
69
+ z-index: 1000;
70
+ }
71
+
72
+ .tab {
73
+ flex: 1;
74
+ display: flex;
75
+ flex-direction: column;
76
+ align-items: center;
77
+ justify-content: center;
78
+ color: var(--text-color);
79
+ border: none;
80
+ background: none;
81
+ cursor: pointer;
82
+ padding: 10px;
83
+ transition: all 0.3s ease;
84
+ gap: 5px;
85
+ }
86
+
87
+ .tab i {
88
+ font-size: 24px;
89
+ }
90
+
91
+ .tab span {
92
+ font-size: 12px;
93
+ }
94
+
95
+ .tab.active {
96
+ color: var(--primary-color);
97
+ }
98
+
99
+ .tab-content {
100
+ display: none;
101
+ background: rgba(255, 255, 255, 0.05);
102
+ border-radius: 20px;
103
+ overflow: hidden;
104
+ box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
105
+ backdrop-filter: blur(5px);
106
+ -webkit-backdrop-filter: blur(5px);
107
+ border: 1px solid rgba(255, 255, 255, 0.1);
108
+ animation: fadeIn 0.3s ease;
109
+ }
110
+
111
+ .tab-content.active {
112
+ display: block;
113
+ }
114
+
115
+ .music-controls {
116
+ position: fixed;
117
+ top: 20px;
118
+ right: 20px;
119
+ background: rgba(0, 0, 0, 0.8);
120
+ padding: 10px;
121
+ border-radius: 50px;
122
+ backdrop-filter: blur(10px);
123
+ -webkit-backdrop-filter: blur(10px);
124
+ z-index: 1001;
125
+ transform: scale(0.8);
126
+ transition: transform 0.3s ease;
127
+ }
128
+
129
+ .music-controls:hover {
130
+ transform: scale(1);
131
+ }
132
+
133
+ iframe, gradio-app {
134
+ width: 100%;
135
+ border-radius: 20px;
136
+ background: white;
137
+ height: 750px;
138
+ }
139
+
140
+ .loading {
141
+ position: fixed;
142
+ top: 0;
143
+ left: 0;
144
+ right: 0;
145
+ bottom: 0;
146
+ background: var(--background-start);
147
+ display: flex;
148
+ justify-content: center;
149
+ align-items: center;
150
+ z-index: 2000;
151
+ }
152
+
153
+ .loading-spinner {
154
+ width: 50px;
155
+ height: 50px;
156
+ border: 5px solid #f3f3f3;
157
+ border-top: 5px solid var(--primary-color);
158
+ border-radius: 50%;
159
+ animation: spin 1s linear infinite;
160
+ }
161
+
162
+ @keyframes spin {
163
+ 0% { transform: rotate(0deg); }
164
+ 100% { transform: rotate(360deg); }
165
+ }
166
+
167
+ @keyframes fadeIn {
168
+ from { opacity: 0; }
169
+ to { opacity: 1; }
170
+ }
171
+
172
+ @media (max-width: 768px) {
173
+ .container {
174
+ padding: 10px;
175
+ }
176
+
177
+ iframe, gradio-app {
178
+ height: calc(100vh - 180px);
179
+ }
180
+
181
+ .header {
182
+ padding: 10px 0;
183
+ }
184
+
185
+ .logo {
186
+ font-size: 2em;
187
+ }
188
+ }
189
+
190
+ /* Add native-like touch feedback */
191
+ @media (hover: hover) {
192
+ .tab:hover {
193
+ background: rgba(255, 255, 255, 0.1);
194
+ }
195
+ }
196
+
197
+ .tab:active {
198
+ transform: scale(0.95);
199
+ }
200
+ </style>
201
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
202
+ </head>
203
+ <body>
204
+ <div class="loading">
205
+ <div class="loading-spinner"></div>
206
+ </div>
207
+
208
+ <div class="container">
209
+ <div class="header">
210
+ <div class="logo">
211
+ <span class="cn">自动me</span>
212
+ <span class="en">AutoMe</span>
213
+ </div>
214
+ </div>
215
+
216
+ <div id="voice" class="tab-content active">
217
+ <gradio-app src="https://luigi12345-voice-clone-multilingual.hf.space"></gradio-app>
218
+ </div>
219
+
220
+ <div id="video" class="tab-content">
221
+ <iframe
222
+ src="https://fffiloni-videoretalking.hf.space"
223
+ frameborder="0"
224
+ ></iframe>
225
+ </div>
226
+ </div>
227
+
228
+ <div class="tabs">
229
+ <button class="tab active" onclick="switchTab('voice')">
230
+ <i class="fas fa-microphone"></i>
231
+ <span class="cn">声音克隆</span>
232
+ <span class="en">Voice Clone</span>
233
+ </button>
234
+ <button class="tab" onclick="switchTab('video')">
235
+ <i class="fas fa-video"></i>
236
+ <span class="cn">视频重说</span>
237
+ <span class="en">Video Retalk</span>
238
+ </button>
239
+ </div>
240
+
241
+ <div class="music-controls">
242
+ <audio controls loop>
243
+ <source src="https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3" type="audio/mpeg">
244
+ </audio>
245
+ </div>
246
+
247
+ <script type="module" src="https://gradio.s3-us-west-2.amazonaws.com/4.36.1/gradio.js"></script>
248
+ <script>
249
+ // Detect language preference
250
+ const userLang = navigator.language || navigator.userLanguage;
251
+ const isChinese = userLang.toLowerCase().includes('zh');
252
+ document.documentElement.lang = isChinese ? 'zh' : 'en';
253
+ document.body.classList.add(isChinese ? 'zh' : 'en');
254
+
255
+ // Show/hide language specific elements
256
+ document.querySelectorAll('.cn').forEach(el => {
257
+ el.style.display = isChinese ? 'inline' : 'none';
258
+ });
259
+ document.querySelectorAll('.en').forEach(el => {
260
+ el.style.display = isChinese ? 'none' : 'inline';
261
+ });
262
+
263
+ // Tab switching
264
+ function switchTab(tabId) {
265
+ document.querySelectorAll('.tab-content').forEach(content => {
266
+ content.classList.remove('active');
267
+ });
268
+ document.querySelectorAll('.tab').forEach(tab => {
269
+ tab.classList.remove('active');
270
+ });
271
+ document.getElementById(tabId).classList.add('active');
272
+ event.target.closest('.tab').classList.add('active');
273
+ }
274
+
275
+ // Remove loading screen when content is loaded
276
+ window.addEventListener('load', () => {
277
+ setTimeout(() => {
278
+ document.querySelector('.loading').style.display = 'none';
279
+ }, 1500);
280
+ });
281
+
282
+ // Handle PWA installation
283
+ if ('serviceWorker' in navigator) {
284
+ navigator.serviceWorker.register('/sw.js').catch(function(err) {
285
+ console.log('ServiceWorker registration failed: ', err);
286
+ });
287
+ }
288
+
289
+ // Prevent pull-to-refresh on mobile
290
+ document.body.addEventListener('touchmove', function(e) {
291
+ if (window.pageYOffset === 0) {
292
+ e.preventDefault();
293
+ }
294
+ }, { passive: false });
295
+ </script>
296
+ </body>
297
+ </html>