File size: 3,261 Bytes
d60dac5
cebfd3c
293ffb8
 
c17cf76
293ffb8
 
a6058bc
293ffb8
 
 
 
 
 
c17cf76
293ffb8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7376a17
293ffb8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ed5749a
293ffb8
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import streamlit as st
import time
import base64
import io
from PIL import Image
from together import Together
import os

# Funzione per generare le immagini, con gestione errori e retry dopo 10 secondi
def generate_image(prompt, max_retries=5):
    api_key = os.getenv('API_REPLIACATE')
    client = Together(api_key = api_key)
    retries = 0
    while retries < max_retries:
        try:
            response = client.images.generate(
                prompt=prompt,
                model="black-forest-labs/FLUX.1-schnell-Free",
                width=960,
                height=1440,
                steps=4,
                n=1,
                response_format="b64_json"
            )
            return response.data  # Una lista di oggetti con attributo b64_json
        except Exception as e:
            st.error(f"Errore durante la generazione delle immagini: {e}. Riprovo tra 10 secondi...")
            time.sleep(10)
            retries += 1
    st.error("Numero massimo di tentativi raggiunto. Impossibile generare le immagini.")
    return None

def generate_images(prompt, num_immagini):
    for numero in range(num_immagini):
        images_data = generate_image(prompt)
        if images_data is not None:
            for i, img_obj in enumerate(images_data):
                try:
                    image_bytes = base64.b64decode(img_obj.b64_json)
                    image = Image.open(io.BytesIO(image_bytes))
                    st.image(image, caption="")
                except Exception as e:
                    st.error(f"Errore nella visualizzazione dell'immagine {i+1}: {e}")
        else:
            st.error("Non è stato possibile generare le immagini. Riprova più tardi.")
        time.sleep(5)
    st.success("Immagini generate con successo!")

def main():
    st.title("AI Imaging")
    st.sidebar.header("Impostazioni")
    stile_default = "Highly detailed, painterly style with a historical yet stylized aesthetic. Rich textures, ornate patterns, and a color palette dominated by imperial gold, deep red, and aged marble tones. Inspired by ancient Roman mosaics, frescoes, and classical sculpture, with a balanced mix of realism and stylization. Elegant, decorative card borders with intricate engravings and antique flourishes. Designed for a tabletop card game, ensuring clarity, readability, and a visually immersive experience."
    stile_immagine = st.sidebar.text_area("Stile Immagine", stile_default, disabled=False)
    prompt_input = st.sidebar.text_area("Prompt Immagine")
    num_immagini = st.sidebar.slider("Variazioni", min_value=1, max_value=6, value=2)
    submit_button = st.sidebar.button(label="Genera Immagine", type = "primary", use_container_width=True)
    st.write("Inserisci il **Prompt** (che verrà unito allo stile) e clicca su *Genera Immagine*.")
    if submit_button:
        if not prompt_input.strip():
            st.error("Per favore, inserisci un prompt per l'immagine!")
        else:
            # Combiniamo il prompt inserito con lo stile fisso
            prompt_completo = f"{prompt_input}, {stile_immagine}"
            
            st.info("Generazione in corso, attendere...")
            generate_images(prompt_completo, num_immagini)

if __name__ == "__main__":
    main()