Playground-v1.0 / app.py
Yjiggfghhjnjj
Update app.py
371d6bc verified
raw
history blame contribute delete
No virus
7.43 kB
import gradio as gr
from diffusers import StableDiffusionXLPipeline, UNet2DConditionModel, EulerDiscreteScheduler, LCMScheduler, AutoencoderKL,DiffusionPipeline
import torch
import numpy as np
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
import spaces
import os
import random
import uuid
def save_image(img):
unique_name = str(uuid.uuid4()) + ".png"
img.save(unique_name)
return unique_name
def randomize_seed_fn(seed: int, randomize_seed: bool) -> int:
if randomize_seed:
seed = random.randint(0, MAX_SEED)
return seed
MAX_SEED = np.iinfo(np.int32).max
vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16)
### RealVisXL V3 ###
RealVisXLv3_pipe = DiffusionPipeline.from_pretrained(
"SG161222/RealVisXL_V3.0",
torch_dtype=torch.float16,
use_safetensors=True,
add_watermarker=False,
variant="fp16"
)
RealVisXLv3_pipe.to("cuda")
### RealVisXL V4 ###
RealVisXLv4_pipe = DiffusionPipeline.from_pretrained(
"SG161222/RealVisXL_V4.0",
torch_dtype=torch.float16,
use_safetensors=True,
add_watermarker=False,
variant="fp16"
)
RealVisXLv4_pipe.to("cuda")
## playground V2.5##
playground_pipe = DiffusionPipeline.from_pretrained(
"playgroundai/playground-v2.5-1024px-aesthetic",
torch_dtype=torch.float16,
use_safetensors=True,
add_watermarker=False,
variant="fp16"
)
playground_pipe.to("cuda")
@spaces.GPU
def run_comparison(prompt: str,
negative_prompt: str = "",
use_negative_prompt: bool = False,
num_inference_steps: int = 30,
num_images_per_prompt: int = 2,
seed: int = 0,
width: int = 1024,
height: int = 1024,
guidance_scale: float = 3,
randomize_seed: bool = False,
progress=gr.Progress(track_tqdm=True),
):
seed = int(randomize_seed_fn(seed, randomize_seed))
if not use_negative_prompt:
negative_prompt = ""
image_r3 = RealVisXLv3_pipe(prompt=prompt,
negative_prompt=negative_prompt,
width=width,
height=height,
guidance_scale=guidance_scale,
num_inference_steps=num_inference_steps,
num_images_per_prompt=num_images_per_prompt,
cross_attention_kwargs={"scale": 0.65},
output_type="pil",
).images
image_paths_r3 = [save_image(img) for img in image_r3]
image_r4 = RealVisXLv4_pipe(prompt=prompt,
negative_prompt=negative_prompt,
width=width,
height=height,
guidance_scale=guidance_scale,
num_inference_steps=num_inference_steps,
num_images_per_prompt=num_images_per_prompt,
cross_attention_kwargs={"scale": 0.65},
output_type="pil",
).images
image_paths_r4 = [save_image(img) for img in image_r4]
image_r5 = playground_pipe(prompt=prompt,
negative_prompt=negative_prompt,
width=width,
height=height,
guidance_scale=guidance_scale,
num_inference_steps=num_inference_steps,
num_images_per_prompt=num_images_per_prompt,
cross_attention_kwargs={"scale": 0.65},
output_type="pil",
).images
image_paths_r5 = [save_image(img) for img in image_r5]
return image_paths_r3, image_paths_r4,image_paths_r5, seed
examples = ["A dignified beaver wearing glasses, a vest, and colorful neck tie.",
"The spirit of a tamagotchi wandering in the city of Barcelona",
"an ornate, high-backed mahogany chair with a red cushion",
"a sketch of a camel next to a stream",
"a delicate porcelain teacup sits on a saucer, its surface adorned with intricate blue patterns",
"a baby swan grafitti",
"A bald eagle made of chocolate powder, mango, and whipped cream"
]
with gr.Blocks() as demo:
gr.Markdown("## One step SDXL comparison 🦶")
gr.Markdown('Compare SDXL variants and distillations able to generate images in a single diffusion step')
prompt = gr.Textbox(label="Prompt")
run = gr.Button("Run")
with gr.Accordion("Advanced options", open=False):
use_negative_prompt = gr.Checkbox(label="Use negative prompt", value=True)
negative_prompt = gr.Text(
label="Negative prompt",
lines=4,
max_lines=6,
value="""(deformed, distorted, disfigured:1.3), poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, (mutated hands and fingers:1.4), disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation, (NSFW:1.25)""",
placeholder="Enter a negative prompt",
visible=True,
)
with gr.Row():
num_inference_steps = gr.Slider(
label="Steps",
minimum=10,
maximum=60,
step=1,
value=30,
)
with gr.Row():
num_images_per_prompt = gr.Slider(
label="Images",
minimum=1,
maximum=5,
step=1,
value=2,
)
seed = gr.Slider(
label="Seed",
minimum=0,
maximum=MAX_SEED,
step=1,
value=0,
visible=True
)
randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
with gr.Row(visible=True):
width = gr.Slider(
label="Width",
minimum=512,
maximum=2048,
step=8,
value=1024,
)
height = gr.Slider(
label="Height",
minimum=512,
maximum=2048,
step=8,
value=1024,
)
with gr.Row():
guidance_scale = gr.Slider(
label="Guidance Scale",
minimum=0.1,
maximum=20.0,
step=0.1,
value=6,
)
with gr.Row():
with gr.Column():
image_r3 = gr.Gallery(label="RealVisXL V3",columns=1, preview=True,)
gr.Markdown("## [RealVisXL V3](https://huggingface.co)")
with gr.Column():
image_r4 = gr.Gallery(label="RealVisXL V4",columns=1, preview=True,)
gr.Markdown("## [RealVisXL V4](https://huggingface.co)")
with gr.Column():
image_r5 = gr.Gallery(label="Playground v2.5",columns=1, preview=True,)
gr.Markdown("## [Playground v2.5](https://huggingface.co)")
image_outputs = [image_r3, image_r4, image_r5]
gr.on(
triggers=[prompt.submit, run.click],
fn=run_comparison,
inputs=[
prompt,
negative_prompt,
use_negative_prompt,
num_inference_steps,
num_images_per_prompt,
seed,
width,
height,
guidance_scale,
randomize_seed,
],
outputs=image_outputs
)
use_negative_prompt.change(
fn=lambda x: gr.update(visible=x),
inputs=use_negative_prompt,
outputs=negative_prompt,
api_name=False,
)
gr.Examples(
examples=examples,
fn=run_comparison,
inputs=prompt,
outputs=image_outputs,
cache_examples=False,
run_on_click=True
)
if __name__ == "__main__":
demo.queue(max_size=20).launch(show_api=False, debug=False)