Spaces:
Running
Running
import streamlit as st | |
import requests | |
import base64 | |
import os | |
st.title("OpenAI GPT-Image-1 Text-to-Image Demo") | |
prompt = st.text_area("Please enter image description (prompt)") | |
api_key = os.environ.get("OPENAI_API_KEY") | |
if api_key: | |
st.info("OPENAI_API_KEY environment variable detected, will use automatically.") | |
else: | |
api_key = st.text_input("Please enter OpenAI API Key", type="password") | |
uploaded_image = st.file_uploader( | |
"(Optional) Upload an image to edit", type=["png", "jpg", "jpeg", "webp"] | |
) | |
if st.button("Generate Image") and prompt and api_key: | |
if uploaded_image: | |
# Call image edit API | |
headers = {"Authorization": f"Bearer {api_key}"} | |
files = { | |
"image": (uploaded_image.name, uploaded_image, uploaded_image.type), | |
} | |
data = { | |
"prompt": prompt, | |
"model": "gpt-image-1", | |
"size": "1024x1024", | |
} | |
with st.spinner("Image editing in progress..."): | |
response = requests.post( | |
"https://api.openai.com/v1/images/edits", | |
headers=headers, | |
files=files, | |
data=data, | |
) | |
if response.status_code == 200: | |
img_b64 = response.json()["data"][0]["b64_json"] | |
img_bytes = base64.b64decode(img_b64) | |
col1, col2 = st.columns(2) | |
with col1: | |
st.image(uploaded_image, caption="Original Image", use_column_width=True) | |
with col2: | |
st.image(img_bytes, caption="Edited Image", use_column_width=True) | |
else: | |
st.error(f"API Error: {response.text}") | |
else: | |
# Call image generation API | |
headers = { | |
"Authorization": f"Bearer {api_key}", | |
"Content-Type": "application/json", | |
} | |
payload = { | |
"prompt": prompt, | |
"model": "gpt-image-1", | |
"output_format": "png", | |
"size": "1024x1024", | |
} | |
with st.spinner("Image generation in progress..."): | |
response = requests.post( | |
"https://api.openai.com/v1/images/generations", | |
headers=headers, | |
json=payload, | |
) | |
if response.status_code == 200: | |
img_b64 = response.json()["data"][0]["b64_json"] | |
img_bytes = base64.b64decode(img_b64) | |
st.image(img_bytes, caption="Generated Image", use_column_width=True) | |
else: | |
st.error(f"API Error: {response.text}") | |