- aggiornamento di tante cose...
- generazione Volantini - pagina RIS
This commit is contained in:
@@ -2,8 +2,22 @@ const express = require('express');
|
||||
const { authenticate, authenticate_noerror } = require('../middleware/authenticate');
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
const templatesRouter = require('../routes/templates');
|
||||
const postersRouter = require('../routes/posters');
|
||||
const assetsRouter = require('../routes/assets');
|
||||
|
||||
const PageView = require('../models/PageView');
|
||||
|
||||
// const { Groq } = require('groq-sdk');
|
||||
|
||||
const fal = require('@fal-ai/client');
|
||||
|
||||
|
||||
const imageGenerator = require('../services/imageGenerator'); // Assicurati che il percorso sia corretto
|
||||
|
||||
const posterEditor = require('../services/PosterEditor'); // <--- Importa la nuova classe
|
||||
|
||||
const multer = require('multer');
|
||||
const XLSX = require('xlsx');
|
||||
|
||||
@@ -19,6 +33,10 @@ const { MyElem } = require('../models/myelem');
|
||||
|
||||
const axios = require('axios');
|
||||
|
||||
router.use('/templates', authenticate, templatesRouter);
|
||||
router.use('/posters', authenticate, postersRouter);
|
||||
router.use('/assets', authenticate, assetsRouter);
|
||||
|
||||
router.post('/test-lungo', authenticate, (req, res) => {
|
||||
const timeout = req.body.timeout;
|
||||
|
||||
@@ -389,7 +407,6 @@ router.post('/search-books', authenticate, async (req, res) => {
|
||||
let productfind = null;
|
||||
|
||||
for (let field of book) {
|
||||
|
||||
field = field.trim();
|
||||
let valido = typeof field === 'string' && field.length > 4 && field.length < 50;
|
||||
if (valido) {
|
||||
@@ -494,4 +511,46 @@ router.post('/chatbot', authenticate, async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/generateposter', async (req, res) => {
|
||||
const {
|
||||
titolo, data, ora, luogo, descrizione, contatti, fotoDescrizione, stile,
|
||||
provider = 'hf' // Default a HF (Gratis)
|
||||
} = req.body;
|
||||
|
||||
// 1. Prompt per l'AI: Chiediamo SOLO lo sfondo, VIETIAMO il testo.
|
||||
// Questo garantisce che Flux si concentri sulla bellezza dell'immagine.
|
||||
const promptAI = `Vertical event poster background, ${stile || 'modern style, vivid colors'}.
|
||||
Subject: ${fotoDescrizione || 'abstract artistic shapes'}.
|
||||
Composition: Central empty space or clean layout suitable for overlaying text later.
|
||||
NO TEXT, NO LETTERS, clean illustration, high quality, 4k.`;
|
||||
|
||||
try {
|
||||
console.log('1. Generazione Sfondo AI...');
|
||||
// Genera solo l'immagine base
|
||||
const rawImageUrl = await imageGenerator.generate(provider, promptAI);
|
||||
|
||||
console.log('2. Composizione Grafica Testi...');
|
||||
// Sovrapponi i testi con Canvas
|
||||
const finalPosterBase64 = await posterEditor.createPoster(rawImageUrl, {
|
||||
titolo,
|
||||
data,
|
||||
ora,
|
||||
luogo,
|
||||
contatti
|
||||
});
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
imageUrl: finalPosterBase64, // Restituisce l'immagine completa in base64
|
||||
step: 'AI + Canvas Composition'
|
||||
});
|
||||
|
||||
} catch (err) {
|
||||
console.error('Errore:', err.message);
|
||||
res.status(500).json({ error: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
module.exports = router;
|
||||
|
||||
Reference in New Issue
Block a user