fix: hide lyrics and exclude from zip and descriptions for instrumental tracks

This commit is contained in:
Jannik committed 2026-08-15 10:44:59 +02:00
1 parent d157d34fca
commit 07156d8ea0
3 files changed
+14 -10

No files matched your search

+2 -2
View File
@@ -26,10 +26,10 @@ REQUIRED JSON STRUCTURE:
"Title 2: direct/strong (max 4 words)", "Title 2: direct/strong (max 4 words)",
"Title 3: abstract/intriguing (max 4 words)" "Title 3: abstract/intriguing (max 4 words)"
], ],
"lyrics": "Full lyrics with Suno section tags [Verse], [Chorus], [Bridge], [Outro], etc. Use AABB or ABAB rhyme scheme consistently. Lines must be rhythmically singable. CRITICAL: The lyrics must NOT reference the genre, instruments, or music production. No references to pianos, guitars, beats, orchestras, or any musical elements. Write about universal human themes: emotion, nature, love, time, memory, journey, longing.", "lyrics": "If instrumental, return an empty string \"\". Otherwise: Full lyrics with Suno section tags [Verse], [Chorus], [Bridge], [Outro], etc. Use AABB or ABAB rhyme scheme consistently. Lines must be rhythmically singable. CRITICAL: The lyrics must NOT reference the genre, instruments, or music production. No references to pianos, guitars, beats, orchestras, or any musical elements. Write about universal human themes: emotion, nature, love, time, memory, journey, longing.",
"style": "Comma-separated Suno style description, max 120 words. Include: tempo with BPM range, key instruments, production style, texture, energy level, mood, vocal style (or 'instrumental, no vocals'). NEVER name any artist, band, or use 'sounds like'.", "style": "Comma-separated Suno style description, max 120 words. Include: tempo with BPM range, key instruments, production style, texture, energy level, mood, vocal style (or 'instrumental, no vocals'). NEVER name any artist, band, or use 'sounds like'.",
"negative_style": "Comma-separated list of genres, instruments, moods, and styles that should NOT appear.", "negative_style": "Comma-separated list of genres, instruments, moods, and styles that should NOT appear.",
"youtube_description": "In the same language as the lyrics. Follow this exact structure:\\n\\n[One evocative hook sentence tied to the mood]\\n\\n[2-3 sentences describing the music, mood, and emotional experience]\\n\\n────────────────────────────\\n\\n[Full lyrics, copied exactly]\\n\\n────────────────────────────\\n\\n[Warm, genuine call to action: ask viewers to like, subscribe, and comment what the music makes them feel or imagine]\\n\\n#hashtag1 #hashtag2 ... (12-15 hashtags: mix of genre, mood, and tool tags like #SunoAI #AIMusic)", "youtube_description": "In the same language as the lyrics. Follow this exact structure:\\n\\n[One evocative hook sentence tied to the mood]\\n\\n[2-3 sentences describing the music, mood, and emotional experience]\\n\\n────────────────────────────\\n\\n[Full lyrics, copied exactly. IF INSTRUMENTAL, OMIT THIS SECTION AND THE DIVIDERS COMPLETELY]\\n\\n────────────────────────────\\n\\n[Warm, genuine call to action: ask viewers to like, subscribe, and comment what the music makes them feel or imagine]\\n\\n#hashtag1 #hashtag2 ... (12-15 hashtags: mix of genre, mood, and tool tags like #SunoAI #AIMusic)",
"video_prompts": [ "video_prompts": [
{ {
"type": "Abstract", "type": "Abstract",
+9 -7
View File
@@ -98,13 +98,15 @@ export function ResultsPanel({
onRegenerate={() => onRegenerateSection("titles")} onRegenerate={() => onRegenerateSection("titles")}
regenerating={Boolean(regenerating.titles)} regenerating={Boolean(regenerating.titles)}
/> />
<LyricsCard {assets.lyrics && assets.lyrics.trim().length > 0 && (
lyrics={assets.lyrics} <LyricsCard
originalLyrics={originalAssets.lyrics} lyrics={assets.lyrics}
onChange={(v) => onChange("lyrics", v)} originalLyrics={originalAssets.lyrics}
onRegenerate={(selectedText) => onRegenerateSection("lyrics", selectedText)} onChange={(v) => onChange("lyrics", v)}
regenerating={Boolean(regenerating.lyrics)} onRegenerate={(selectedText) => onRegenerateSection("lyrics", selectedText)}
/> regenerating={Boolean(regenerating.lyrics)}
/>
)}
<StyleCard <StyleCard
style={assets.style} style={assets.style}
negativeStyle={assets.negative_style} negativeStyle={assets.negative_style}
+3 -1
View File
@@ -65,7 +65,9 @@ export async function buildSongZip(
): Promise<Blob> { ): Promise<Blob> {
const zip = new JSZip(); const zip = new JSZip();
zip.file("Style.txt", buildStyleTxt(assets)); zip.file("Style.txt", buildStyleTxt(assets));
zip.file("Text.txt", buildTextTxt(assets)); if (assets.lyrics && assets.lyrics.trim().length > 0) {
zip.file("Text.txt", buildTextTxt(assets));
}
zip.file("Videodescription.txt", buildYouTubeDescriptionTxt(assets)); zip.file("Videodescription.txt", buildYouTubeDescriptionTxt(assets));
zip.file("Videoprompt.txt", buildVideoPromptTxt(assets)); zip.file("Videoprompt.txt", buildVideoPromptTxt(assets));
return zip.generateAsync({ type: "blob" }); return zip.generateAsync({ type: "blob" });