half-drop-demo / handler.py
Sean Powell
Try a simpler process where the canvas is scaled, rotated and cropped square.
b0b8c79
Raw History Blame Contribute Delete
2.47 kB
import base64
from io import BytesIO
import torch
from utils import pipes, tiling, wallpaper, images
default_desired_output_width = 1024
default_text2img_inference_steps = 50
default_text2img_guidance_scale = 7.14
default_img2img_inference_steps = 50
default_img2img_strength = 0.6
class EndpointHandler:
def __init__(self, path=""):
self.sdxl_pipe = pipes.create_stable_diffusion_xl_pipeline("cuda:0", enable_tiling=False)
self.sdxl_img2img_pipe = pipes.create_stable_diffusion_xl_img2img_pipe("cuda:1")
def __call__(self, data):
self.sdxl_pipe.to("cuda:0")
self.sdxl_img2img_pipe.to("cuda:1")
prompt = data.pop("inputs", data)
desired_output_width = int(data.get("desired_output_width", default_desired_output_width))
text2img_inference_steps = int(data.get("text2img_inference_steps", default_text2img_inference_steps))
img2img_inference_steps = int(data.get("img2img_inference_steps", default_img2img_inference_steps))
text2img_guidance_scale = float(data.get("text2img_guidance_scale", default_text2img_guidance_scale))
img2img_strength = float(data.get("img2img_strength", default_img2img_strength))
print(
f"Prompt: {prompt}, Desired Output Width: {desired_output_width}, Text2Img Inference Steps: {text2img_inference_steps}, Img2Img Inference Steps: {img2img_inference_steps}, Text2Img Guidance Scale: {text2img_guidance_scale}, Img2Img Strength: {img2img_strength}")
original_image_size = tiling.compute_input_tile_width_for_desired_output(desired_output_width)
original_image = \
self.sdxl_pipe(prompt=prompt, num_inference_steps=text2img_inference_steps, width=original_image_size,
height=original_image_size, guidance_scale=text2img_guidance_scale).images[0]
tiled_canvas = wallpaper.prepare_for_diamond_drop(original_image)
inner_rotated_tile = images.extract_larger_inner_rotated_tile_from_image(tiled_canvas, original_image_size,
original_image_size)
half_drop = wallpaper.convert_tile_to_half_drop(inner_rotated_tile)
half_drop_buffer = BytesIO()
half_drop.save(half_drop_buffer, format="PNG")
half_drop_string = base64.b64encode(half_drop_buffer.getvalue())
torch.cuda.empty_cache()
return {"image": half_drop_string.decode()}