File size: 3,039 Bytes
59864f6
 
 
 
3c7ffed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59864f6
3c7ffed
 
 
59864f6
3c7ffed
 
 
 
 
 
 
 
 
 
 
59864f6
 
 
 
 
 
3c7ffed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import requests
from PIL import Image
from io import BytesIO
import getpass, os
import warnings
from stability_sdk import client
import stability_sdk.interfaces.gooseai.generation.generation_pb2 as generation
import replicate

# API keys
api_key = '1143a102dbe21628248d4bb992b391a49dc058c584181ea72e17c2ccd49be9ca69ccf4a2b97fc82c89ff1029578abbea'
os.environ['STABILITY_KEY'] = 'sk-GBmsWR78MmCSAWGkkC1CFgWgE6GPgV00pNLJlxlyZWyT3QQO'
os.environ['REPLICATE_API_TOKEN'] = 'r8_0a77UG8yfrNXOS6xHhUTLh80dJQ5kxO0CTLmq'  # Replace with your actual API token

# Increase the pixel limit
Image.MAX_IMAGE_PIXELS = None

# Establish connection to Stability API
stability_api = client.StabilityInference(
    key=os.environ['STABILITY_KEY'], 
    upscale_engine="esrgan-v1-x2plus",
    verbose=True,
)

# ClipDrop API function
def generate_image(prompt):
    headers = {'x-api-key': api_key}
    body_params = {'prompt': (None, prompt, 'text/plain')}
    response = requests.post('https://clipdrop-api.co/text-to-image/v1', files=body_params, headers=headers)

    if response.status_code == 200:
        return Image.open(BytesIO(response.content))
    else:
        st.write(f"Request failed with status code {response.status_code}")
        return None

# Stability API function
def upscale_image_stability(img):
    answers = stability_api.upscale(init_image=img)

    for resp in answers:
        for artifact in resp.artifacts:
            if artifact.finish_reason == generation.FILTER:
                warnings.warn(
                    "Your request activated the API's safety filters and could not be processed."
                    "Please submit a different image and try again.")
            if artifact.type == generation.ARTIFACT_IMAGE:
                return Image.open(io.BytesIO(artifact.binary))

# GFPGAN function
def upscale_image_gfpgan(image_path):
    with open(image_path, "rb") as img_file:
        output = replicate.run(
            "tencentarc/gfpgan:9283608cc6b7be6b65a8e44983db012355fde4132009bf99d976b2f0896856a3",
            input={"img": img_file, "version": "v1.4", "scale": 16}
        )
        response = requests.get(output)
        return Image.open(BytesIO(response.content))

# Streamlit UI
st.title("Image Generator and Upscaler")

prompt = st.text_input("Enter a prompt for the image generation")

if st.button("Generate and Upscale"):
    if prompt:
        img1 = generate_image(prompt)

        if img1:
            st.image(img1, caption="Generated Image", use_column_width=True)
            img1.save('generated_image.png')

            img2 = upscale_image_stability(img1)
            st.image(img2, caption="Upscaled Image (Stability API)", use_column_width=True)
            img2.save('upscaled_image_stability.png')

            img3 = upscale_image_gfpgan('upscaled_image_stability.png')
            st.image(img3, caption="Upscaled Image (GFPGAN)", use_column_width=True)
            img3.save('upscaled_image_gfpgan.png')
    else:
        st.write("Please enter a prompt")