new background and fixs
This commit is contained in:
@@ -68,13 +68,13 @@ exports.generatePicturePrompt = (project = {}) => {
|
||||
<STYLE>${styleLine}</STYLE>
|
||||
<COMPOSITION>La composition doit être dynamique et remplir toute la surface, sans laisser de bordures ni de zones vides.</COMPOSITION>
|
||||
<TYPOGRAPHIE>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é.</TYPOGRAPHIE>
|
||||
<LOGO_RESERVE>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.</LOGO_RESERVE>
|
||||
<LOGO_RESERVE>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.</LOGO_RESERVE>
|
||||
</CONTEXTES_VISUELS>
|
||||
|
||||
<CONTRAINTES>
|
||||
<INTERDIT>Personnes, visages ou silhouettes reconnaissables.</INTERDIT>
|
||||
<INTERDIT>Fonds blancs ou bordures délimitant l'image.</INTERDIT>
|
||||
<INTERDIT>Tout autre logo, filigrane ou texte promotionnel que le titre, l'artiste et la zone réservée pour "MusicLand Production".</INTERDIT>
|
||||
<INTERDIT>Tout texte promotionnel, filigrane ou logo (y compris "MusicLand Production").</INTERDIT>
|
||||
<INTERDIT>Texte illisible ou trop petit.</INTERDIT>
|
||||
</CONTRAINTES>
|
||||
`.trim();
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1004 KiB After Width: | Height: | Size: 35 MiB |
@@ -73,7 +73,7 @@ const MusicLandHeader = ({
|
||||
)}
|
||||
</View>
|
||||
<Image
|
||||
source={logo || icons.musicLandLogo}
|
||||
source={logo}
|
||||
style={{
|
||||
alignSelf: "center",
|
||||
height: isWeb ? 150 : 100,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import React, { useState } from "react";
|
||||
import { Image, StyleSheet, View } from "react-native";
|
||||
import { ai, background, icons } from "../../assets";
|
||||
import { ai, background } from "../../assets";
|
||||
import FullscreenIntroVideo from "../../components/FullscreenIntroVideo";
|
||||
import GradientButton from "../../components/GradientButton";
|
||||
import MusicLandHeader from "../../components/MusicLandHeader";
|
||||
@@ -17,7 +17,7 @@ const Compose = () => {
|
||||
<MusicLandHeader
|
||||
onPressBack={goBack}
|
||||
progress={9}
|
||||
logo={icons.musicLandStudio}
|
||||
// logo={icons.musicLandStudio}
|
||||
/>
|
||||
<View
|
||||
style={{ flex: 1, position: "relative", justifyContent: "flex-end" }}
|
||||
|
||||
@@ -6,7 +6,7 @@ import React, {
|
||||
useState,
|
||||
} from "react";
|
||||
import { Dimensions, FlatList, View } from "react-native";
|
||||
import { background, icons } from "../../assets";
|
||||
import { background } from "../../assets";
|
||||
import GradientButton from "../../components/GradientButton";
|
||||
import MusicLandHeader from "../../components/MusicLandHeader";
|
||||
import firebase from "../../config/firebase";
|
||||
@@ -176,7 +176,7 @@ const ComposeSong = () => {
|
||||
<MusicLandHeader
|
||||
onPressBack={onPressBack}
|
||||
progress={progress}
|
||||
logo={icons.musicLandStudio}
|
||||
// logo={icons.musicLandStudio}
|
||||
/>
|
||||
<View style={{ flex: 1, paddingBottom: gutters, gap: 48 }}>
|
||||
<View
|
||||
|
||||
@@ -5,7 +5,7 @@ import React, { useEffect, useMemo, useRef, useState } from "react";
|
||||
import { Image, Platform, Text, View } from "react-native";
|
||||
import useMinuit from "react-native-minuit/src/hooks/useMinuit.js";
|
||||
import { responsiveHeight } from "react-native-responsive-dimensions";
|
||||
import { ai, background, icons } from "../../assets";
|
||||
import { ai, background } from "../../assets";
|
||||
import AppAlert from "../../components/Alert";
|
||||
import GradientButton from "../../components/GradientButton";
|
||||
import MusicLandHeader from "../../components/MusicLandHeader";
|
||||
@@ -263,7 +263,7 @@ const GeneratingSong = () => {
|
||||
<MusicLandHeader
|
||||
onPressBack={() => navigate(Routes.Home)}
|
||||
progress={63}
|
||||
logo={icons.musicLandStudio}
|
||||
// logo={icons.musicLandStudio}
|
||||
/>
|
||||
<View style={{ flex: 1, marginTop: 16 }}>
|
||||
<CreateLyricsHeader
|
||||
|
||||
@@ -159,8 +159,7 @@ const CustomizeSongStructure = ({ baseStructure = [], onChange }) => {
|
||||
[extractValues]
|
||||
);
|
||||
|
||||
const handleGrant = useCallback(
|
||||
(itemId, event) => {
|
||||
const handleGrant = useCallback((itemId, event) => {
|
||||
const rect = containerRef.current?.getBoundingClientRect();
|
||||
const scrollY = getScrollY();
|
||||
const nativeEvent = event.nativeEvent || {};
|
||||
@@ -179,9 +178,7 @@ const CustomizeSongStructure = ({ baseStructure = [], onChange }) => {
|
||||
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,
|
||||
|
||||
@@ -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,7 +38,8 @@ const PouchReady = () => {
|
||||
setCoverStyle(selectedProject?.coverStyle || "");
|
||||
}, [selectedProject?.coverStyle]);
|
||||
|
||||
const generateCover = useCallback(async (styleValue) => {
|
||||
const generateCover = useCallback(
|
||||
async (styleValue) => {
|
||||
if (!selectedProjectId) return;
|
||||
if (hasGeneratedOptions) {
|
||||
return;
|
||||
@@ -69,7 +70,9 @@ const PouchReady = () => {
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
}, [hasGeneratedOptions, selectedProjectId, setIsLoading, updateProjectData]);
|
||||
},
|
||||
[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 (
|
||||
<View
|
||||
@@ -239,7 +243,9 @@ const PouchReady = () => {
|
||||
>
|
||||
{!hasGeneratedOptions && (
|
||||
<BorderGradientButton
|
||||
title={isGenerating ? "Génération en cours..." : "Générer la pochette"}
|
||||
title={
|
||||
isGenerating ? "Génération en cours..." : "Générer la pochette"
|
||||
}
|
||||
icon={icons.stars}
|
||||
onPress={requestCoverGeneration}
|
||||
disabled={isGenerating}
|
||||
|
||||
Reference in New Issue
Block a user