=== CORREZIONE: REPLICA ESATTA WORKFLOW UTENTE === Data: 14/01/2025 02:45:00 Problema: Sistema troppo complicato, non replica il workflow dell'utente Soluzione: Usare esattamente lo stesso approccio dell'utente con ChatGPT 4o WORKFLOW UTENTE (che funziona): 1. Allega immagine a ChatGPT 4o 2. Prompt: "genera un'immagine simile a questa ma diversa" 3. ChatGPT 4o genera l'immagine WORKFLOW API CORRETTO (da implementare): 1. Mando immagine + prompt a GPT-4o in UN SOLO MESSAGGIO 2. GPT-4o crea prompt ottimizzato per DALL-E 3. Uso quel prompt con DALL-E === MODIFICA FUNZIONE genera_immagine_openai_dalle === SOSTITUIRE COMPLETAMENTE con questa versione: ```python def genera_immagine_openai_dalle(testo_curiosita, immagine_riferimento=None, url_riferimento=None): """ Genera un'immagine usando OpenAI DALL-E dal testo della curiosità. CORRETTO: 14/01/2025 02:45:00 - Replica esatta workflow utente con ChatGPT 4o """ import requests import os from datetime import datetime import base64 print(f"🎨 GENERAZIONE IMMAGINE DALL-E per: '{testo_curiosita[:50]}...'") if immagine_riferimento or url_riferimento: print(f" 📎 Con immagine di riferimento: {'File' if immagine_riferimento else 'URL'}") # Cartella di destinazione if not os.path.exists('generated_images'): os.makedirs('generated_images') # Genera nome file univoco timestamp = datetime.now().strftime("%H%M%S") nome_file = f"dalle_image_{timestamp}.png" percorso_locale = os.path.join('generated_images', nome_file) try: # STEP 1: Se c'è immagine di riferimento, usa GPT-4o per creare prompt DALL-E if immagine_riferimento or url_riferimento: print(f" 🔍 GPT-4O: Creazione prompt DALL-E basato su immagine di riferimento...") try: # Prepara l'immagine per GPT-4o if url_riferimento: image_url = url_riferimento print(f" 📡 Uso URL diretto: {url_riferimento[:100]}...") elif immagine_riferimento: # File caricato - converti in base64 image_data = base64.b64encode(immagine_riferimento.read()).decode('utf-8') image_url = f"data:image/jpeg;base64,{image_data}" print(f" 📁 Immagine convertita in base64") # REPLICA ESATTA del workflow utente con ChatGPT 4o gpt4o_response = client.chat.completions.create( model="gpt-4o", # Stesso modello che usa l'utente messages=[ { "role": "user", "content": [ { "type": "text", "text": f"Guarda questa immagine e crea un prompt dettagliato per DALL-E che generi un'immagine simile a questa ma diversa. Il prompt deve catturare lo stile, l'atmosfera, i colori e la composizione dell'immagine di riferimento. L'immagine deve essere correlata a questo tema: {testo_curiosita}. Non includere testo o scritte nell'immagine." }, { "type": "image_url", "image_url": { "url": image_url, "detail": "high" } } ] } ], max_tokens=300 ) prompt_dalle = gpt4o_response.choices[0].message.content print(f" ✅ GPT-4o - Prompt DALL-E creato:") print(f" 📝 {prompt_dalle}") except Exception as gpt4o_error: print(f" ❌ Errore GPT-4o: {gpt4o_error}") # Fallback al prompt standard prompt_dalle = f"Crea un'immagine realistica che rappresenti visivamente questa curiosità: {testo_curiosita}. L'immagine deve sembrare il più reale possibile, come una fotografia, senza includere alcun testo, scritta, numero o simbolo nell'immagine." else: # Modalità standard senza riferimento prompt_dalle = f"Crea un'immagine realistica che rappresenti visivamente questa curiosità: {testo_curiosita}. L'immagine deve sembrare il più reale possibile, come una fotografia, senza includere alcun testo, scritta, numero o simbolo nell'immagine." print(f" 📝 Prompt finale per DALL-E: {prompt_dalle[:200]}...") # STEP 2: Chiamata DALL-E con prompt ottimizzato response = client.images.generate( model="dall-e-3", prompt=prompt_dalle, size="1024x1024", quality="standard", n=1, ) # Estrai URL dell'immagine generata image_url = response.data[0].url # Scarica l'immagine img_response = requests.get(image_url, timeout=30) if img_response.status_code == 200: with open(percorso_locale, 'wb') as f: f.write(img_response.content) # Verifica che il file sia stato creato correttamente if os.path.exists(percorso_locale) and os.path.getsize(percorso_locale) > 1000: file_size = os.path.getsize(percorso_locale) print(f"✅ DALL-E: Immagine generata con successo!") print(f" 📁 File: {nome_file}") print(f" 📊 Dimensione: {file_size} bytes") print(f" 🎨 Risoluzione: 1024x1024") return { "successo": True, "url_locale": percorso_locale, "nome_file": nome_file, "fonte": "OpenAI DALL-E 3", "prompt_usato": prompt_dalle, "testo_originale": testo_curiosita, "con_riferimento": bool(immagine_riferimento or url_riferimento), "metodo": "gpt4o_ottimizzato" if (immagine_riferimento or url_riferimento) else "standard" } else: print(f" ⚠️ File non creato o troppo piccolo") return { "successo": False, "errore": "File immagine non creato correttamente" } else: print(f" ⚠️ Errore download immagine: {img_response.status_code}") return { "successo": False, "errore": f"Errore download immagine: {img_response.status_code}" } except Exception as e: print(f" ❌ Errore DALL-E: {str(e)}") return { "successo": False, "errore": f"Errore DALL-E: {str(e)}" } ``` === DIFFERENZA CHIAVE === PRIMA (complicato): Immagine → GPT-4 Vision (descrizione) → DALL-E (con descrizione) DOPO (come l'utente): Immagine + Prompt → GPT-4o (prompt ottimizzato) → DALL-E (con prompt ottimizzato) === VANTAGGI === 1. ✅ Replica esatta del workflow utente 2. ✅ Un solo step invece di due 3. ✅ GPT-4o ottimizza automaticamente il prompt per DALL-E 4. ✅ Stessa qualità dei risultati che ottiene l'utente 5. ✅ Processo più veloce e efficiente === RISULTATO ATTESO === Con l'URL dell'immagine di Facebook, GPT-4o creerà un prompt che dirà a DALL-E esattamente come generare un'immagine simile ma diversa, proprio come fa il ChatGPT 4o dell'utente.