File size: 6,245 Bytes
24a6868 ccacd4d ceadb77 dc704d6 24a6868 cb5ecc3 11453ec 24a6868 6095378 ef87d27 ef6e36a ef87d27 242e53a ef6e36a ef87d27 242e53a 32f63e2 ef6e36a ef87d27 32f63e2 ef6e36a 7de4c3e c7f68b4 0563fad 24a6868 35915ac b0abbc2 ef6e36a f4e97ee 0563fad 35915ac 24a6868 f531783 4bc2ead f2280ac 35e9dd4 76ba892 b0abbc2 f2280ac b0abbc2 f97103a b0abbc2 24a6868 d62c968 35915ac 24a6868 c6a4957 e9947e2 7d5447f ebc69eb 0563fad 24a6868 0563fad 24a6868 63ddf6d c7f68b4 ffaf784 24a6868 3389734 00acfc9 7de4c3e 6095378 00acfc9 44dca96 00acfc9 6095378 35915ac 6095378 35e9dd4 6095378 212b184 e9947e2 6095378 3389734 24a6868 6095378 e7066e9 24a6868 35915ac 3389734 24a6868 |
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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# Imports
import gradio as gr
import random
import spaces
import torch
import uuid
import os
from diffusers import StableDiffusionXLPipeline, ControlNetModel
from diffusers.models import AutoencoderKL
# Pre-Initialize
DEVICE = "auto"
if DEVICE == "auto":
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
print(f"[SYSTEM] | Using {DEVICE} type compute device.")
# Variables
MAX_SEED = 9007199254740991
DEFAULT_INPUT = ""
DEFAULT_NEGATIVE_INPUT = "EasyNegative, (bad), [abstract], deformed, distorted, disfigured, disconnected, disgusting, displeasing, mutation, mutated, blur, blurry, fewer, extra, missing, unfinished, scribble, lowres, low quality, jpeg artifacts, chromatic aberration, extra digits, artistic error, text, error, username, scan, signature, watermark, ugly, amputation, limb, limbs, leg, legs, foot, feet, toe, toes, arm, arms, hand, hands, finger, fingers, head, heads, exposed, explicit, porn, nude, nudity, naked, nsfw"
DEFAULT_MODEL = "Default"
DEFAULT_HEIGHT = 1024
DEFAULT_WIDTH = 1024
css = '''
.gradio-container{max-width: 560px !important}
h1{text-align:center}
footer {
visibility: hidden
}
'''
vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16)
controlnet = ControlNetModel.from_pretrained("MakiPan/controlnet-encoded-hands-130k", torch_dtype=torch.float16)
repo_default = StableDiffusionXLPipeline.from_pretrained("sd-community/sdxl-flash", vae=vae, controlnet=controlnet, torch_dtype=torch.float16, use_safetensors=True, add_watermarker=False)
repo_default.load_lora_weights("ehristoforu/dalle-3-xl-v2", adapter_name="base")
repo_default.load_lora_weights("Corcelio/mobius", adapter_name="base2")
repo_default.set_adapters(["base", "base2"], adapter_weights=[0.7, 0.7])
repo_pixel = StableDiffusionXLPipeline.from_pretrained("sd-community/sdxl-flash", vae=vae, controlnet=controlnet, torch_dtype=torch.float16, use_safetensors=True, add_watermarker=False)
repo_pixel.load_lora_weights("artificialguybr/PixelArtRedmond", adapter_name="base")
repo_pixel.load_lora_weights("nerijs/pixel-art-xl", adapter_name="base2")
repo_pixel.set_adapters(["base", "base2"], adapter_weights=[1, 1])
repo_customs = {
"Default": repo_default,
"Realistic": StableDiffusionXLPipeline.from_pretrained("stablediffusionapi/NightVision_XL", vae=vae, controlnet=controlnet, torch_dtype=torch.float16, use_safetensors=False, add_watermarker=False),
"Anime": StableDiffusionXLPipeline.from_pretrained("cagliostrolab/animagine-xl-3.1", vae=vae, controlnet=controlnet, torch_dtype=torch.float16, use_safetensors=True, add_watermarker=False),
"Pixel": repo_pixel,
}
# Functions
def save_image(img, seed):
name = f"{seed}-{uuid.uuid4()}.png"
img.save(name)
return name
def get_seed(seed):
seed = seed.strip()
if seed.isdigit():
return int(seed)
else:
return random.randint(0, MAX_SEED)
@spaces.GPU(duration=30)
def generate(input=DEFAULT_INPUT, filter_input="", negative_input=DEFAULT_NEGATIVE_INPUT, model=DEFAULT_MODEL, height=DEFAULT_HEIGHT, width=DEFAULT_WIDTH, steps=1, guidance=0, number=1, seed=None):
repo = repo_customs[model or "Default"]
filter_input = filter_input or ""
negative_input = negative_input or DEFAULT_NEGATIVE_INPUT
seed = get_seed(seed)
print(input, filter_input, negative_input, model, height, width, steps, guidance, number, seed)
if model == "Realistic":
steps = (not steps or steps < 0 and 30) or steps
guidance = (not guidance or guidance < 0 and 7) or guidance
elif model == "Anime":
steps = (not steps or steps < 0 and 16) or steps
guidance = (not guidance or guidance < 0 and 7) or guidance
elif model == "Pixel":
steps = (not steps or steps < 0 and 8) or steps
guidance = (not guidance or guidance < 0 and 1.5) or guidance
else:
steps = (not steps or steps < 0 and 16) or steps
guidance = (not guidance or guidance < 0 and 3) or guidance
repo.to(DEVICE)
parameters = {
"prompt": input,
"negative_prompt": filter_input + negative_input,
"height": height,
"width": width,
"num_inference_steps": steps,
"guidance_scale": guidance,
"num_images_per_prompt": number,
"controlnet_conditioning_scale": 1,
"cross_attention_kwargs": {"scale": 1},
"generator": torch.Generator().manual_seed(seed),
"use_resolution_binning": True,
"output_type":"pil",
}
images = repo(**parameters).images
image_paths = [save_image(img, seed) for img in images]
print(image_paths)
return image_paths
def cloud():
print("[CLOUD] | Space maintained.")
# Initialize
with gr.Blocks(css=css) as main:
with gr.Column():
gr.Markdown("🪄 Generate high quality images on all styles between 10 to 20 seconds.")
with gr.Column():
input = gr.Textbox(lines=1, value=DEFAULT_INPUT, label="Input")
filter_input = gr.Textbox(lines=1, value="", label="Input Filter")
negative_input = gr.Textbox(lines=1, value=DEFAULT_NEGATIVE_INPUT, label="Input Negative")
model = gr.Dropdown(label="Models", choices=["Default", "Realistic", "Anime", "Pixel"], value="Default")
height = gr.Slider(minimum=1, maximum=2160, step=1, value=DEFAULT_HEIGHT, label="Height")
width = gr.Slider(minimum=1, maximum=2160, step=1, value=DEFAULT_WIDTH, label="Width")
steps = gr.Slider(minimum=-1, maximum=100, step=1, value=-1, label="Steps")
guidance = gr.Slider(minimum=-1, maximum=100, step=0.001, value=-1, label = "Guidance")
number = gr.Slider(minimum=1, maximum=4, step=1, value=1, label="Number")
seed = gr.Textbox(lines=1, value="", label="Seed (Blank for random)")
submit = gr.Button("▶")
maintain = gr.Button("☁️")
with gr.Column():
images = gr.Gallery(columns=1, label="Image")
submit.click(generate, inputs=[input, filter_input, negative_input, model, height, width, steps, guidance, number, seed], outputs=[images], queue=False)
maintain.click(cloud, inputs=[], outputs=[], queue=False)
main.launch(show_api=True) |