huntingcarlisle's picture
Update app.py
fc08c4e
raw
history blame
3.13 kB
import streamlit as st
import requests
from PIL import Image
from io import BytesIO
# from IPython.display import display
import base64
# helper decoder
def decode_base64_image(image_string):
base64_image = base64.b64decode(image_string)
buffer = BytesIO(base64_image)
return Image.open(buffer)
# display PIL images as grid
def display_image(image=None,width=500,height=500):
img = image.resize((width, height))
return img
# API Gateway endpoint URL
api_url = 'https://a02q342s5b.execute-api.us-east-2.amazonaws.com/reinvent-demo-inf2-sm-20231114'
# ===========
# Define Streamlit UI elements
st.title('Stable Diffusion XL with Refiner Image Generation')
prompt = st.text_area("Enter your prompt:",
"Manatee astronaut in space, sci-fi, future, cold color palette, muted colors, detailed, 8k")
negative_prompt = st.text_area("Enter your negative prompt:",
"anime, cartoon, graphic, text, painting, crayon, graphite, abstract glitch, blurry")
seed = st.number_input("Random seed", value=555, placeholder="Type a number...", help="set to same value to generate same image, if other inputs are the same, change to generate a different image for same inputs")
# seed = 555
num_inference_steps = st.slider("Number of Inference Steps",
min_value=1,
max_value=100,
value=20,
help="more steps might improve quality, with diminishing marginal returns. 30-50 seems best, but your mileage may vary.")
denoising_start = st.slider("Denoising Start",
min_value=0.0,
max_value=1.0,
value=0.8,
help="when to stop modifying the overall image and start refining the details")
if st.button('Generate Image'):
with st.spinner(f'Generating Image with {num_inference_steps} iterations, beginning to refine around iteration {int(num_inference_steps * denoising_start)}...'):
# ===============
# Example input data
prompt_input = {
"prompt": prompt,
"parameters": {
"num_inference_steps": num_inference_steps,
"seed": seed,
"negative_prompt": negative_prompt
# "denoising_start": denoising_start
}
}
# Make API request
response = requests.post(api_url, json=prompt_input)
# Process and display the response
if response.status_code == 200:
result = response.json()
# st.success(f"Prediction result: {result}")
image = display_image(decode_base64_image(result["generated_images"][0]))
st.header("SDXL Base + Refiner")
st.image(image,
caption=f"SDXL Base + Refiner, {num_inference_steps} iterations, beginning to refine around iteration {int(num_inference_steps * denoising_start)}")
else:
st.error(f"Error: {response.text}")