exports.generatePicturePrompt = (project = {}) => { const { title = "", lyrics: lyricsRaw, musicConfig = {} } = project || {}; const { genres = [], tempo = "", voice = "", instruments = [], mood = "", } = musicConfig || {}; // Normalise les paroles en tableau de sections { type, lyrics } const lyricsSections = Array.isArray(lyricsRaw) ? lyricsRaw : [ lyricsRaw?.couplet ? { type: "couplet", lyrics: lyricsRaw.couplet } : null, lyricsRaw?.refrain ? { type: "refrain", lyrics: lyricsRaw.refrain } : null, ].filter(Boolean); // Échantillon pour l'ambiance (courtes bribes pour inspirer la direction créative) const lyricsSample = (lyricsSections || []) .map((s) => (s?.lyrics || "").split("\n").slice(0, 2).join(" ")) .filter(Boolean) .slice(0, 6) .join(" | "); // Etiquettes d'ambiance const tags = []; if (Array.isArray(genres) && genres.length) tags.push(`Genres: ${genres.join(", ")}`); if (tempo) tags.push(`Tempo: ${tempo}`); if (Array.isArray(instruments) && instruments.length) tags.push(`Instruments: ${instruments.join(", ")}`); if (voice) tags.push(`Vocal: ${voice}`); if (mood) tags.push(`Mood: ${mood}`); // Guidance palette selon tempo (simple heuristique) const paletteHint = tempo && /\b(rapid|fast|vite|agité|upbeat|energ)/i.test(String(tempo)) ? "Palette vive et contrastée (magenta, cyan, jaune, bleu électrique)" : "Palette harmonieuse et douce (bleu nuit, violet, corail, or pâle)"; const tagsLine = tags.join(" ; ") || "Non spécifié"; const lyricsLine = lyricsSample || "Pas d'extraits fournis"; const prompt = ` Créer une pochette d'album abstraite et lumineuse. ${title || "Sans titre"} ${tagsLine} ${lyricsLine} Image carrée 1024x1024 pixels. ${paletteHint} Remplis toute la surface sans laisser de bordures ou zones vides. Texte ou typographie. Personnes ou visages. Fond blanc ou bordures. Filigrane ou logo. `.trim(); return prompt; };