import time import gradio as gr import torch from PIL import Image from diffusers.image_processor import VaeImageProcessor from diffusers.schedulers import ( DDPMScheduler, DDIMScheduler, EulerAncestralDiscreteScheduler, DPMSolverMultistepScheduler, FlowMatchEulerDiscreteScheduler, ) from diffusers.utils.torch_utils import randn_tensor SCHEDULERS = { "DDPMScheduler": DDPMScheduler, "DDIMScheduler": DDIMScheduler, "EulerAncestralDiscreteScheduler": EulerAncestralDiscreteScheduler, "DPMSolverMultistepScheduler": DPMSolverMultistepScheduler, "FlowMatchEulerDiscreteScheduler": FlowMatchEulerDiscreteScheduler, } def inference( image_pil: Image.Image, scheduler_name: str, per_step_time: int = 1, n_total_steps: int = 1000, ): scheduler = SCHEDULERS[scheduler_name]() scheduler.set_timesteps(num_inference_steps=n_total_steps) timesteps = torch.flip(scheduler.timesteps, dims=[0]) image_processor = VaeImageProcessor() image_tensor = image_processor.preprocess(image_pil) # Fix seed generator = torch.Generator().manual_seed(1117) noise = randn_tensor(image_tensor.shape, generator) for i, t in enumerate(timesteps): noised_image_tensor = scheduler.add_noise(image_tensor, noise, timesteps=t) noised_image_pil = image_processor.postprocess(noised_image_tensor)[0] time.sleep(per_step_time) # language=HTML info_html = f"""