root commited on
Commit
370bf23
·
1 Parent(s): 5b33796
Files changed (1) hide show
  1. app.py +29 -11
app.py CHANGED
@@ -149,7 +149,7 @@ def generate_lyrics(music_analysis, genre, duration):
149
  text_generator = load_llm_pipeline()
150
 
151
  # Construct prompt for the LLM
152
- prompt = f"""As a professional songwriter, write ONLY the lyrics for a {genre} song with these specifications:
153
  - Key: {key} {mode}
154
  - Tempo: {tempo} BPM
155
  - Emotion: {emotion}
@@ -157,9 +157,16 @@ def generate_lyrics(music_analysis, genre, duration):
157
  - Duration: {duration:.1f} seconds
158
  - Time signature: {music_analysis["rhythm_analysis"]["estimated_time_signature"]}
159
 
160
- DO NOT include any explanations, thinking process, or commentary about the lyrics.
161
- DO NOT use bullet points or numbering.
162
- The output should ONLY contain the actual song lyrics, formatted as they would appear in a song.
 
 
 
 
 
 
 
163
  """
164
 
165
  # Generate lyrics using the LLM pipeline
@@ -174,14 +181,25 @@ The output should ONLY contain the actual song lyrics, formatted as they would a
174
 
175
  lyrics = generation_result[0]["generated_text"]
176
 
177
- # Additional post-processing to remove common thinking patterns
178
- lyrics = re.sub(r'^(Here are|Here is|These are).*?:\s*', '', lyrics, flags=re.IGNORECASE)
 
 
 
 
179
  lyrics = re.sub(r'^Title:.*?$', '', lyrics, flags=re.MULTILINE).strip()
180
- lyrics = re.sub(r'^Verse( \d+)?:.*?$', '', lyrics, flags=re.MULTILINE).strip()
181
- lyrics = re.sub(r'^Chorus:.*?$', '', lyrics, flags=re.MULTILINE).strip()
182
- lyrics = re.sub(r'^Bridge:.*?$', '', lyrics, flags=re.MULTILINE).strip()
183
- lyrics = re.sub(r'^Intro:.*?$', '', lyrics, flags=re.MULTILINE).strip()
184
- lyrics = re.sub(r'^Outro:.*?$', '', lyrics, flags=re.MULTILINE).strip()
 
 
 
 
 
 
 
185
 
186
  return lyrics
187
 
 
149
  text_generator = load_llm_pipeline()
150
 
151
  # Construct prompt for the LLM
152
+ prompt = f"""Write lyrics for a {genre} song with these specifications:
153
  - Key: {key} {mode}
154
  - Tempo: {tempo} BPM
155
  - Emotion: {emotion}
 
157
  - Duration: {duration:.1f} seconds
158
  - Time signature: {music_analysis["rhythm_analysis"]["estimated_time_signature"]}
159
 
160
+ IMPORTANT INSTRUCTIONS:
161
+ - The lyrics should be in English
162
+ - Write ONLY the raw lyrics with no structural labels
163
+ - DO NOT include [verse], [chorus], [bridge], or any other section markers
164
+ - DO NOT include any explanations or thinking about the lyrics
165
+ - DO NOT number the verses or lines
166
+ - DO NOT use bullet points
167
+ - Format as simple line-by-line lyrics only
168
+ - Make sure the lyrics match the specified duration and tempo
169
+ - Keep lyrics concise enough to fit the duration when sung at the given tempo
170
  """
171
 
172
  # Generate lyrics using the LLM pipeline
 
181
 
182
  lyrics = generation_result[0]["generated_text"]
183
 
184
+ # Enhanced post-processing to remove ALL structural elements and thinking
185
+ # Remove any lines with section labels using a more comprehensive pattern
186
+ lyrics = re.sub(r'^\[.*?\].*$', '', lyrics, flags=re.MULTILINE)
187
+
188
+ # Remove common prefixes and thinking text
189
+ lyrics = re.sub(r'^(Here are|Here is|These are|This is|Let me|I will|I'll).*?:\s*', '', lyrics, flags=re.IGNORECASE)
190
  lyrics = re.sub(r'^Title:.*?$', '', lyrics, flags=re.MULTILINE).strip()
191
+
192
+ # Remove all section markers in any format
193
+ lyrics = re.sub(r'^\s*(Verse|Chorus|Bridge|Pre.?Chorus|Intro|Outro|Refrain|Hook|Breakdown)(\s*\d*|\s*[A-Z])?:?\s*$', '', lyrics, flags=re.MULTILINE|re.IGNORECASE)
194
+ lyrics = re.sub(r'\[(Verse|Chorus|Bridge|Pre.?Chorus|Intro|Outro|Refrain|Hook|Breakdown)(\s*\d*|\s*[A-Z])?\]', '', lyrics, flags=re.IGNORECASE)
195
+
196
+ # Remove any "thinking" or explanatory parts that might be at the beginning
197
+ lyrics = re.sub(r'^.*?(Let\'s|Here\'s|I need|I want|I\'ll|First|The|This).*?:\s*', '', lyrics, flags=re.IGNORECASE)
198
+
199
+ # Remove any empty lines at beginning, collapse multiple blank lines, and trim
200
+ lyrics = re.sub(r'^\s*\n', '', lyrics)
201
+ lyrics = re.sub(r'\n\s*\n\s*\n+', '\n\n', lyrics)
202
+ lyrics = lyrics.strip()
203
 
204
  return lyrics
205