File size: 3,338 Bytes
4be498f
 
 
 
8b3ed0b
 
 
 
 
 
4be498f
 
 
 
 
 
 
 
8b3ed0b
 
4be498f
 
f0aa736
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4be498f
 
 
8b3ed0b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4be498f
 
 
 
8b3ed0b
 
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#------------------------------------------------------------------------
# Import
#------------------------------------------------------------------------

import streamlit as st
import requests
from PIL import Image
import io
import os

#------------------------------------------------------------------------
# HF API
#------------------------------------------------------------------------

# Retrieve the HF API key from environment variables 
hf_api_key = os.getenv('HF_API_KEY')
if not hf_api_key:
    raise ValueError("HF_API_KEY not set in environment variables")

API_URL = "https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-xl-base-1.0"
headers = {"Authorization": f"Bearer {hf_api_key}"}

#------------------------------------------------------------------------
# Configurations
#------------------------------------------------------------------------
# Streamlit page setup
st.set_page_config(
    page_title="Intervention Program Analysis", 
    page_icon=":bar_chart:", 
    layout="centered", 
    initial_sidebar_state="auto",
    menu_items={
        'Get Help': 'mailto:[email protected]',
        'About': "This app is built to support spreadsheet analysis"
    }
)

#------------------------------------------------------------------------
# Sidebar
#------------------------------------------------------------------------
with st.sidebar:
    # Password input field
    # password = st.text_input("Enter Password:", type="password")
    
    # Set the desired width in pixels
    image_width = 300  
    # Define the path to the image
    image_path = "mimtss.png"
    # Display the image
    st.image(image_path, width=image_width)
    
    # Toggle for Help and Report a Bug
    with st.expander("Need help and report a bug"):
        st.write("""
        **Contact**: Cheyne LeVesseur, PhD  
        **Email**: [email protected]
        """)
    st.divider()
    st.subheader('User Instructions')
    
    # Principles text with Markdown formatting
    User_Instructions = """
    Enter a detailed description of the image you want to generate, and the app will create it based on your prompt.
    """
    st.markdown(User_Instructions)

#------------------------------------------------------------------------
# Define functions
#------------------------------------------------------------------------

def query(payload):
    response = requests.post(API_URL, headers=headers, json=payload)
    if response.status_code != 200:
        st.error(f"Error: {response.status_code} - {response.text}")
        return None
    return response.content

def generate_image(prompt):
    image_bytes = query({"inputs": prompt})
    if image_bytes:
        return Image.open(io.BytesIO(image_bytes))
    return None

def main():
    st.title("Stable Diffusion XL 1.0")

    prompt = st.text_input("Enter a prompt for image generation:")
    
    if st.button("Generate Image"):
        if prompt:
            image = generate_image(prompt)
            if image:
                st.image(image, caption="Generated Image")
        else:
            st.warning("Please enter a prompt.")

#------------------------------------------------------------------------
# Main Guard
#------------------------------------------------------------------------

if __name__ == "__main__":
    main()