Spaces:
Sleeping
Sleeping
import gradio as gr | |
from PIL import Image | |
from gradio_imageslider import ImageSlider | |
import requests | |
import base64 | |
import numpy as np | |
import random | |
import io | |
URL = "http://localhost:5000/predictions" | |
HEADERS = { | |
"Content-Type": "application/json", | |
} | |
MAX_SEED = np.iinfo(np.int32).max | |
def randomize_seed_fn(seed: int, randomize_seed: bool) -> int: | |
if randomize_seed: | |
seed = random.randint(0, MAX_SEED) | |
return seed | |
def generate( | |
input_image: Image, | |
prompt: str, | |
negative_prompt: str = "", | |
seed: int = 0, | |
width: int = 1024, | |
height: int = 1024, | |
prior_num_inference_steps: int = 30, | |
# prior_timesteps: List[float] = None, | |
prior_guidance_scale: float = 4.0, | |
decoder_num_inference_steps: int = 12, | |
# decoder_timesteps: List[float] = None, | |
decoder_guidance_scale: float = 0.0, | |
num_images_per_prompt: int = 2, | |
) -> Image: | |
payload = { | |
"input": { | |
"hdr": 0, | |
"image": "http://localhost:7860/file=" + input_image, | |
"steps": 20, | |
"prompt": prompt, | |
"scheduler": "DDIM", | |
"creativity": 0.25, | |
"guess_mode": False, | |
"resolution": "original", | |
"resemblance": 0.75, | |
"guidance_scale": 7, | |
"negative_prompt": "teeth, tooth, open mouth, longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, mutant" | |
} | |
} | |
response = requests.post(URL, headers=HEADERS, json=payload) | |
json_response = response.json() | |
if 'output' in json_response: | |
base64_image = json_response["output"][0] | |
image_data = base64.b64decode( | |
base64_image.replace("data:image/png;base64,", "")) | |
image_stream = io.BytesIO(image_data) | |
return [Image.open(input_image), Image.open(image_stream)] | |
raise gr.Error(json_response["status"]) | |
examples = [ | |
["An astronaut riding a green horse", "examples/image2.png"], | |
["A mecha robot in a favela by Tarsila do Amaral", "examples/image2.png"], | |
["The sprirt of a Tamagotchi wandering in the city of Los Angeles", | |
"examples/image1.png"], | |
["A delicious feijoada ramen dish", "examples/image0.png"], | |
] | |
with gr.Blocks() as demo: | |
with gr.Row(): | |
with gr.Column(): | |
input_image = gr.Image(type="filepath") | |
with gr.Group(): | |
with gr.Row(): | |
prompt = gr.Text( | |
label="Prompt", | |
show_label=False, | |
max_lines=1, | |
placeholder="Enter your prompt", | |
container=False, | |
) | |
run_button = gr.Button("Run", scale=0) | |
with gr.Column(): | |
result = ImageSlider(label="Result", type="pil") | |
with gr.Accordion("Advanced options", open=False): | |
negative_prompt = gr.Text( | |
label="Negative prompt", | |
max_lines=1, | |
placeholder="Enter a Negative Prompt", | |
) | |
seed = gr.Slider( | |
label="Seed", | |
minimum=0, | |
maximum=MAX_SEED, | |
step=1, | |
value=0, | |
) | |
randomize_seed = gr.Checkbox(label="Randomize seed", value=True) | |
with gr.Row(): | |
width = gr.Slider( | |
label="Width", | |
minimum=1024, | |
maximum=1024, | |
step=512, | |
value=1024, | |
) | |
height = gr.Slider( | |
label="Height", | |
minimum=1024, | |
maximum=1024, | |
step=512, | |
value=1024, | |
) | |
num_images_per_prompt = gr.Slider( | |
label="Number of Images", | |
minimum=1, | |
maximum=2, | |
step=1, | |
value=1, | |
) | |
with gr.Row(): | |
prior_guidance_scale = gr.Slider( | |
label="Prior Guidance Scale", | |
minimum=0, | |
maximum=20, | |
step=0.1, | |
value=4.0, | |
) | |
prior_num_inference_steps = gr.Slider( | |
label="Prior Inference Steps", | |
minimum=10, | |
maximum=30, | |
step=1, | |
value=20, | |
) | |
decoder_guidance_scale = gr.Slider( | |
label="Decoder Guidance Scale", | |
minimum=0, | |
maximum=0, | |
step=0.1, | |
value=0.0, | |
) | |
decoder_num_inference_steps = gr.Slider( | |
label="Decoder Inference Steps", | |
minimum=4, | |
maximum=12, | |
step=1, | |
value=10, | |
) | |
gr.Examples( | |
examples=examples, | |
inputs=[prompt, input_image], | |
outputs=result, | |
fn=generate, | |
cache_examples=True, | |
) | |
inputs = [ | |
input_image, | |
prompt, | |
negative_prompt, | |
seed, | |
width, | |
height, | |
prior_num_inference_steps, | |
# prior_timesteps, | |
prior_guidance_scale, | |
decoder_num_inference_steps, | |
# decoder_timesteps, | |
decoder_guidance_scale, | |
num_images_per_prompt, | |
] | |
gr.on( | |
triggers=[prompt.submit, negative_prompt.submit, run_button.click], | |
fn=randomize_seed_fn, | |
inputs=[seed, randomize_seed], | |
outputs=seed, | |
queue=False, | |
api_name=False, | |
).then( | |
fn=generate, | |
inputs=inputs, | |
outputs=result, | |
api_name="run", | |
) | |
if __name__ == "__main__": | |
demo.queue(max_size=20).launch() | |