Spaces:
Runtime error
Runtime error
| import spaces | |
| import random | |
| import gradio as gr | |
| import numpy as np | |
| import torch | |
| from PIL import Image | |
| def setup_seed(seed): | |
| random.seed(seed) | |
| np.random.seed(seed) | |
| torch.manual_seed(seed) | |
| torch.cuda.manual_seed_all(seed) | |
| torch.backends.cudnn.deterministic = True | |
| if torch.cuda.is_available(): | |
| device = "cuda:0" | |
| else: | |
| device = "cpu" | |
| ### PeRFlow-T2I | |
| from diffusers import StableDiffusionXLPipeline | |
| pipe = StableDiffusionXLPipeline.from_pretrained("hansyan/perflow-sdxl-dreamshaper", torch_dtype=torch.float16, use_safetensors=True, variant="v0-fix") | |
| from src.scheduler_perflow import PeRFlowScheduler | |
| pipe.scheduler = PeRFlowScheduler.from_config(pipe.scheduler.config, prediction_type="ddim_eps", num_time_windows=4) | |
| pipe.to("cuda:0", torch.float16) | |
| # pipe_t2i = None | |
| ### gradio | |
| def generate(text, num_inference_steps, cfg_scale, seed): | |
| setup_seed(int(seed)) | |
| num_inference_steps = int(num_inference_steps) | |
| cfg_scale = float(cfg_scale) | |
| prompt_prefix = "photorealistic, uhd, high resolution, high quality, highly detailed; " | |
| neg_prompt = "distorted, blur, low-quality, haze, out of focus" | |
| text = prompt_prefix + text | |
| samples = pipe( | |
| prompt = [text], | |
| negative_prompt = [neg_prompt], | |
| height = 1024, | |
| width = 1024, | |
| num_inference_steps = num_inference_steps, | |
| guidance_scale = cfg_scale, | |
| output_type = 'pt', | |
| ).images | |
| samples = samples.squeeze(0).permute(1, 2, 0).cpu().numpy()*255. | |
| samples = samples.astype(np.uint8) | |
| samples = Image.fromarray(samples[:, :, :3]) | |
| return samples | |
| # layout | |
| css = """ | |
| h1 { | |
| text-align: center; | |
| display:block; | |
| } | |
| h2 { | |
| text-align: center; | |
| display:block; | |
| } | |
| h3 { | |
| text-align: center; | |
| display:block; | |
| } | |
| .gradio-container { | |
| max-width: 768px !important; | |
| } | |
| """ | |
| with gr.Blocks(title="PeRFlow-SDXL", css=css) as interface: | |
| gr.Markdown( | |
| """ | |
| # PeRFlow-SDXL | |
| GitHub: [https://github.com/magic-research/piecewise-rectified-flow](https://github.com/magic-research/piecewise-rectified-flow) <br/> | |
| Models: [https://huggingface.co/hansyan/perflow-sdxl-dreamshaper](https://huggingface.co/hansyan/perflow-sdxl-dreamshaper) | |
| <br/> | |
| """ | |
| ) | |
| with gr.Column(): | |
| text = gr.Textbox( | |
| label="Input Prompt", | |
| value="masterpiece, A closeup face photo of girl, wearing a rain coat, in the street, heavy rain, bokeh" | |
| ) | |
| with gr.Row(): | |
| num_inference_steps = gr.Dropdown(label='Num Inference Steps',choices=[4,5,6,7,8], value=6, interactive=True) | |
| cfg_scale = gr.Dropdown(label='CFG scale',choices=[1.5, 2.0, 2.5], value=2.0, interactive=True) | |
| seed = gr.Textbox(label="Random Seed", value=42) | |
| submit = gr.Button(scale=1, variant='primary') | |
| # with gr.Column(): | |
| # with gr.Row(): | |
| output_image = gr.Image(label='Generated Image') | |
| gr.Markdown( | |
| """ | |
| Here are some examples provided: | |
| - “masterpiece, A closeup face photo of girl, wearing a rain coat, in the street, heavy rain, bokeh” | |
| - “RAW photo, a handsome man, wearing a black coat, outside, closeup face” | |
| - “RAW photo, a red luxury car, studio light” | |
| - “masterpiece, A beautiful cat bask in the sun” | |
| """ | |
| ) | |
| # activate | |
| text.submit( | |
| fn=generate, | |
| inputs=[text, num_inference_steps, cfg_scale, seed], | |
| outputs=[output_image], | |
| ) | |
| seed.submit( | |
| fn=generate, | |
| inputs=[text, num_inference_steps, cfg_scale, seed], | |
| outputs=[output_image], | |
| ) | |
| submit.click(fn=generate, | |
| inputs=[text, num_inference_steps, cfg_scale, seed], | |
| outputs=[output_image], | |
| ) | |
| if __name__ == '__main__': | |
| interface.queue(max_size=10) | |
| interface.launch() | |