end of cover flow. Todo: fix combine pictures and save path in storage

This commit is contained in:
Thomas Demirdjian
2025-09-04 14:53:19 +02:00
parent c30b87b565
commit ce786d4750
17 changed files with 1104 additions and 850 deletions
+69
View File
@@ -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;
};