diff --git a/functions/helpers/prompts.js b/functions/helpers/prompts.js
index 1d7a7b8..286f479 100644
--- a/functions/helpers/prompts.js
+++ b/functions/helpers/prompts.js
@@ -68,13 +68,13 @@ exports.generatePicturePrompt = (project = {}) => {
La composition doit être dynamique et remplir toute la surface, sans laisser de bordures ni de zones vides.
Intègre de manière artistique et lisible le titre de la chanson ${title || "Sans titre"}. La typographie doit compléter le style abstrait et lumineux de la pochette. Priorise la lisibilité.
- Réserve un espace net et dégagé en bas à droite, occupant environ 25% de la largeur totale. Cette zone doit être légèrement plus sombre ou avoir un contraste suffisant.
+ Crée un espace vide et propre en bas à droite (25% de la largeur), sans texte, logo ou marquage. Cet espace servira à insérer un logo plus tard manuellement.
Personnes, visages ou silhouettes reconnaissables.
Fonds blancs ou bordures délimitant l'image.
- Tout autre logo, filigrane ou texte promotionnel que le titre, l'artiste et la zone réservée pour "MusicLand Production".
+ Tout texte promotionnel, filigrane ou logo (y compris "MusicLand Production").
Texte illisible ou trop petit.
`.trim();
diff --git a/src/assets/UI/studioBG2.png b/src/assets/UI/studioBG2.png
index 0c4590b..bb38233 100644
Binary files a/src/assets/UI/studioBG2.png and b/src/assets/UI/studioBG2.png differ
diff --git a/src/components/MusicLandHeader.js b/src/components/MusicLandHeader.js
index 5962480..940eb5a 100644
--- a/src/components/MusicLandHeader.js
+++ b/src/components/MusicLandHeader.js
@@ -73,7 +73,7 @@ const MusicLandHeader = ({
)}
{
{
{
navigate(Routes.Home)}
progress={63}
- logo={icons.musicLandStudio}
+ // logo={icons.musicLandStudio}
/>
{
[extractValues]
);
- const handleGrant = useCallback(
- (itemId, event) => {
- const rect = containerRef.current?.getBoundingClientRect();
- const scrollY = getScrollY();
- const nativeEvent = event.nativeEvent || {};
- const fallbackY =
- typeof nativeEvent.pageY === "number"
- ? nativeEvent.pageY
- : typeof nativeEvent.clientY === "number"
- ? nativeEvent.clientY + scrollY
- : scrollY;
- const containerTop = rect ? rect.top + scrollY : fallbackY;
- dragStateRef.current = {
- itemId,
- containerTop,
- };
- setActiveItemId(itemId);
- if (typeof document !== "undefined") {
- document.body.style.userSelect = "none";
- }
- },
- []
- );
+ const handleGrant = useCallback((itemId, event) => {
+ const rect = containerRef.current?.getBoundingClientRect();
+ const scrollY = getScrollY();
+ const nativeEvent = event.nativeEvent || {};
+ const fallbackY =
+ typeof nativeEvent.pageY === "number"
+ ? nativeEvent.pageY
+ : typeof nativeEvent.clientY === "number"
+ ? nativeEvent.clientY + scrollY
+ : scrollY;
+ const containerTop = rect ? rect.top + scrollY : fallbackY;
+ dragStateRef.current = {
+ itemId,
+ containerTop,
+ };
+ setActiveItemId(itemId);
+ if (typeof document !== "undefined") {
+ document.body.style.userSelect = "none";
+ }
+ }, []);
const handleMove = useCallback((event) => {
const { itemId, containerTop } = dragStateRef.current;
@@ -210,9 +207,7 @@ const CustomizeSongStructure = ({ baseStructure = [], onChange }) => {
}, []);
const handleRelease = useCallback(() => {
- setSortableItems((prev) =>
- buildSortableItems(extractValues(prev))
- );
+ setSortableItems((prev) => buildSortableItems(extractValues(prev)));
dragStateRef.current = {
itemId: null,
containerTop: 0,
diff --git a/src/screens/cover/PouchReady.js b/src/screens/cover/PouchReady.js
index 6c4022e..87e7c4d 100644
--- a/src/screens/cover/PouchReady.js
+++ b/src/screens/cover/PouchReady.js
@@ -3,10 +3,10 @@ import React, { useCallback, useEffect, useState } from "react";
import { ActivityIndicator, Text, View } from "react-native";
import useMinuit from "react-native-minuit/src/hooks/useMinuit.js";
import { background, icons } from "../../assets";
+import alert from "../../components/Alert";
import BorderGradientButton from "../../components/BorderGradientButton";
import GradientButton from "../../components/GradientButton";
import MusicLandHeader from "../../components/MusicLandHeader";
-import alert from "../../components/Alert";
import firebase, { tasksRef } from "../../config/firebase";
import loaderMessages from "../../config/loaderMessages";
import { isWeb } from "../../hooks/useLayoutType";
@@ -38,38 +38,41 @@ const PouchReady = () => {
setCoverStyle(selectedProject?.coverStyle || "");
}, [selectedProject?.coverStyle]);
- const generateCover = useCallback(async (styleValue) => {
- if (!selectedProjectId) return;
- if (hasGeneratedOptions) {
- return;
- }
- const trimmedStyle = String(styleValue || "").trim();
- if (!trimmedStyle) {
- alert("Attention", "Merci de renseigner un style pour la pochette.", [
- { text: "OK" },
- ]);
- return;
- }
- try {
- await setIsLoading(true);
- await updateProjectData(
- {
- coverStyle: trimmedStyle,
- },
- { merge: true }
- );
- await tasksRef.add({
- type: "cover",
- projectId: selectedProjectId,
- status: "PENDING",
- createdAt: firebase.firestore.FieldValue.serverTimestamp(),
- });
- } catch (e) {
- console.log("Cover task error", e?.message);
- } finally {
- setIsLoading(false);
- }
- }, [hasGeneratedOptions, selectedProjectId, setIsLoading, updateProjectData]);
+ const generateCover = useCallback(
+ async (styleValue) => {
+ if (!selectedProjectId) return;
+ if (hasGeneratedOptions) {
+ return;
+ }
+ const trimmedStyle = String(styleValue || "").trim();
+ if (!trimmedStyle) {
+ alert("Attention", "Merci de renseigner un style pour la pochette.", [
+ { text: "OK" },
+ ]);
+ return;
+ }
+ try {
+ await setIsLoading(true);
+ await updateProjectData(
+ {
+ coverStyle: trimmedStyle,
+ },
+ { merge: true }
+ );
+ await tasksRef.add({
+ type: "cover",
+ projectId: selectedProjectId,
+ status: "PENDING",
+ createdAt: firebase.firestore.FieldValue.serverTimestamp(),
+ });
+ } catch (e) {
+ console.log("Cover task error", e?.message);
+ } finally {
+ setIsLoading(false);
+ }
+ },
+ [hasGeneratedOptions, selectedProjectId, setIsLoading, updateProjectData]
+ );
const requestCoverGeneration = useCallback(() => {
const trimmedStyle = (coverStyle || "").trim();
@@ -137,7 +140,8 @@ const PouchReady = () => {
>
{displayOptions.length > 0 ? (
displayOptions.map((option, index) => {
- const optionUri = option?.finalUrl || option?.generatedUrl || "";
+ const optionUri =
+ option?.finalUrl || option?.generatedUrl || "";
if (!optionUri) return null;
return (
{
>
{!hasGeneratedOptions && (