Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import openai | |
| import os | |
| import tempfile | |
| from dotenv import load_dotenv | |
| import requests # For downloading images | |
| # Load environment variables | |
| load_dotenv() | |
| openai_api_key = os.getenv("OPENAI_API_KEY") | |
| # Initialize OpenAI API key | |
| openai.api_key = openai_api_key | |
| # Set page config | |
| st.set_page_config(page_title='Image Generation', page_icon=':money_with_wings:', layout='wide') | |
| st.title('Image Generation') | |
| # Initialize session state | |
| if 'dynamic_prompt' not in st.session_state: | |
| st.session_state['dynamic_prompt'] = "" | |
| if 'generate_image' not in st.session_state: | |
| st.session_state['generate_image'] = False | |
| if 'image_generated' not in st.session_state: | |
| st.session_state['image_generated'] = False | |
| if 'image_url' not in st.session_state: | |
| st.session_state['image_url'] = "" | |
| # Main content | |
| with st.form(key='my_form'): | |
| # Image generation input | |
| size = st.selectbox('Select size of the images', ('256x256', '512x512', '1024x1024')) | |
| num_images = st.selectbox('select Number of Image to be generatd ', ('1', '2', "3", '4', '5')) # Number of images | |
| # Pizza order input | |
| pizza_names =["Crispy Chicken", "Chicken Pesto", "Deluxe Pepperoni", "Truffle Mushroom", | |
| "Ultimate Cheese", "Spicy Veggie Ranch", "Classic Chicken Ranch", | |
| "BBQ Chicken Ranch", "Spicy Chicken Ranch", "Very Veggie", | |
| "Super Supreme", "Classic Pepperoni", "Margherita", "Cheeky Chicken", | |
| "Chicken Super Supreme", "Chicken BBQ Supreme", "Chicken Fajita", | |
| "Chicken Shawerma", "Other"] | |
| name = st.selectbox("Name of Pizza", pizza_names) | |
| size_pizza = st.selectbox("Size of Pizza", ["Small", "Medium", "Large", "Extra Large"]) | |
| toppings_options = ["Arugula", "Bacon", "Basil", "Broccoli", "Cheese", "Chicken", "Corn", "Ham", "Mushroom", "Olives", "Onion", "Pepperoni", "Peppers", "Pineapple", "Tomatoes" ] # rest of the list | |
| toppings = st.multiselect("Toppings", toppings_options, default=["Mushroom", "Tomatoes", "Onion"]) | |
| prompt = st.text_input(label='Enter additional Descriptions ') | |
| bg_color_options = ['White', 'Black', 'Light Blue', 'Light Green', 'Light Yellow', 'Light Pink'] | |
| bg_color = st.selectbox('Select Background Color', bg_color_options) | |
| orient =["Top View", "Side View", "lateral View"] | |
| orientation_checkbox = st.multiselect("Orientation", orient, default=["Top View"]) | |
| generate_prompt_button = st.form_submit_button(label='Generate Prompt') | |
| # Action when the generate prompt button is clicked | |
| if generate_prompt_button: | |
| st.session_state['dynamic_prompt'] = f"Imagine you are a marketer who wants to post an image on social media for a {size_pizza} {name} Pizza with following toppings on it {', '.join(toppings)}. I want to generate image for the given descrpition in {orientation_checkbox} with back ground color as {bg_color} " | |
| st.write(st.session_state['dynamic_prompt']) | |
| st.session_state['generate_image'] = True | |
| # Display the button to generate the image only if the prompt has been generated | |
| if st.session_state['generate_image']: | |
| with st.form(key='image_form'): | |
| generate_image_button = st.form_submit_button(label='Generate Image') | |
| if generate_image_button: | |
| # Image generation code using OpenAI's API | |
| if st.session_state['dynamic_prompt']: | |
| response = openai.Image.create( | |
| prompt=st.session_state['dynamic_prompt'], | |
| n=num_images, | |
| size=size, | |
| ) | |
| st.session_state['image_url'] = response["data"][0]["url"] | |
| st.image(st.session_state['image_url'], caption="Generated image", use_column_width=True) | |
| # Update the session state to reflect that the image has been generated | |
| st.session_state['image_generated'] = True | |
| submitted = st.form_submit_button("Submit") | |
| #st.write("Outside the form") | |
| # Download button for the generated image | |
| if st.session_state['image_generated']: | |
| with tempfile.NamedTemporaryFile(delete=False, suffix=".png") as tmp_file: | |
| response = requests.get(st.session_state['image_url']) | |
| with open(tmp_file.name, "wb") as f: | |
| f.write(response.content) # Saving the image data | |
| st.download_button( | |
| label="Download image", | |
| data=tmp_file, | |
| file_name="generated_image.png", | |
| mime="image/png" | |
| ) | |
| combined_info = f""" | |
| Image Generation Details: | |
| - Text Prompt: {st.session_state['dynamic_prompt']} | |
| - Image Size: {size} | |
| - Number of Images: {num_images} | |
| """ | |
| st.write(combined_info) | |