Spaces:
Sleeping
Sleeping
File size: 3,517 Bytes
1fee954 e141ac9 1fee954 e141ac9 1fee954 6de0843 e141ac9 e387ae3 1fee954 b4bca9d 1fee954 e141ac9 1fee954 e89bce5 1fee954 e89bce5 6de0843 1fee954 e89bce5 1fee954 8e5ae95 1fee954 e89bce5 1fee954 e89bce5 1fee954 508feab 1fee954 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
from diffusers import EulerAncestralDiscreteScheduler, StableDiffusionXLPipeline, StableDiffusionXLImg2ImgPipeline
from PIL import Image
import gradio as gr
import random
import torch
import math
import spaces
device = "cuda" if torch.cuda.is_available() else "cpu"
negative_prompt = "deformed iris, deformed pupils, semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime, text, close up, cropped, out of frame, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck"
css = """
.btn-green {
background-image: linear-gradient(to bottom right, #6dd178, #00a613) !important;
border-color: #22c55e !important;
color: #166534 !important;
}
.btn-green:hover {
background-image: linear-gradient(to bottom right, #6dd178, #6dd178) !important;
}
"""
@spaces.GPU(duration=60, enable_queue=True)
def generate(prompt, samp_steps, seed, progress=gr.Progress(track_tqdm=True)):
print("prompt = ", prompt)
turbo_steps=5 # use sweet spot
if seed < 0:
seed = random.randint(1,999999)
image = txt2img(
prompt=prompt,
negative_prompt=negative_prompt,
num_inference_steps=turbo_steps,
guidance_scale=2,
seed=seed,
).images[0]
upscaled_image = image.resize((1024,1024), 1)
final_image = img2img(
prompt=prompt,
negative_prompt=negative_prompt,
image=upscaled_image,
num_inference_steps=max(1,samp_steps-turbo_steps*2), # always discount lightning at 2x efficiency
guidance_scale=5,
strength=1,
seed=seed,
).images[0]
return [final_image], seed
def set_base_models():
txt2img = StableDiffusionXLPipeline.from_pretrained(
"SG161222/RealVisXL_V5.0_Lightning",
torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
use_safetensors=True,
add_watermarker=False,
).to(device)
txt2img.scheduler = EulerAncestralDiscreteScheduler.from_config(txt2img.scheduler.config)
img2img = StableDiffusionXLImg2ImgPipeline.from_pretrained(
"SG161222/RealVisXL_V5.0",
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32,
use_safetensors=True,
add_watermarker=False,
).to(device)
img2img.scheduler = EulerAncestralDiscreteScheduler.from_config(img2img.scheduler.config)
return txt2img, img2img
with gr.Blocks(css=css) as demo:
with gr.Column():
prompt = gr.Textbox(label="Prompt for RealVisXL_V5")
submit_btn = gr.Button("Generate", elem_classes="btn-green")
with gr.Row():
turbo_steps = gr.Slider(5, 5, value=5, step=1, label="Turbo steps (fixed at 5)")
sampling_steps = gr.Slider(15, 50, value=25, step=1, label="Effective steps")
seed = gr.Number(label="Seed", value=-1, minimum=-1, precision=0)
lastSeed = gr.Number(label="Last Seed", value=-1, interactive=False)
gallery = gr.Gallery(show_label=False, preview=True, container=False, height=1100)
submit_btn.click(generate, [prompt, sampling_steps, seed], [gallery, lastSeed], queue=True)
txt2img, img2img = set_base_models()
demo.launch(debug=True, share=True)
|