""" A handy utility for verifying SDXL image generation locally. To set up, first run a local cog server using: cog run -p 5000 python -m cog.server.http Then, in a separate terminal, generate samples python samples.py """ import base64 import os import sys import requests def gen(output_fn, **kwargs): if os.path.exists(output_fn): return print("Generating", output_fn) url = "http://localhost:5000/predictions" response = requests.post(url, json={"input": kwargs}) data = response.json() try: datauri = data["output"][0] base64_encoded_data = datauri.split(",")[1] data = base64.b64decode(base64_encoded_data) except: print("Error!") print("input:", kwargs) print(data["logs"]) sys.exit(1) with open(output_fn, "wb") as f: f.write(data) def main(): SCHEDULERS = [ "DDIM", "DPMSolverMultistep", "HeunDiscrete", "KarrasDPM", "K_EULER_ANCESTRAL", "K_EULER", "PNDM", ] gen( f"sample.txt2img.png", prompt="A studio portrait photo of a cat", num_inference_steps=25, guidance_scale=7, negative_prompt="ugly, soft, blurry, out of focus, low quality, garish, distorted, disfigured", seed=1000, width=1024, height=1024, ) for refiner in ["base_image_refiner", "expert_ensemble_refiner", "no_refiner"]: gen( f"sample.img2img.{refiner}.png", prompt="a photo of an astronaut riding a horse on mars", image="https://huggingface.co/datasets/patrickvonplaten/images/resolve/main/aa_xl/000000009.png", prompt_strength=0.8, num_inference_steps=25, refine=refiner, guidance_scale=7, negative_prompt="ugly, soft, blurry, out of focus, low quality, garish, distorted, disfigured", seed=42, ) gen( f"sample.inpaint.{refiner}.png", prompt="A majestic tiger sitting on a bench", image="https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png", mask="https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png", prompt_strength=0.8, num_inference_steps=25, refine=refiner, guidance_scale=7, negative_prompt="ugly, soft, blurry, out of focus, low quality, garish, distorted, disfigured", seed=42, ) for split in range(0, 10): split = split / 10.0 gen( f"sample.expert_ensemble_refiner.{split}.txt2img.png", prompt="A studio portrait photo of a cat", num_inference_steps=25, guidance_scale=7, refine="expert_ensemble_refiner", high_noise_frac=split, negative_prompt="ugly, soft, blurry, out of focus, low quality, garish, distorted, disfigured", seed=1000, width=1024, height=1024, ) gen( f"sample.refine.txt2img.png", prompt="A studio portrait photo of a cat", num_inference_steps=25, guidance_scale=7, refine="base_image_refiner", negative_prompt="ugly, soft, blurry, out of focus, low quality, garish, distorted, disfigured", seed=1000, width=1024, height=1024, ) gen( f"sample.refine.10.txt2img.png", prompt="A studio portrait photo of a cat", num_inference_steps=25, guidance_scale=7, refine="base_image_refiner", refine_steps=10, negative_prompt="ugly, soft, blurry, out of focus, low quality, garish, distorted, disfigured", seed=1000, width=1024, height=1024, ) gen( "samples.2.txt2img.png", prompt="A studio portrait photo of a cat", num_inference_steps=25, guidance_scale=7, negative_prompt="ugly, soft, blurry, out of focus, low quality, garish, distorted, disfigured", scheduler="KarrasDPM", num_outputs=2, seed=1000, width=1024, height=1024, ) for s in SCHEDULERS: gen( f"sample.{s}.txt2img.png", prompt="A studio portrait photo of a cat", num_inference_steps=25, guidance_scale=7, negative_prompt="ugly, soft, blurry, out of focus, low quality, garish, distorted, disfigured", scheduler=s, seed=1000, width=1024, height=1024, ) if __name__ == "__main__": main()