File size: 3,729 Bytes
3e7d217
33c27ec
 
 
 
9184aae
30b12a2
 
9184aae
 
 
 
33c27ec
9184aae
3e7d217
9184aae
 
 
33c27ec
9184aae
 
 
 
 
 
 
 
 
 
a489489
3e7d217
7d9848b
3e7d217
 
7d9848b
3e7d217
 
7d9848b
 
 
 
9184aae
3e7d217
30b12a2
 
3e7d217
 
30b12a2
 
 
 
 
3e7d217
 
30b12a2
3e7d217
 
30b12a2
3e7d217
 
30b12a2
 
 
 
 
 
 
 
3e7d217
30b12a2
33c27ec
9184aae
3e7d217
9184aae
3e7d217
9184aae
 
3e7d217
 
 
9184aae
 
3e7d217
9184aae
33c27ec
3e7d217
 
 
 
 
 
 
 
 
 
 
 
 
 
7d3b68d
3e7d217
 
 
 
 
33c27ec
 
3e7d217
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import streamlit as st
import os
import requests
from PIL import Image
from io import BytesIO
import replicate
from stability_sdk import client
import stability_sdk.interfaces.gooseai.generation.generation_pb2 as generation

# Configure your API keys here
CLIPDROP_API_KEY = '1143a102dbe21628248d4bb992b391a49dc058c584181ea72e17c2ccd49be9ca69ccf4a2b97fc82c89ff1029578abbea'
STABLE_DIFFUSION_API_KEY = 'sk-GBmsWR78MmCSAWGkkC1CFgWgE6GPgV00pNLJlxlyZWyT3QQO'

# Set up environment variable for Replicate API Token
os.environ['REPLICATE_API_TOKEN'] = 'r8_3V5WKOBwbbuL0DQGMliP0972IAVIBo62Lmi8I'  # Replace with your actual API token

def generate_image_from_text(prompt):
    r = requests.post('https://clipdrop-api.co/text-to-image/v1',
        files = {
            'prompt': (None, prompt, 'text/plain')
        },
        headers = { 'x-api-key': CLIPDROP_API_KEY }
    )
    
    if r.ok:
        return r.content
    else:
        r.raise_for_status()

def resize_image(image_bytes, max_size=(256, 256)):
    # Open the image from bytes
    img = Image.open(BytesIO(image_bytes))
    
    # Resize the image
    img.thumbnail(max_size)
    
    # Save it back to bytes
    buffer = BytesIO()
    img.save(buffer, format="PNG")
    return buffer.getvalue()

def upscale_image_stable_diffusion(image_bytes):
    # Set up environment variables
    os.environ['STABILITY_HOST'] = 'grpc.stability.ai:443'
    os.environ['STABILITY_KEY'] = STABLE_DIFFUSION_API_KEY

    # Set up the connection to the API
    stability_api = client.StabilityInference(
        key=os.environ['STABILITY_KEY'],
        upscale_engine="stable-diffusion-x4-latent-upscaler",
        verbose=True,
    )

    # Open the image from bytes
    img = Image.open(BytesIO(image_bytes))

    # Call the upscale API
    answers = stability_api.upscale(init_image=img)

    # Process the response
    upscaled_img_bytes = None
    for resp in answers:
        for artifact in resp.artifacts:
            if artifact.type == generation.ARTIFACT_IMAGE:
                upscaled_img = Image.open(BytesIO(artifact.binary))
                upscaled_img_bytes = BytesIO()
                upscaled_img.save(upscaled_img_bytes, format='PNG')
                upscaled_img_bytes = upscaled_img_bytes.getvalue()
    
    return upscaled_img_bytes

def further_upscale_image(image_bytes):
    # Run the GFPGAN model
    output = replicate.run(
        "tencentarc/gfpgan:9283608cc6b7be6b65a8e44983db012355fde4132009bf99d976b2f0896856a3",
        input={"img": BytesIO(image_bytes), "version": "v1.4", "scale": 16}
    )
    
    # The output is a URI of the processed image
    # We will retrieve the image data and save it
    response = requests.get(output)
    img = Image.open(BytesIO(response.content))
    img.save("upscaled.png")  # Save the upscaled image
    return img

def main():
    st.title("Image Generation and Upscaling")
    st.write("Enter a text prompt and an image will be generated and upscaled.")

    prompt = st.text_input("Enter a textual prompt to generate an image...")
    
    if prompt:
        st.success("Generating image from text prompt...")
        image_bytes = generate_image_from_text(prompt)
        
        st.success("Resizing image...")
        resized_image_bytes = resize_image(image_bytes)
        
        st.success("Upscaling image with stable-diffusion-x4-latent-upscaler...")
        upscaled_image_bytes = upscale_image_stable_diffusion(resized_image_bytes) # Change this line
        
        st.success("Further upscaling image with GFPGAN...")
        img = further_upscale_image(upscaled_image_bytes)
        
        st.image(img, caption='Upscaled Image', use_column_width=True)

if __name__ == "__main__":
    main()