File size: 3,157 Bytes
e92fe66
eac71e8
e92fe66
 
 
eac71e8
e92fe66
 
eac71e8
e92fe66
eac71e8
 
 
 
 
 
e92fe66
 
eac71e8
 
 
e92fe66
 
eac71e8
e92fe66
 
 
 
 
 
eac71e8
e92fe66
 
 
 
 
eac71e8
 
 
e92fe66
 
 
 
 
eac71e8
e92fe66
 
 
 
 
eac71e8
 
 
 
e92fe66
 
 
 
 
 
 
 
 
eac71e8
e92fe66
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
eac71e8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e92fe66
eac71e8
e92fe66
eac71e8
 
e92fe66
 
eac71e8
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
import gradio as gr
import spaces
import numpy as np
import random
import torch
from diffusers import StableDiffusionXLPipeline

device = "cuda" if torch.cuda.is_available() else "cpu"
dtype = torch.float16

repo = "stabilityai/stable-diffusion-xl-base-1.0"
pipe = StableDiffusionXLPipeline.from_pretrained(
    repo,
    torch_dtype=dtype,
    use_safetensors=True
).to(device)

MAX_SEED = np.iinfo(np.int32).max

@spaces.GPU
def infer(prompt, negative_prompt, seed, randomize_seed, guidance_scale, num_inference_steps, progress=gr.Progress(track_tqdm=True)):
    if randomize_seed:
        seed = random.randint(0, MAX_SEED)
    generator = torch.Generator(device=device).manual_seed(seed)

    image = pipe(
        prompt=prompt,
        negative_prompt=negative_prompt,
        guidance_scale=guidance_scale,
        num_inference_steps=num_inference_steps,
        generator=generator
    ).images[0]

    return image, seed

examples = [
    "A cozy Scandinavian living room, soft light, natural wood, white tones",
    "A futuristic cityscape at night with flying cars",
    "A magical forest with glowing mushrooms and fairies"
]

css = """
#col-container {
    margin: 0 auto;
    max-width: 580px;
}
"""

with gr.Blocks(css=css) as demo:
    with gr.Column(elem_id="col-container"):
        gr.Markdown(f"""
        # Generate images [Stable Diffusion XL](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0)
        Generate high-quality images with Stability AI's flagship SDXL base model.
        """)

        with gr.Row():
            prompt = gr.Text(
                label="Prompt",
                show_label=False,
                max_lines=1,
                placeholder="Enter your prompt",
                container=False,
            )
            run_button = gr.Button("Run", scale=0)

        result = gr.Image(label="Result", show_label=False)

        with gr.Accordion("Advanced Settings", open=False):
            negative_prompt = gr.Text(
                label="Negative prompt",
                max_lines=1,
                placeholder="Enter a negative prompt",
            )
            seed = gr.Slider(
                label="Seed",
                minimum=0,
                maximum=MAX_SEED,
                step=1,
                value=0,
            )
            randomize_seed = gr.Checkbox(label="Randomize seed", value=True)

            guidance_scale = gr.Slider(
                label="Guidance scale",
                minimum=0.0,
                maximum=20.0,
                step=0.1,
                value=7.5,
            )

            num_inference_steps = gr.Slider(
                label="Number of inference steps",
                minimum=1,
                maximum=50,
                step=1,
                value=30,
            )

        gr.Examples(
            examples=examples,
            inputs=[prompt]
        )

    gr.on(
        triggers=[run_button.click, prompt.submit, negative_prompt.submit],
        fn=infer,
        inputs=[prompt, negative_prompt, seed, randomize_seed, guidance_scale, num_inference_steps],
        outputs=[result, seed]
    )

demo.launch()