From b4375d04bea2bb8651e304b3cb4cacff5e016049 Mon Sep 17 00:00:00 2001 From: leon-morival Date: Wed, 22 Oct 2025 17:06:49 +0200 Subject: [PATCH] covers with logo --- functions/assets/musicLandProduction.png | Bin 0 -> 88180 bytes functions/helpers/prompts.js | 5 +- functions/package-lock.json | 440 ++++++++++++++++++++++- functions/package.json | 3 +- functions/src/cover.js | 145 +++++--- src/screens/cover/ChooseCoverType.js | 113 +++--- src/screens/cover/PhotoCover.js | 131 +++---- src/screens/cover/PouchReady.js | 32 +- src/utils/projectStages.js | 2 +- 9 files changed, 643 insertions(+), 228 deletions(-) create mode 100644 functions/assets/musicLandProduction.png diff --git a/functions/assets/musicLandProduction.png b/functions/assets/musicLandProduction.png new file mode 100644 index 0000000000000000000000000000000000000000..3a2e05d7fdd1c3dc766efb3be22d1bdecc9bd1e9 GIT binary patch literal 88180 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£z<1E)V>bW^-z0XDGof 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 Xx|FH~Rc%()00000NkvXXu0mjfMLE&X literal 0 HcmV?d00001 diff --git a/functions/helpers/prompts.js b/functions/helpers/prompts.js index 120acfe..ba7f6d0 100644 --- a/functions/helpers/prompts.js +++ b/functions/helpers/prompts.js @@ -49,7 +49,7 @@ exports.generatePicturePrompt = (project = {}) => { const prompt = ` - Créer une pochette d'album abstraite et lumineuse. + Créer une pochette lumineuse. ${title || "Sans titre"} ${tagsLine} ${lyricsLine} @@ -58,7 +58,6 @@ exports.generatePicturePrompt = (project = {}) => { Image carrée 1024x1024 pixels. - ${paletteHint} Remplis toute la surface sans laisser de bordures ou zones vides. @@ -66,7 +65,7 @@ exports.generatePicturePrompt = (project = {}) => { Texte ou typographie. Personnes ou visages. Fond blanc ou bordures. - Filigrane ou logo. + Autre logo ou filigrane que celui prévu en bas à droite. `.trim(); diff --git a/functions/package-lock.json b/functions/package-lock.json index dcc95c5..184013c 100644 --- a/functions/package-lock.json +++ b/functions/package-lock.json @@ -15,7 +15,8 @@ "firebase-admin": "^12.7.0", "firebase-functions": "^6.4.0", "fluent-ffmpeg": "^2.1.3", - "genkit": "^1.18.0" + "genkit": "^1.18.0", + "sharp": "^0.33.4" }, "devDependencies": { "eslint": "^8.15.0", @@ -62,6 +63,16 @@ "node": ">=6.0.0" } }, + "node_modules/@emnapi/runtime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.6.0.tgz", + "integrity": "sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.8.0.tgz", @@ -799,6 +810,367 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@js-sdsl/ordered-map": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", @@ -3097,7 +3469,6 @@ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "license": "MIT", - "optional": true, "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -3296,6 +3667,15 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -4842,8 +5222,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/is-core-module": { "version": "2.16.1", @@ -6205,6 +6584,58 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/sharp/node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6311,7 +6742,6 @@ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "license": "MIT", - "optional": true, "dependencies": { "is-arrayish": "^0.3.1" } diff --git a/functions/package.json b/functions/package.json index 03fe9fb..3f7aebd 100644 --- a/functions/package.json +++ b/functions/package.json @@ -23,7 +23,8 @@ "firebase-admin": "^12.7.0", "firebase-functions": "^6.4.0", "fluent-ffmpeg": "^2.1.3", - "genkit": "^1.18.0" + "genkit": "^1.18.0", + "sharp": "^0.33.4" }, "devDependencies": { "eslint": "^8.15.0", diff --git a/functions/src/cover.js b/functions/src/cover.js index 516691a..44cdb65 100644 --- a/functions/src/cover.js +++ b/functions/src/cover.js @@ -3,11 +3,68 @@ const admin = require("firebase-admin"); const logger = require("firebase-functions/logger"); const { generateImageV2, - CombineCoverAndPicture, } = require("../helpers/gemini"); const { generatePicturePrompt } = require("../helpers/prompts"); +const path = require("path"); +const fs = require("fs"); +const axios = require("axios"); +const sharp = require("sharp"); const db = admin.firestore(); +const bucket = admin.storage().bucket(); +const LOGO_PATH = path.resolve( + __dirname, + "../assets/musicLandProduction.png", +); + +async function buildCoverWithLogo(backgroundUrl, targetPath) { + logger.info("🖼️ [Cover] Adding logo to generated background"); + const [{ data: backgroundBuffer }, logoBuffer] = await Promise.all([ + axios.get(backgroundUrl, { responseType: "arraybuffer" }), + fs.promises.readFile(LOGO_PATH), + ]); + + const baseImage = sharp(backgroundBuffer); + const { width = 1024, height = 1024 } = await baseImage.metadata(); + + const desiredWidth = Math.round(width * 0.32); + const margin = Math.round(width * 0.04); + + const { data: resizedLogo, info: logoInfo } = await sharp(logoBuffer) + .resize({ width: desiredWidth }) + .png() + .toBuffer({ resolveWithObject: true }); + + const left = Math.max(width - logoInfo.width - margin, 0); + const top = Math.max(height - logoInfo.height - margin, 0); + + const stampedBuffer = await baseImage + .ensureAlpha() + .composite([ + { + input: resizedLogo, + left, + top, + blend: "over", + }, + ]) + .png() + .toBuffer(); + + const token = require("crypto").randomUUID(); + await bucket.file(targetPath).save(stampedBuffer, { + resumable: false, + metadata: { + contentType: "image/png", + cacheControl: "public, max-age=31536000", + metadata: { firebaseStorageDownloadTokens: token }, + }, + }); + + return `https://firebasestorage.googleapis.com/v0/b/${bucket.name}/o/${encodeURIComponent( + targetPath, + )}?alt=media&token=${token}`; +} // Shared core for generating and saving the cover, and updating the project async function performCoverGeneration(project) { @@ -19,12 +76,13 @@ async function performCoverGeneration(project) { promptPreview: String(prompt).slice(0, 160), }); let coverUrl = ""; + const timestamp = Date.now(); try { // Utiliser une taille fixe de 1024 pixels coverUrl = await generateImageV2( prompt, 1024, - `users/${project.userId}/projects/${project.id}/generated-${Date.now()}.png`, + `users/${project.userId}/projects/${project.id}/generated-${timestamp}.png`, ); console.log("coverUrl", coverUrl); } catch (e) { @@ -38,6 +96,19 @@ async function performCoverGeneration(project) { throw new Error("Génération d'image échouée (URL vide)"); } + let finalCoverUrl = ""; + try { + const stampedPath = `users/${project.userId}/projects/${project.id}/cover-${timestamp}-stamped.png`; + finalCoverUrl = await buildCoverWithLogo(coverUrl, stampedPath); + } catch (e) { + logger.error("❌ [Cover] Logo overlay failed", { + projectId: project.id, + error: e?.message || String(e), + }); + // En cas d'échec, on retient au moins la cover générée + finalCoverUrl = coverUrl; + } + // Mettre à jour le projet avec l'URL et le statut await db .collection("projects") @@ -46,6 +117,7 @@ async function performCoverGeneration(project) { { cover: { generatedBackground: coverUrl, + result: finalCoverUrl, }, coverStatus: "GENERATED", updatedAt: admin.firestore.FieldValue.serverTimestamp(), @@ -56,56 +128,10 @@ async function performCoverGeneration(project) { logger.info("✅ [Cover] Saved", { projectId: project.id, coverUrl, + finalCoverUrl, ms: Date.now() - t0, }); - return coverUrl; -} - -async function performCombineGeneration(project) { - const t0 = Date.now(); - const background = project?.cover?.generatedBackground || null; - const foreground = project?.cover?.userForeground || null; - - if (!background || !foreground) { - throw new Error( - "Images manquantes: cover.generatedBackground et cover.userForground sont requis", - ); - } - - logger.info("🧩 [Combine] Inputs detected", { - bgPreview: String(background).slice(0, 80), - fgPreview: String(foreground).slice(0, 80), - }); - - const combinedUrl = await CombineCoverAndPicture( - background, - foreground, - `users/${project.userId}/projects/${project.id}/combine-${Date.now()}.png`, - ); - - // Sauvegarder le résultat et marquer comme généré - await db - .collection("projects") - .doc(project.id) - .set( - { - cover: { - ...project.cover, - result: combinedUrl, - }, - coverStatus: "GENERATED", - updatedAt: admin.firestore.FieldValue.serverTimestamp(), - }, - { merge: true }, - ); - - logger.info("✅ [Cover] Combined image saved", { - projectId: project.id, - combinedUrl, - ms: Date.now() - t0, - }); - - return combinedUrl; + return finalCoverUrl; } // Firestore trigger: création d'une tâche de génération de cover @@ -132,6 +158,21 @@ exports.onTaskCreateGenerateCover = onDocumentCreated( type, projectId, }); + + if (type === "combine") { + logger.warn("⛔ [Task] Combine task ignored (feature disabled)", { + projectId, + taskId: event?.params?.taskId, + }); + await event.data.ref.update({ + status: "CANCELLED", + error: + "La personnalisation de la pochette avec une photo n'est plus disponible.", + updatedAt: admin.firestore.FieldValue.serverTimestamp(), + }); + return; + } + await db.collection("projects").doc(projectId).update({ coverStatus: "GENERATING", updatedAt: admin.firestore.FieldValue.serverTimestamp(), @@ -154,10 +195,6 @@ exports.onTaskCreateGenerateCover = onDocumentCreated( logger.info("🎨 [Task] Start cover generation", { projectId }); coverUrl = await performCoverGeneration(project); logger.info("✅ [Task] Cover generated", { projectId }); - } else if (type === "combine") { - logger.info("🧩 [Task] Start combine (cover + photo)", { projectId }); - coverUrl = await performCombineGeneration(project); - logger.info("✅ [Task] Combine generated", { projectId, coverUrl }); } await event.data.ref.update({ diff --git a/src/screens/cover/ChooseCoverType.js b/src/screens/cover/ChooseCoverType.js index 37859aa..70a7502 100644 --- a/src/screens/cover/ChooseCoverType.js +++ b/src/screens/cover/ChooseCoverType.js @@ -1,30 +1,21 @@ -import * as ImagePicker from "expo-image-picker"; import { BlurView } from "expo-blur"; import React, { useCallback, useEffect, useMemo, useState } from "react"; -import { - Image, - Modal, - Pressable, - StyleSheet, - Text, - View, -} from "react-native"; +import { Image, Modal, Pressable, StyleSheet, Text, View } from "react-native"; import useMinuit from "react-native-minuit/src/hooks/useMinuit"; import { ai, background } from "../../assets"; import BorderGradientButton from "../../components/BorderGradientButton"; import FullscreenIntroVideo from "../../components/FullscreenIntroVideo"; import GradientButton from "../../components/GradientButton"; -import MusicLandHeader from "../../components/MusicLandHeader"; import { Input } from "../../components/Input"; +import MusicLandHeader from "../../components/MusicLandHeader"; import firebase, { projectsRef, usersRef } from "../../config/firebase"; -import { uploadFileToFirebase } from "../../helpers/uploadToFirebase"; import Page from "../../layouts/Page"; import { Routes } from "../../navigation"; import { goBack, navigate } from "../../navigation/NavigationService"; import { useUserData } from "../../providers/UserDataProvider"; -import { buildFullName } from "../../utils/artistName"; import { gutters, Palette } from "../../styles"; import { FONT_FAMILY } from "../../styles/Fonts"; +import { buildFullName } from "../../utils/artistName"; export const ChooseCoverType = () => { const [showIntro, setShowIntro] = useState(true); @@ -52,11 +43,14 @@ export const ChooseCoverType = () => { return pref === "REAL_NAME" || pref === "CUSTOM"; }, [currentUserData?.artistNamePreference, currentUserData?.userName]); - const realName = useMemo(() => buildFullName(currentUserData), [ - currentUserData?.firstName, - currentUserData?.lastName, - currentUserData?.displayName, - ]); + const realName = useMemo( + () => buildFullName(currentUserData), + [ + currentUserData?.firstName, + currentUserData?.lastName, + currentUserData?.displayName, + ] + ); useEffect(() => { if (pseudoVisible) { @@ -122,48 +116,48 @@ export const ChooseCoverType = () => { [currentUID, projectId] ); - const pickUserImage = useCallback(async () => { - try { - await setIsLoading(true); - const result = await ImagePicker.launchImageLibraryAsync({ - mediaTypes: ["images"], - allowsEditing: true, - aspect: [1, 1], - quality: 1, - }); + // const pickUserImage = useCallback(async () => { + // try { + // await setIsLoading(true); + // const result = await ImagePicker.launchImageLibraryAsync({ + // mediaTypes: ["images"], + // allowsEditing: true, + // aspect: [1, 1], + // quality: 1, + // }); - const uri = result?.assets?.[0]?.uri || null; - if (!uri) return; + // const uri = result?.assets?.[0]?.uri || null; + // if (!uri) return; - if (!projectId) return; - const path = `musics/${projectId}/userSelectedCover.png`; + // if (!projectId) return; + // const path = `musics/${projectId}/userSelectedCover.png`; - const { resultURI } = await uploadFileToFirebase({ - uri, - path, - shouldCompress: true, - fileType: "IMAGE", - }); + // const { resultURI } = await uploadFileToFirebase({ + // uri, + // path, + // shouldCompress: true, + // fileType: "IMAGE", + // }); - if (!resultURI) { - throw new Error("Erreur lors de l'upload"); - } - await updateProjectData({ - cover: { - result: resultURI, - }, - }); - navigate(Routes.ValidateCover); - } catch (e) { - console.log("onPickUserImage error", e?.message); - } finally { - await setIsLoading(false); - } - }, [projectId, setIsLoading, updateProjectData]); + // if (!resultURI) { + // throw new Error("Erreur lors de l'upload"); + // } + // await updateProjectData({ + // cover: { + // result: resultURI, + // }, + // }); + // navigate(Routes.ValidateCover); + // } catch (e) { + // console.log("onPickUserImage error", e?.message); + // } finally { + // await setIsLoading(false); + // } + // }, [projectId, setIsLoading, updateProjectData]); - const handlePickUserImage = useCallback(() => { - ensureArtistPreference(pickUserImage); - }, [ensureArtistPreference, pickUserImage]); + // const handlePickUserImage = useCallback(() => { + // ensureArtistPreference(pickUserImage); + // }, [ensureArtistPreference, pickUserImage]); const handleGenerateCover = useCallback(() => { ensureArtistPreference(() => navigate(Routes.PouchReady)); @@ -184,8 +178,7 @@ export const ChooseCoverType = () => { if (!realName) { setTooltip({ type: "error", - text: - "Renseigne ton prénom et nom dans ton profil ou crée un nom d'artiste.", + text: "Renseigne ton prénom et nom dans ton profil ou crée un nom d'artiste.", }); setChoiceVisible(false); setPseudoVisible(true); @@ -298,10 +291,10 @@ export const ChooseCoverType = () => { gap: 12, }} > - + /> */} { diff --git a/src/screens/cover/PhotoCover.js b/src/screens/cover/PhotoCover.js index aeb3326..a38ce45 100644 --- a/src/screens/cover/PhotoCover.js +++ b/src/screens/cover/PhotoCover.js @@ -1,15 +1,11 @@ import { Image as ExpoImage } from "expo-image"; -import * as ImagePicker from "expo-image-picker"; import React from "react"; import { ActivityIndicator, Text, View } from "react-native"; -import useMinuit from "react-native-minuit/src/hooks/useMinuit"; import { background } from "../../assets"; import BorderGradientButton from "../../components/BorderGradientButton"; import GradientButton from "../../components/GradientButton"; import MusicLandHeader from "../../components/MusicLandHeader"; -import firebase, { tasksRef } from "../../config/firebase"; import loaderMessages from "../../config/loaderMessages"; -import { uploadFileToFirebase } from "../../helpers/uploadToFirebase"; import { isWeb } from "../../hooks/useLayoutType"; import Page from "../../layouts/Page"; import { Routes } from "../../navigation"; @@ -19,69 +15,30 @@ import { gutters, Palette, Style } from "../../styles"; import CreateLyricsHeader from "../Writing/components/CreateLyricsHeader"; const PhotoCover = () => { - const { selectedProject, selectedProjectId, updateProjectData } = - useUserData(); - const { setIsLoading } = useMinuit(); + const { selectedProject } = useUserData(); const isGenerating = selectedProject?.coverStatus === "GENERATING"; const coverGenerationMessage = isWeb ? loaderMessages.photoCoverGenerationWeb : ""; - const onChooseForegroundImage = async () => { - try { - await setIsLoading(true); - const result = await ImagePicker.launchImageLibraryAsync({ - mediaTypes: ["images"], - allowsEditing: true, - aspect: [1, 1], - quality: 1, - }); - - const uri = result?.assets?.[0]?.uri || null; - if (!uri) return; - - const projectId = selectedProject?.id || selectedProjectId; - const path = `musics/${projectId}/userForeground.png`; - - const { resultURI } = await uploadFileToFirebase({ - uri, - path, - shouldCompress: true, - fileType: "IMAGE", - }); - - if (!resultURI) { - throw new Error("Erreur lors de l'upload"); - } - await updateProjectData({ - cover: { - ...selectedProject.cover, - userForeground: resultURI, - }, - }); - await tasksRef.add({ - type: "combine", - projectId: selectedProjectId, - status: "PENDING", - createdAt: firebase.firestore.FieldValue.serverTimestamp(), - }); - } catch (e) { - console.log("onPickUserImage error", e?.message); - } finally { - await setIsLoading(false); - } - }; + const coverUrl = + selectedProject?.cover?.result || + selectedProject?.cover?.generatedBackground || + null; return ( - + - {selectedProject?.cover?.result && !isGenerating ? ( + {coverUrl && !isGenerating ? ( { ...Style.containerCenter, }} > - {isGenerating && ( - - - {isWeb ? ( - coverGenerationMessage ? ( + + {isGenerating ? ( + <> + + {isWeb && coverGenerationMessage ? ( { > {coverGenerationMessage} - ) : null - ) : ( - - Génération en cours. - - )} - - )} + ) : ( + + Génération en cours. + + )} + + ) : ( + + La pochette sera disponible une fois la génération + terminée. + + )} + )} @@ -147,18 +116,14 @@ const PhotoCover = () => { }} > navigate(Routes.ValidateCover)} - title={ - isGenerating ? "Génération en cours..." : "Valider la pochette" - } + onPress={() => navigate(Routes.PouchReady)} + title="Regénérer la pochette" disabled={isGenerating} /> onChooseForegroundImage()} - disabled={isGenerating} + title="Valider la pochette" + onPress={() => navigate(Routes.ValidateCover)} + disabled={isGenerating || !coverUrl} /> diff --git a/src/screens/cover/PouchReady.js b/src/screens/cover/PouchReady.js index e0d93e6..358b687 100644 --- a/src/screens/cover/PouchReady.js +++ b/src/screens/cover/PouchReady.js @@ -19,7 +19,7 @@ import { gutters, Palette, Style } from "../../styles"; import CreateLyricsHeader from "../Writing/components/CreateLyricsHeader"; const PouchReady = () => { - const { selectedProjectId, selectedProject, updateProjectData } = useUser(); + const { selectedProjectId, selectedProject } = useUser(); const { setIsLoading } = useMinuit(); const isGenerating = selectedProject?.coverStatus === "GENERATING"; const isFocused = useIsFocused(); @@ -44,22 +44,9 @@ const PouchReady = () => { } }, [selectedProjectId, setIsLoading]); - async function validateCover() { - try { - await setIsLoading(true); - await updateProjectData({ - cover: { - ...selectedProject.cover, - result: selectedProject.cover.generatedBackground, - }, - }); - navigate(Routes.PhotoCover); - } catch (e) { - console.log(e); - } finally { - await setIsLoading(false); - } - } + const validateCover = () => { + navigate(Routes.ValidateCover); + }; useEffect(() => { if ( @@ -84,6 +71,11 @@ const PouchReady = () => { } }, [generateCover, isFocused, selectedProject]); + const coverPreviewUrl = + selectedProject?.cover?.result || + selectedProject?.cover?.generatedBackground || + null; + return ( @@ -98,9 +90,9 @@ const PouchReady = () => { /> - {selectedProject?.cover?.generatedBackground && !isGenerating ? ( + {coverPreviewUrl && !isGenerating ? ( { /> validateCover()} /> diff --git a/src/utils/projectStages.js b/src/utils/projectStages.js index e0a79c8..2ac3d59 100644 --- a/src/utils/projectStages.js +++ b/src/utils/projectStages.js @@ -205,7 +205,7 @@ export const getStageAction = (key, project) => { } if (!hasFinalCover) { - return { route: Routes.PhotoCover }; + return { route: Routes.ValidateCover }; } return { route: Routes.ChooseCoverType };