Voxefx commited on
Commit
b2ee00d
·
verified ·
1 Parent(s): 02b2998

Add 3 files

Browse files
Files changed (3) hide show
  1. README.md +7 -5
  2. index.html +655 -19
  3. prompts.txt +0 -0
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Lyrical Muse
3
- emoji: 🐨
4
- colorFrom: green
5
- colorTo: red
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: lyrical-muse
3
+ emoji: 🐳
4
+ colorFrom: purple
5
+ colorTo: pink
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,655 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Lyric Muse - AI-Powered Lyrics Generator</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
9
+ <style>
10
+ @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap');
11
+
12
+ body {
13
+ font-family: 'Poppins', sans-serif;
14
+ background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
15
+ min-height: 100vh;
16
+ }
17
+
18
+ .artist-card {
19
+ transition: all 0.3s ease;
20
+ transform: scale(0.95);
21
+ }
22
+
23
+ .artist-card:hover {
24
+ transform: scale(1);
25
+ box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1);
26
+ }
27
+
28
+ .artist-card.selected {
29
+ border: 3px solid #6366f1;
30
+ transform: scale(1);
31
+ }
32
+
33
+ .lyrics-container {
34
+ background: linear-gradient(to right, #f8fafc, #f1f5f9);
35
+ border-left: 4px solid #6366f1;
36
+ }
37
+
38
+ .typewriter {
39
+ overflow: hidden;
40
+ border-right: .15em solid #6366f1;
41
+ white-space: pre-wrap;
42
+ margin: 0 auto;
43
+ letter-spacing: .15em;
44
+ animation:
45
+ typing 3.5s steps(40, end),
46
+ blink-caret .75s step-end infinite;
47
+ }
48
+
49
+ @keyframes typing {
50
+ from { width: 0 }
51
+ to { width: 100% }
52
+ }
53
+
54
+ @keyframes blink-caret {
55
+ from, to { border-color: transparent }
56
+ 50% { border-color: #6366f1; }
57
+ }
58
+
59
+ .fade-in {
60
+ animation: fadeIn 1.5s;
61
+ }
62
+
63
+ @keyframes fadeIn {
64
+ from { opacity: 0; }
65
+ to { opacity: 1; }
66
+ }
67
+ </style>
68
+ </head>
69
+ <body class="min-h-screen py-10 px-4 sm:px-6 lg:px-8">
70
+ <div class="max-w-6xl mx-auto">
71
+ <!-- Header -->
72
+ <header class="text-center mb-12">
73
+ <h1 class="text-4xl font-bold text-indigo-600 mb-2">Lyric Muse</h1>
74
+ <p class="text-lg text-gray-600">Generate lyrics inspired by your favorite artists</p>
75
+ <div class="w-24 h-1 bg-indigo-400 mx-auto mt-4 rounded-full"></div>
76
+ </header>
77
+
78
+ <!-- Main Content -->
79
+ <main class="bg-white rounded-xl shadow-xl overflow-hidden">
80
+ <!-- Generator Section -->
81
+ <section class="p-6 md:p-8">
82
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-8">
83
+ <!-- Input Section -->
84
+ <div>
85
+ <h2 class="text-2xl font-semibold text-gray-800 mb-6">Create Your Lyrics</h2>
86
+
87
+ <!-- Artist Selection -->
88
+ <div class="mb-8">
89
+ <h3 class="text-lg font-medium text-gray-700 mb-4">Select an Artist</h3>
90
+ <div class="grid grid-cols-2 sm:grid-cols-3 gap-4" id="artist-grid">
91
+ <!-- Artists will be added here by JavaScript -->
92
+ </div>
93
+ </div>
94
+
95
+ <!-- Theme Input -->
96
+ <div class="mb-6">
97
+ <label for="theme" class="block text-lg font-medium text-gray-700 mb-2">Theme or Keywords</label>
98
+ <input type="text" id="theme" placeholder="e.g. love, heartbreak, summer nights"
99
+ class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500 transition">
100
+ </div>
101
+
102
+ <!-- Mood Selection -->
103
+ <div class="mb-8">
104
+ <label class="block text-lg font-medium text-gray-700 mb-2">Mood</label>
105
+ <div class="flex flex-wrap gap-3">
106
+ <button class="mood-btn px-4 py-2 rounded-full bg-gray-100 hover:bg-indigo-100 text-gray-700 hover:text-indigo-700 transition" data-mood="happy">😊 Happy</button>
107
+ <button class="mood-btn px-4 py-2 rounded-full bg-gray-100 hover:bg-indigo-100 text-gray-700 hover:text-indigo-700 transition" data-mood="sad">😢 Sad</button>
108
+ <button class="mood-btn px-4 py-2 rounded-full bg-gray-100 hover:bg-indigo-100 text-gray-700 hover:text-indigo-700 transition" data-mood="romantic">❤️ Romantic</button>
109
+ <button class="mood-btn px-4 py-2 rounded-full bg-gray-100 hover:bg-indigo-100 text-gray-700 hover:text-indigo-700 transition" data-mood="angry">😠 Angry</button>
110
+ <button class="mood-btn px-4 py-2 rounded-full bg-gray-100 hover:bg-indigo-100 text-gray-700 hover:text-indigo-700 transition" data-mood="chill">😌 Chill</button>
111
+ </div>
112
+ </div>
113
+
114
+ <!-- Generate Button -->
115
+ <button id="generate-btn" class="w-full bg-indigo-600 hover:bg-indigo-700 text-white font-semibold py-3 px-6 rounded-lg shadow-md transition transform hover:scale-105 active:scale-95">
116
+ <i class="fas fa-magic mr-2"></i> Generate Lyrics
117
+ </button>
118
+ </div>
119
+
120
+ <!-- Output Section -->
121
+ <div>
122
+ <h2 class="text-2xl font-semibold text-gray-800 mb-6">Your Generated Lyrics</h2>
123
+ <div class="lyrics-container p-6 rounded-lg h-full min-h-[400px] relative">
124
+ <div id="lyrics-placeholder" class="text-center py-16 text-gray-400">
125
+ <i class="fas fa-music text-4xl mb-4"></i>
126
+ <p>Your AI-generated lyrics will appear here</p>
127
+ </div>
128
+ <div id="lyrics-output" class="hidden whitespace-pre-line text-gray-800 font-medium"></div>
129
+
130
+ <!-- Loading Animation -->
131
+ <div id="loading-animation" class="hidden absolute inset-0 flex items-center justify-center bg-white bg-opacity-80">
132
+ <div class="flex flex-col items-center">
133
+ <div class="w-16 h-16 border-4 border-indigo-500 border-t-transparent rounded-full animate-spin mb-4"></div>
134
+ <p class="text-indigo-600 font-medium">Channeling the artist's creative energy...</p>
135
+ </div>
136
+ </div>
137
+ </div>
138
+
139
+ <!-- Action Buttons -->
140
+ <div class="mt-4 flex gap-3">
141
+ <button id="copy-btn" class="hidden flex-1 bg-gray-100 hover:bg-gray-200 text-gray-700 font-medium py-2 px-4 rounded-lg transition">
142
+ <i class="fas fa-copy mr-2"></i> Copy
143
+ </button>
144
+ <button id="save-btn" class="hidden flex-1 bg-indigo-100 hover:bg-indigo-200 text-indigo-700 font-medium py-2 px-4 rounded-lg transition">
145
+ <i class="fas fa-save mr-2"></i> Save
146
+ </button>
147
+ <button id="regenerate-btn" class="hidden flex-1 bg-indigo-600 hover:bg-indigo-700 text-white font-medium py-2 px-4 rounded-lg transition">
148
+ <i class="fas fa-sync-alt mr-2"></i> Regenerate
149
+ </button>
150
+ </div>
151
+ </div>
152
+ </div>
153
+ </section>
154
+
155
+ <!-- Featured Artists Section -->
156
+ <section class="bg-gray-50 p-6 md:p-8 border-t border-gray-200">
157
+ <h2 class="text-2xl font-semibold text-gray-800 mb-6">Featured Artists</h2>
158
+ <div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-4">
159
+ <!-- Featured artists will be added here by JavaScript -->
160
+ </div>
161
+ </section>
162
+ </main>
163
+
164
+ <!-- Footer -->
165
+ <footer class="mt-12 text-center text-gray-500 text-sm">
166
+ <p>© 2023 Lyric Muse. All generated lyrics are AI-created parodies.</p>
167
+ <p class="mt-1">This is a demo application for educational purposes.</p>
168
+ </footer>
169
+ </div>
170
+
171
+ <script>
172
+ document.addEventListener('DOMContentLoaded', function() {
173
+ // Artist data
174
+ const artists = [
175
+ { id: 'taylor-swift', name: 'Taylor Swift', genre: 'Pop', era: 'Midnights', image: 'https://i.scdn.co/image/ab6761610000e5eb9e690225ad4445530612ccc9' },
176
+ { id: 'kendrick-lamar', name: 'Kendrick Lamar', genre: 'Hip-Hop', era: 'DAMN.', image: 'https://i.scdn.co/image/ab6761610000e5eb437b9e2a82505b3d93ff1022' },
177
+ { id: 'beyonce', name: 'Beyoncé', genre: 'R&B', era: 'Renaissance', image: 'https://i.scdn.co/image/ab6761610000e5eb0d66b3670294bf8016a6749e' },
178
+ { id: 'the-weeknd', name: 'The Weeknd', genre: 'R&B', era: 'After Hours', image: 'https://i.scdn.co/image/ab6761610000e5eb8ae7f2aaa9817a704a87ea36' },
179
+ { id: 'lana-del-rey', name: 'Lana Del Rey', genre: 'Alternative', era: 'Norman F***ing Rockwell!', image: 'https://i.scdn.co/image/ab6761610000e5eb6a8e5e8752d1dc2d7fcb12c2' },
180
+ { id: 'harry-styles', name: 'Harry Styles', genre: 'Pop', era: "Harry's House", image: 'https://i.scdn.co/image/ab6761610000e5eb0b4b3603d0c4a6de9a8f7851' },
181
+ { id: 'billie-eilish', name: 'Billie Eilish', genre: 'Alternative', era: 'Happier Than Ever', image: 'https://i.scdn.co/image/ab6761610000e5ebc36dd9eb55fb0db4911bc25d' },
182
+ { id: 'drake', name: 'Drake', genre: 'Hip-Hop', era: 'Her Loss', image: 'https://i.scdn.co/image/ab6761610000e5eb429bb5eea8b7867a9875dc5e' },
183
+ { id: 'ariana-grande', name: 'Ariana Grande', genre: 'Pop', era: 'Positions', image: 'https://i.scdn.co/image/ab6761610000e5ebcdce7620dc940db079bf4952' },
184
+ { id: 'ed-sheeran', name: 'Ed Sheeran', genre: 'Pop', era: '=', image: 'https://i.scdn.co/image/ab6761610000e5eb12a2ef08d00dd7431d226b90' },
185
+ { id: 'olivia-rodrigo', name: 'Olivia Rodrigo', genre: 'Pop', era: 'SOUR', image: 'https://i.scdn.co/image/ab6761610000e5eb9e690225ad4445530612ccc9' },
186
+ { id: 'post-malone', name: 'Post Malone', genre: 'Hip-Hop', era: 'Twelve Carat Toothache', image: 'https://i.scdn.co/image/ab6761610000e5ebd42a27be7148b59f3f2ba3a0' }
187
+ ];
188
+
189
+ // Featured artists (subset of all artists)
190
+ const featuredArtists = artists.slice(0, 6);
191
+
192
+ // DOM elements
193
+ const artistGrid = document.getElementById('artist-grid');
194
+ const featuredArtistsGrid = document.querySelector('.bg-gray-50 .grid');
195
+ const themeInput = document.getElementById('theme');
196
+ const generateBtn = document.getElementById('generate-btn');
197
+ const lyricsPlaceholder = document.getElementById('lyrics-placeholder');
198
+ const lyricsOutput = document.getElementById('lyrics-output');
199
+ const loadingAnimation = document.getElementById('loading-animation');
200
+ const copyBtn = document.getElementById('copy-btn');
201
+ const saveBtn = document.getElementById('save-btn');
202
+ const regenerateBtn = document.getElementById('regenerate-btn');
203
+ const moodButtons = document.querySelectorAll('.mood-btn');
204
+
205
+ // State
206
+ let selectedArtist = null;
207
+ let selectedMood = null;
208
+ let currentLyrics = '';
209
+
210
+ // Initialize the app
211
+ function init() {
212
+ renderArtists();
213
+ renderFeaturedArtists();
214
+ setupEventListeners();
215
+ }
216
+
217
+ // Render all artists in the selection grid
218
+ function renderArtists() {
219
+ artistGrid.innerHTML = '';
220
+ artists.forEach(artist => {
221
+ const artistCard = document.createElement('div');
222
+ artistCard.className = 'artist-card bg-white rounded-lg overflow-hidden shadow-md cursor-pointer';
223
+ artistCard.dataset.id = artist.id;
224
+ artistCard.innerHTML = `
225
+ <div class="h-32 sm:h-40 overflow-hidden">
226
+ <img src="${artist.image}" alt="${artist.name}" class="w-full h-full object-cover">
227
+ </div>
228
+ <div class="p-3">
229
+ <h3 class="font-semibold text-gray-800">${artist.name}</h3>
230
+ <p class="text-sm text-gray-500">${artist.genre} • ${artist.era}</p>
231
+ </div>
232
+ `;
233
+ artistCard.addEventListener('click', () => selectArtist(artist.id));
234
+ artistGrid.appendChild(artistCard);
235
+ });
236
+ }
237
+
238
+ // Render featured artists
239
+ function renderFeaturedArtists() {
240
+ featuredArtistsGrid.innerHTML = '';
241
+ featuredArtists.forEach(artist => {
242
+ const artistCard = document.createElement('div');
243
+ artistCard.className = 'bg-white rounded-lg overflow-hidden shadow-md cursor-pointer';
244
+ artistCard.dataset.id = artist.id;
245
+ artistCard.innerHTML = `
246
+ <div class="h-32 overflow-hidden">
247
+ <img src="${artist.image}" alt="${artist.name}" class="w-full h-full object-cover">
248
+ </div>
249
+ <div class="p-2">
250
+ <h3 class="font-medium text-sm text-gray-800 text-center">${artist.name}</h3>
251
+ </div>
252
+ `;
253
+ artistCard.addEventListener('click', () => selectArtist(artist.id));
254
+ featuredArtistsGrid.appendChild(artistCard);
255
+ });
256
+ }
257
+
258
+ // Select an artist
259
+ function selectArtist(artistId) {
260
+ // Remove selected class from all cards
261
+ document.querySelectorAll('.artist-card').forEach(card => {
262
+ card.classList.remove('selected');
263
+ });
264
+
265
+ // Add selected class to clicked card
266
+ const card = document.querySelector(`.artist-card[data-id="${artistId}"]`);
267
+ if (card) {
268
+ card.classList.add('selected');
269
+ }
270
+
271
+ selectedArtist = artists.find(a => a.id === artistId);
272
+ }
273
+
274
+ // Set up event listeners
275
+ function setupEventListeners() {
276
+ // Mood buttons
277
+ moodButtons.forEach(btn => {
278
+ btn.addEventListener('click', function() {
279
+ moodButtons.forEach(b => b.classList.remove('bg-indigo-200', 'text-indigo-700'));
280
+ this.classList.add('bg-indigo-200', 'text-indigo-700');
281
+ selectedMood = this.dataset.mood;
282
+ });
283
+ });
284
+
285
+ // Generate button
286
+ generateBtn.addEventListener('click', generateLyrics);
287
+
288
+ // Copy button
289
+ copyBtn.addEventListener('click', function() {
290
+ navigator.clipboard.writeText(currentLyrics).then(() => {
291
+ const originalText = copyBtn.innerHTML;
292
+ copyBtn.innerHTML = '<i class="fas fa-check mr-2"></i> Copied!';
293
+ setTimeout(() => {
294
+ copyBtn.innerHTML = originalText;
295
+ }, 2000);
296
+ });
297
+ });
298
+
299
+ // Save button
300
+ saveBtn.addEventListener('click', function() {
301
+ // In a real app, this would save to a database or local storage
302
+ alert('Lyrics saved to your collection!');
303
+ });
304
+
305
+ // Regenerate button
306
+ regenerateBtn.addEventListener('click', generateLyrics);
307
+ }
308
+
309
+ // Generate lyrics (simulated)
310
+ function generateLyrics() {
311
+ if (!selectedArtist) {
312
+ alert('Please select an artist first');
313
+ return;
314
+ }
315
+
316
+ const theme = themeInput.value.trim() || 'life';
317
+
318
+ // Show loading state
319
+ lyricsPlaceholder.classList.add('hidden');
320
+ lyricsOutput.classList.add('hidden');
321
+ loadingAnimation.classList.remove('hidden');
322
+
323
+ // Hide action buttons during generation
324
+ copyBtn.classList.add('hidden');
325
+ saveBtn.classList.add('hidden');
326
+ regenerateBtn.classList.add('hidden');
327
+
328
+ // Simulate API call with timeout
329
+ setTimeout(() => {
330
+ // Hide loading, show output
331
+ loadingAnimation.classList.add('hidden');
332
+
333
+ // Generate mock lyrics based on artist and theme
334
+ currentLyrics = generateMockLyrics(selectedArtist, theme, selectedMood);
335
+ lyricsOutput.textContent = currentLyrics;
336
+ lyricsOutput.classList.remove('hidden');
337
+ lyricsOutput.classList.add('fade-in', 'typewriter');
338
+
339
+ // Show action buttons
340
+ copyBtn.classList.remove('hidden');
341
+ saveBtn.classList.remove('hidden');
342
+ regenerateBtn.classList.remove('hidden');
343
+
344
+ // Remove animations after they complete
345
+ setTimeout(() => {
346
+ lyricsOutput.classList.remove('typewriter');
347
+ }, 3500);
348
+ }, 2000);
349
+ }
350
+
351
+ // Generate mock lyrics based on artist style
352
+ function generateMockLyrics(artist, theme, mood) {
353
+ const artistName = artist.name.toLowerCase();
354
+ let lyrics = '';
355
+ let verseCount = 2;
356
+ let chorusCount = 1;
357
+
358
+ // Common patterns for different artists
359
+ if (artistName.includes('taylor swift')) {
360
+ lyrics += `Lyrics in the style of Taylor Swift (${artist.era} era)\n\n`;
361
+ lyrics += `Theme: ${theme}\nMood: ${mood || 'varies'}\n\n`;
362
+
363
+ for (let i = 0; i < verseCount; i++) {
364
+ lyrics += `[Verse ${i+1}]\n`;
365
+ lyrics += getTaylorSwiftVerse(theme, mood, i+1);
366
+ lyrics += '\n\n';
367
+ }
368
+
369
+ lyrics += `[Chorus]\n`;
370
+ lyrics += getTaylorSwiftChorus(theme, mood);
371
+ lyrics += '\n\n';
372
+
373
+ lyrics += `[Bridge]\n`;
374
+ lyrics += getTaylorSwiftBridge(theme, mood);
375
+ lyrics += '\n\n';
376
+
377
+ lyrics += `[Outro]\n`;
378
+ lyrics += getTaylorSwiftOutro(theme, mood);
379
+
380
+ } else if (artistName.includes('kendrick')) {
381
+ lyrics += `Lyrics in the style of Kendrick Lamar (${artist.era} era)\n\n`;
382
+ lyrics += `Theme: ${theme}\nMood: ${mood || 'varies'}\n\n`;
383
+
384
+ for (let i = 0; i < verseCount; i++) {
385
+ lyrics += `[Verse ${i+1}]\n`;
386
+ lyrics += getKendrickVerse(theme, mood, i+1);
387
+ lyrics += '\n\n';
388
+ }
389
+
390
+ lyrics += `[Chorus]\n`;
391
+ lyrics += getKendrickChorus(theme, mood);
392
+ lyrics += '\n\n';
393
+
394
+ lyrics += `[Bridge]\n`;
395
+ lyrics += getKendrickBridge(theme, mood);
396
+ lyrics += '\n\n';
397
+
398
+ } else if (artistName.includes('beyonce')) {
399
+ lyrics += `Lyrics in the style of Beyoncé (${artist.era} era)\n\n`;
400
+ lyrics += `Theme: ${theme}\nMood: ${mood || 'varies'}\n\n`;
401
+
402
+ for (let i = 0; i < verseCount; i++) {
403
+ lyrics += `[Verse ${i+1}]\n`;
404
+ lyrics += getBeyonceVerse(theme, mood, i+1);
405
+ lyrics += '\n\n';
406
+ }
407
+
408
+ for (let i = 0; i < chorusCount; i++) {
409
+ lyrics += `[Chorus]\n`;
410
+ lyrics += getBeyonceChorus(theme, mood);
411
+ lyrics += '\n\n';
412
+ }
413
+
414
+ lyrics += `[Bridge]\n`;
415
+ lyrics += getBeyonceBridge(theme, mood);
416
+ lyrics += '\n\n';
417
+
418
+ } else {
419
+ // Default generic lyrics
420
+ lyrics += `Lyrics in the style of ${artist.name} (${artist.era} era)\n\n`;
421
+ lyrics += `Theme: ${theme}\nMood: ${mood || 'varies'}\n\n`;
422
+
423
+ for (let i = 0; i < verseCount; i++) {
424
+ lyrics += `[Verse ${i+1}]\n`;
425
+ lyrics += getGenericVerse(theme, mood, i+1);
426
+ lyrics += '\n\n';
427
+ }
428
+
429
+ for (let i = 0; i < chorusCount; i++) {
430
+ lyrics += `[Chorus]\n`;
431
+ lyrics += getGenericChorus(theme, mood);
432
+ lyrics += '\n\n';
433
+ }
434
+
435
+ lyrics += `[Bridge]\n`;
436
+ lyrics += getGenericBridge(theme, mood);
437
+ lyrics += '\n\n';
438
+
439
+ lyrics += `[Outro]\n`;
440
+ lyrics += getGenericOutro(theme, mood);
441
+ }
442
+
443
+ return lyrics;
444
+ }
445
+
446
+ // Artist-specific lyric generators
447
+ function getTaylorSwiftVerse(theme, mood, verseNum) {
448
+ const themes = {
449
+ love: [
450
+ "I remember it all too well",
451
+ "The way you held me under the moonlight",
452
+ "Your smile, my personal sunshine",
453
+ "Every glance was a handwritten note"
454
+ ],
455
+ heartbreak: [
456
+ "You left like it was nothing",
457
+ "All those promises turned to dust",
458
+ "I'm picking up the pieces you scattered",
459
+ "The calendar still marks your birthday"
460
+ ],
461
+ life: [
462
+ "Small town, big dreams in my pocket",
463
+ "They said I'd never make it out",
464
+ "Now I'm writing my name in the stars",
465
+ "Every step was a lesson learned"
466
+ ]
467
+ };
468
+
469
+ const lines = themes[theme] || [
470
+ "Pages turn and bridges burn",
471
+ "I keep your memory in a locket",
472
+ "Time won't heal but it helps me forget",
473
+ "We were a masterpiece, now just a sketch"
474
+ ];
475
+
476
+ return shuffleArray(lines).slice(0, 4).join('\n');
477
+ }
478
+
479
+ function getTaylorSwiftChorus(theme, mood) {
480
+ const choruses = {
481
+ love: [
482
+ "And I was enchanted to meet you",
483
+ "This love is golden, shining bright",
484
+ "You're my favorite melody",
485
+ "I'd rewrite our story a thousand times"
486
+ ],
487
+ heartbreak: [
488
+ "And you call me up again just to break me like a promise",
489
+ "So casually cruel in the name of being honest",
490
+ "I'm a crumpled up piece of paper lying here",
491
+ "Time turns flames to embers, you'll remember"
492
+ ]
493
+ };
494
+
495
+ return choruses[theme] ? shuffleArray(choruses[theme]).slice(0, 2).join('\n') :
496
+ "This is me trying\nTo keep the fire alive";
497
+ }
498
+
499
+ function getTaylorSwiftBridge(theme, mood) {
500
+ return theme === 'love' ?
501
+ "And I forget about you long enough\nTo forget why I needed to" :
502
+ "You're not my homeland anymore\nSo what am I defending now?";
503
+ }
504
+
505
+ function getTaylorSwiftOutro(theme, mood) {
506
+ return "Just between us, did the love affair maim you too?\nJust between us, do you remember it all too well?";
507
+ }
508
+
509
+ function getKendrickVerse(theme, mood, verseNum) {
510
+ const themes = {
511
+ life: [
512
+ "I grew up around the way, where the dreams get deferred",
513
+ "Concrete jungle where the lions sleep",
514
+ "Pray for me, I've been going through somethin'",
515
+ "They judge you before they know you"
516
+ ],
517
+ struggle: [
518
+ "Ain't nobody prayin' for me",
519
+ "My pain is my legacy",
520
+ "The system got us trapped in cycles",
521
+ "We was never meant to make it out"
522
+ ],
523
+ power: [
524
+ "I am an Israelite, don't call me black no mo'",
525
+ "That word is only a color, it ain't facts no mo'",
526
+ "Sit down, be humble, but don't sit too long",
527
+ "The crown is heavy, but I wear it strong"
528
+ ]
529
+ };
530
+
531
+ const lines = themes[theme] || [
532
+ "I remember you was conflicted",
533
+ "Misusing your influence",
534
+ "Sometimes I did the same",
535
+ "Abusing my power full of resentment"
536
+ ];
537
+
538
+ return shuffleArray(lines).slice(0, 4).join('\n');
539
+ }
540
+
541
+ function getKendrickChorus(theme, mood) {
542
+ return theme === 'life' ?
543
+ "We gon' be alright\nDo you hear me, do you feel me? We gon' be alright" :
544
+ "I pray my dick get big as the Eiffel Tower\nSo I can fuck the world for 72 hours";
545
+ }
546
+
547
+ function getKendrickBridge(theme, mood) {
548
+ return "Loyalty, royalty\nInside my DNA\nSuccess is in my veins\nI need it more than fame";
549
+ }
550
+
551
+ function getBeyonceVerse(theme, mood, verseNum) {
552
+ const themes = {
553
+ love: [
554
+ "I like my baby hair, with baby hair and afros",
555
+ "I like my negro nose with Jackson Five nostrils",
556
+ "You can't put your hands on my perfection",
557
+ "My skin is dark, my hair is thick, my body is mine"
558
+ ],
559
+ empowerment: [
560
+ "I woke up like this, flawless",
561
+ "Pretty hurts, we shine the light on whatever's worse",
562
+ "Perfection is a disease of a nation",
563
+ "I'm not too perfect to ever feel this worthless"
564
+ ],
565
+ life: [
566
+ "Texas, Texas, I'm a Texas girl",
567
+ "Mama taught me how to take care of myself",
568
+ "Daddy taught me how to love my haters",
569
+ "Sister taught me how to speak my mind"
570
+ ]
571
+ };
572
+
573
+ const lines = themes[theme] || [
574
+ "I break chains all by myself",
575
+ "Won't let my freedom rot in hell",
576
+ "I'ma keep running cause a winner don't quit on themselves",
577
+ "I was served lemons but I made lemonade"
578
+ ];
579
+
580
+ return shuffleArray(lines).slice(0, 4).join('\n');
581
+ }
582
+
583
+ function getBeyonceChorus(theme, mood) {
584
+ return theme === 'empowerment' ?
585
+ "I'm a grown woman\nI can do whatever I want" :
586
+ "Hold up, they don't love you like I love you";
587
+ }
588
+
589
+ function getBeyonceBridge(theme, mood) {
590
+ return "Best revenge is your paper\nBetter yet your mama's setup\nBetter yet your daughter setup\nYour sister, your job, your sound, your name";
591
+ }
592
+
593
+ // Generic lyric generators
594
+ function getGenericVerse(theme, mood, verseNum) {
595
+ const themes = {
596
+ love: [
597
+ "Your eyes like oceans I could drown in",
598
+ "Every touch sets my soul on fire",
599
+ "I never knew love could feel this way",
600
+ "You're the missing piece I've searched for"
601
+ ],
602
+ heartbreak: [
603
+ "The silence between us grew too loud",
604
+ "Promises turned to empty words",
605
+ "I'm learning to live with the ghost of you",
606
+ "The bed feels colder since you left"
607
+ ],
608
+ life: [
609
+ "The city lights don't shine as bright",
610
+ "We're all just trying to find our way",
611
+ "Time moves faster than we realize",
612
+ "Yesterday's mistakes are tomorrow's lessons"
613
+ ]
614
+ };
615
+
616
+ const lines = themes[theme] || [
617
+ "Another day, another dollar spent",
618
+ "The road is long but I keep walking",
619
+ "Dreams don't work unless you do",
620
+ "The night is young but so are we"
621
+ ];
622
+
623
+ return shuffleArray(lines).slice(0, 4).join('\n');
624
+ }
625
+
626
+ function getGenericChorus(theme, mood) {
627
+ return theme === 'love' ?
628
+ "You're my sunrise and my sunset\nThe only love I'll never forget" :
629
+ "I'm stronger than I seem\nBraver than I dream\nThis is my story to redeem";
630
+ }
631
+
632
+ function getGenericBridge(theme, mood) {
633
+ return "And if I had one chance\nOne shot to make it right\nI'd hold on tighter\nAnd never say goodbye";
634
+ }
635
+
636
+ function getGenericOutro(theme, mood) {
637
+ return "The end is just another beginning\nA new chapter waiting to be written";
638
+ }
639
+
640
+ // Helper function to shuffle array
641
+ function shuffleArray(array) {
642
+ const newArray = [...array];
643
+ for (let i = newArray.length - 1; i > 0; i--) {
644
+ const j = Math.floor(Math.random() * (i + 1));
645
+ [newArray[i], newArray[j]] = [newArray[j], newArray[i]];
646
+ }
647
+ return newArray;
648
+ }
649
+
650
+ // Initialize the app
651
+ init();
652
+ });
653
+ </script>
654
+ <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=Voxefx/lyrical-muse" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
655
+ </html>
prompts.txt ADDED
File without changes