Spaces:
Running
Running
import streamlit as st | |
from google import genai | |
from google.genai import types | |
from PIL import Image | |
from io import BytesIO | |
import tempfile | |
import os | |
from dotenv import load_dotenv | |
load_dotenv() | |
GOOGLE_API_KEY = os.environ.get("GOOGLE_API_KEY") | |
os.environ["GOOGLE_API_KEY"] = GOOGLE_API_KEY | |
client = genai.Client(api_key=GOOGLE_API_KEY) | |
st.set_page_config(page_title="Image Generator", layout="centered") | |
st.title("🧠✨ Image Generator") | |
st.markdown("Enter a prompt below and generate an AI image with a description!") | |
prompt = st.text_input("Enter your prompt") | |
if st.button("Generate"): | |
if prompt: | |
with st.spinner("Generating image and description..."): | |
try: | |
response = client.models.generate_content( | |
model="gemini-2.0-flash-exp-image-generation", | |
contents=prompt, | |
config=types.GenerateContentConfig( | |
response_modalities=['Text', 'Image'] | |
) | |
) | |
result_text = "" | |
result_image = None | |
temp_file_path = None | |
for part in response.candidates[0].content.parts: | |
if part.text is not None: | |
result_text += part.text | |
elif part.inline_data is not None: | |
result_image = Image.open(BytesIO(part.inline_data.data)) | |
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".png") | |
result_image.save(temp_file.name) | |
temp_file_path = temp_file.name | |
st.subheader("Generated Description") | |
st.text(result_text) | |
if result_image: | |
st.image(result_image, caption="Generated Image", use_column_width=True) | |
with open(temp_file_path, "rb") as f: | |
st.download_button( | |
label="📥 Download Image", | |
data=f, | |
file_name="generated_image.png", | |
mime="image/png" | |
) | |
except Exception as e: | |
st.error(f"An error occurred: {e}") | |
else: | |
st.warning("Please enter a prompt before generating.") | |