File size: 4,446 Bytes
1c681f7
 
 
 
 
 
 
 
c89879a
 
1c681f7
 
 
 
 
c89879a
1c681f7
 
c89879a
1c681f7
 
 
 
 
c89879a
1c681f7
 
 
 
 
 
 
 
 
 
 
c89879a
1c681f7
c89879a
 
1c681f7
c89879a
1c681f7
 
c89879a
 
1c681f7
 
 
 
 
 
c89879a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1c681f7
 
c89879a
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import streamlit as st
from gpt_vision_prompt import generate_prompt_with_vision
import tempfile
from dalle_generate_img import generate_img_with_dalle
from stability_generate_img import generate_image_with_stability
from finetune_generate_img import generate_finetuned_img
from midjourney_generate_img import midjourney_generate_img


# Configuración de la página
st.set_page_config(layout="wide")
st.sidebar.title("API Keys")
st.markdown("<h1 style='text-align: center; color: grey;'>Image Generation App</h1>", unsafe_allow_html=True)
st.text("Prepared by [email protected] for fomo.ai")

# Lista de nombres de las API keys
api_key_names = ["OPENAI_API_KEY", "MIDJOURNEY_GOAPI_TOKEN", "REPLICATE_API_TOKEN", "STABILITY_API_KEY"]

# Inicializar el estado de la sesión si no existe
if 'api_keys' not in st.session_state:
    st.session_state['api_keys'] = {key_name: "" for key_name in api_key_names}
if 'editable_prompt' not in st.session_state:
    st.session_state['editable_prompt'] = ""

# Definir una función para solicitar y actualizar las API keys
def request_and_update_api_keys():
    all_keys_entered = True
    for key_name in api_key_names:
        key_value = st.sidebar.text_input(f"Enter {key_name}:", value=st.session_state['api_keys'].get(key_name, ""), type="password", key=key_name)
        st.session_state['api_keys'][key_name] = key_value
        if not key_value:
            all_keys_entered = False
    return all_keys_entered

all_keys_entered = request_and_update_api_keys()

# Revisar si todas las API keys han sido ingresadas
if all_keys_entered:
    # Sección para subir la imagen
    uploaded_file = st.file_uploader("Upload Image to analyze", type=['jpg', 'jpeg', 'png'])
    if uploaded_file is not None:
        left_co, cent_co,last_co = st.columns(3)
        with cent_co:
            st.image(uploaded_file, caption="Uploaded Image")
        # Botón para generar el prompt solo si hay una imagen subida
        if st.button("Generate Prompt"):
            with st.spinner("Generating Prompt..."):
                with tempfile.NamedTemporaryFile(delete=False, suffix='.png') as temp_file:
                    temp_file.write(uploaded_file.getvalue())
                    temp_path = temp_file.name
                api_key = st.session_state['api_keys']['OPENAI_API_KEY']
                prompt = generate_prompt_with_vision(temp_path, api_key=api_key)
                st.success("Done!")
                st.session_state['editable_prompt'] = prompt  # Actualizar el prompt en el estado de la sesión

    editable_prompt = st.text_area("Edit the prompt as needed:", placeholder="Enter your prompt here...", height=150, key='editable_prompt', label_visibility='hidden')

    col1, col2, col3, col4 = st.columns(4)
    
    if st.session_state['editable_prompt'] and st.button("Generate New Image"):
        with col1:
            with st.spinner("Generating DALL·E Image..."):
                result_path_1 = generate_img_with_dalle(st.session_state['editable_prompt'], api_key=st.session_state['api_keys']['OPENAI_API_KEY'])
                st.success("Generated DALL·E Image!")
                st.image(result_path_1, caption="DALL·E Image")
                
        with col2:
            with st.spinner("Generating Stable Diffusion Image..."):
                result_path_2 = generate_image_with_stability(st.session_state['editable_prompt'], api_key=st.session_state['api_keys']['STABILITY_API_KEY'])
                st.success("Generated Stable Diffusion Image!")
                st.image(result_path_2, caption="Stable Diffusion Image")
        
        with col3:
            with st.spinner("Generating Finetuning Image..."):
                result_path_3 = generate_finetuned_img(st.session_state['editable_prompt'], api_key=st.session_state['api_keys']['REPLICATE_API_TOKEN'])
                st.success("Generated Image using a finetuned model!")
                st.image(result_path_3, caption="Finetuned SDXL Image")
        
        with col4:
            with st.spinner("Generating Midjourney Image..."):
                result_path_4 = midjourney_generate_img(st.session_state['editable_prompt'], api_key=st.session_state['api_keys']['MIDJOURNEY_GOAPI_TOKEN'])
                st.success("Generated Midjourney Image!")
                st.image(result_path_4, caption="Midjourney Image")

else:
    st.warning('Please enter all required API keys to proceed.', icon="⚠️")