import spaces import gradio as gr import numpy as np import PIL.Image from PIL import Image import random from diffusers import ControlNetModel, StableDiffusionXLPipeline, AutoencoderKL import cv2 import torch from diffusers import ( DDIMScheduler, DPMSolverMultistepScheduler, EulerDiscreteScheduler, EulerAncestralDiscreteScheduler, HeunDiscreteScheduler, KDPM2DiscreteScheduler, KDPM2AncestralDiscreteScheduler, LMSDiscreteScheduler, UniPCMultistepScheduler, ) device = torch.device("cuda" if torch.cuda.is_available() else "cpu") #vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16) #pipe = StableDiffusionXLPipeline.from_pretrained( # #"yodayo-ai/clandestine-xl-1.0", # torch_dtype=torch.float16, # use_safetensors=True, # custom_pipeline="lpw_stable_diffusion_xl", # add_watermarker=False #, # #variant="fp16" #) pipe = StableDiffusionXLPipeline.from_single_file( #"https://huggingface.co/Laxhar/noob_sdxl_beta/noob_hercules4/fp16/checkpoint-e0_s10000.safetensors/checkpoint-e0_s10000.safetensors", "https://huggingface.co/bluepen5805/illustrious_pencil-XL/illustrious_pencil-XL-v1.2.1.safetensors", use_safetensors=True, torch_dtype=torch.float16, ) pipe.scheduler = EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config) pipe.to(device) MAX_SEED = np.iinfo(np.int32).max MAX_IMAGE_SIZE = 1216 @spaces.GPU def infer(prompt, negative_prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps, sampler_name): # サンプラーの設定 if sampler_name == "DDIM": pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config) elif sampler_name == "DPMSolverMultistep": pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config) elif sampler_name == "Euler": pipe.scheduler = EulerDiscreteScheduler.from_config(pipe.scheduler.config) elif sampler_name == "EulerAncestral": pipe.scheduler = EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config) elif sampler_name == "Heun": pipe.scheduler = HeunDiscreteScheduler.from_config(pipe.scheduler.config) elif sampler_name == "KDPM2": pipe.scheduler = KDPM2DiscreteScheduler.from_config(pipe.scheduler.config) elif sampler_name == "KDPM2Ancestral": pipe.scheduler = KDPM2AncestralDiscreteScheduler.from_config(pipe.scheduler.config) elif sampler_name == "LMS": pipe.scheduler = LMSDiscreteScheduler.from_config(pipe.scheduler.config) elif sampler_name == "UniPC": pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config) else: pipe.scheduler = EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config) if randomize_seed: seed = random.randint(0, MAX_SEED) generator = torch.Generator().manual_seed(seed) output_image = pipe( prompt=prompt, negative_prompt=negative_prompt, guidance_scale=guidance_scale, num_inference_steps=num_inference_steps, width=width, height=height, generator=generator ).images[0] return output_image css = """ #col-container { margin: 0 auto; max-width: 520px; } """ with gr.Blocks(css=css) as demo: with gr.Column(elem_id="col-container"): gr.Markdown(""" Text-to-Image Demo using [illustrious_pencil-XL](https://huggingface.co/bluepen5805/illustrious_pencil-XL) """) #yodayo-ai/clandestine-xl-1.0  #yodayo-ai/holodayo-xl-2.1 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) result = gr.Image(label="Result", show_label=False) with gr.Accordion("Advanced Settings", open=False): negative_prompt = gr.Text( label="Negative prompt", max_lines=1, placeholder="Enter a negative prompt", value="nsfw, (low quality, worst quality:1.2), very displeasing, 3d, watermark, signature, ugly, poorly drawn" ) seed = gr.Slider( label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0, ) sampler_name = gr.Dropdown( label="Sampler", choices=["DDIM", "DPMSolverMultistep", "Euler", "EulerAncestral", "Heun", "KDPM2", "KDPM2Ancestral", "LMS", "UniPC"], value="EulerAncestral", ) randomize_seed = gr.Checkbox(label="Randomize seed", value=True) with gr.Row(): width = gr.Slider( label="Width", minimum=256, maximum=MAX_IMAGE_SIZE, step=32, value=1024,#832, ) height = gr.Slider( label="Height", minimum=256, maximum=MAX_IMAGE_SIZE, step=32, value=1024,#1216, ) with gr.Row(): guidance_scale = gr.Slider( label="Guidance scale", minimum=0.0, maximum=20.0, step=0.1, value=4, ) num_inference_steps = gr.Slider( label="Number of inference steps", minimum=1, maximum=28, step=1, value=28, ) run_button.click(#lambda x: None, inputs=None, outputs=result).then( fn=infer, inputs=[prompt, negative_prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps, sampler_name], outputs=[result] ) demo.queue().launch()