File size: 2,527 Bytes
978ab3c
1553ebb
 
 
978ab3c
1553ebb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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}")