end of cover flow. Todo: fix combine pictures and save path in storage
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
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;
|
||||
};
|
||||
Reference in New Issue
Block a user