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)"; // Prompt simplifié et optimisé pour Gemini const prompt = ` Crée une pochette d'album musicale abstraite et colorée au format carré 1024x1024. Contexte: - Titre: ${title || "Sans titre"} - Style musical: ${tags.join(" ; ")} Directives essentielles: - Style: Abstrait, graphique, avec formes géométriques et dégradés de couleurs - Couleurs: ${paletteHint} - IMPORTANT: Image plein cadre sans AUCUN bord blanc ou espace vide - Composition: Éléments visuels répartis sur TOUTE la surface de l'image Contraintes: - PAS de texte ou typographie - PAS de personnes ou visages - PAS de fond blanc ou bordures - PAS de filigrane `.trim(); return prompt; };