File size: 5,705 Bytes
392b88f
f4ff201
7e9a760
ceb106c
54ad393
 
3fec1fb
0428186
f4ff201
1d60574
6fed0f7
0a2c532
 
7e19ced
 
ba9d526
 
f483809
 
aa83296
ba9d526
 
6fed0f7
fae7b1e
 
11df3d4
7e19ced
d2e2903
f483809
 
aa83296
ba9d526
 
 
ae9efe4
3fec1fb
 
70e3d12
3fec1fb
 
 
 
70e3d12
3fec1fb
 
 
2839abc
7e9a760
 
548031b
 
 
 
 
1291143
dba1359
ea3b1d6
 
7e9a760
ae9efe4
45bbd2a
3fec1fb
6fed0f7
 
a02443f
6fed0f7
ca74145
 
 
 
 
 
 
 
 
 
75f237b
2939163
 
5626083
b0d809e
2939163
b0d809e
5626083
 
 
 
 
 
 
c08f255
5626083
c08f255
5626083
c08f255
5626083
 
 
 
 
3fec1fb
0a14984
3fec1fb
f1ebf81
70e3d12
548031b
f1ebf81
 
7e9a760
2839abc
95bd184
 
75f237b
 
 
7e9a760
bb307d3
63aa355
2939163
 
63aa355
6fed0f7
 
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
from diffusers import StableDiffusionXLPipeline, AutoencoderKL
import torch
import random
import os
#from controlnet_aux import OpenposeDetector
#from diffusers.utils import load_image
import gradio as gr
import gc

model_id = int(os.getenv("Model"))

#stable-diffusion-xl-base-1.0  0 - base model
#Colossus_Project_XL           1 - better people
#Sevenof9_v3_sdxl              2 - nsfw
#JuggernautXL_version5         3 - better faces
#RealVisXL_V2.0                4 - realistic
#AlbedoBaseXL_v11              5 - realistic
#BetterThanWords_v20_sdxl      6 - nsfw
#AcornIsSpinning_acornXLV1     7 - nsfw
#PyrosNSFWSDXL_v04.            8 - nsfw
#AltXL_v60                     9 - realistic
#SDXXXL_v10                   10 - nsfw

model_url_list = ["stabilityai/stable-diffusion-xl-base-1.0/blob/main/sd_xl_base_1.0.safetensors",
                 "Krebzonide/Colossus_Project_XL/blob/main/colossusProjectXLSFW_v202BakedVAE.safetensors",
                 "Krebzonide/Sevenof9_v3_sdxl/blob/main/nsfwSevenof9V3_nsfwSevenof9V3.safetensors",
                 "Krebzonide/JuggernautXL_version5/blob/main/juggernautXL_version5.safetensors",
                 "SG161222/RealVisXL_V2.0/blob/main/RealVisXL_V2.0.safetensors",
                 "Krebzonide/AlbedoBaseXL_v11/blob/main/albedobaseXL_v11.safetensors",
                 "Krebzonide/BetterThanWords_v20_sdxl/blob/main/betterThanWords_v20.safetensors",
                 "Krebzonide/AcornIsSpinning_acornXLV1/blob/main/acornIsSpinning_acornxlV1.safetensors",
                 "Krebzonide/PyrosNSFWSDXL_v04/blob/main/pyrosNSFWSDXL_v04.safetensors",
                 "Krebzonide/AltXL_v60/blob/main/altxl_v60.safetensors",
                 "Krebzonide/SDXXXL_v10/blob/main/sdxxxl_v10.safetensors"]

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;
}
"""

def generate(prompt, neg_prompt, samp_steps, guide_scale, batch_size, seed, height, width, progress=gr.Progress(track_tqdm=True)):
    if seed < 0:
        seed = random.randint(1,999999)
    images = pipe(
        prompt,
        negative_prompt=neg_prompt,
        num_inference_steps=samp_steps,
        guidance_scale=guide_scale,
        #cross_attention_kwargs={"scale": lora_scale},
        num_images_per_prompt=batch_size,
        height=height,
        width=width,
        generator=torch.manual_seed(seed),
    ).images
    return [(img, f"Image {i+1}") for i, img in enumerate(images)]
        
def set_base_model(base_model_id):
    vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16)
    global model_url_list
    model_url = "https://huggingface.co/" + model_url_list[base_model_id]
    pipe = StableDiffusionXLPipeline.from_single_file(
        model_url,
        torch_dtype = torch.float16,
        variant = "fp16",
        vae = vae,
        use_safetensors = True,
        use_auth_token="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"
    )
    pipe.to("cuda")
    return pipe

def update_pixel_ratio(num1, num2):
    return [round(num1*num2/1048576,3), num1-(num1%8)]

def round_to_8(num):
    return 

examples = [
    ['A serious capybara at work, wearing a suit',
    'low quality'],
    ['a graffiti of a robot serving meals to people',
    'low quality'],
    ['photo of a small cozy modern house in red woods on a mountain, solar panels, garage, driveway, great view, sunshine',
    'red house'],
    ['cinematic photo of a woman sitting at a cafe, 35mm photograph, film, bokeh, professional, 4k, highly detailede',
    'drawing, painting, crayon, sketch, graphite, impressionist, noisy, blurry, soft, deformed, ugly'],
    ['analog film photo of old woman on the streets of london, faded film, desaturated, 35mm photo, grainy, vignette, vintage, Kodachrome, Lomography, stained, highly detailed, found footage',
    'painting, drawing, illustration, glitch, deformed, mutated, cross-eyed, ugly, disfigured'],
    ['nude photo of a 20 year old model in the back seat of a car, detailed face',
    'big boobs'],
    ['nude photo of a 20 year old man, penis and testicles, dick and balls, erection',
    'woman']
]

with gr.Blocks(css=css) as demo:
    with gr.Column():
        prompt = gr.Textbox(label="Prompt")
        negative_prompt = gr.Textbox(label="Negative Prompt")
        submit_btn = gr.Button("Generate", elem_classes="btn-green")
        with gr.Row():
            samp_steps = gr.Slider(1, 50, value=20, step=1, label="Sampling steps")
            guide_scale = gr.Slider(1, 6, value=3, step=0.5, label="Guidance scale")
            batch_size = gr.Slider(1, 6, value=1, step=1, label="Batch size")
        with gr.Row():
            height = gr.Slider(label="Height", value=1024, minimum=1, maximum=4096, step=32)
            width = gr.Slider(label="Width", value=1024, minimum=1, maximum=4096, step=32)
        with gr.Row():
            pixels = gr.Number(label="Pixel Ratio", value=1, interactive=False)
            seed = gr.Number(label="Seed", value=-1, minimum=-1, precision=0)
        gallery = gr.Gallery(label="Generated images", height=800)
        ex = gr.Examples(examples=examples, inputs=[prompt, negative_prompt])
    submit_btn.click(generate, [prompt, negative_prompt, samp_steps, guide_scale, batch_size, seed, height, width], [gallery], queue=True)
    height.release(update_pixel_ratio, [height, width], [pixels, height], queue=False)
    width.release(update_pixel_ratio, [width, height], [pixels, width], queue=False)

pipe = set_base_model(model_id)
demo.launch(debug=True)