Jekyll2000 commited on
Commit
6ff4549
·
verified ·
1 Parent(s): 2882d4d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +118 -161
app.py CHANGED
@@ -1,107 +1,70 @@
1
- import os
2
- import random
3
- import uuid
4
-
5
  import gradio as gr
6
  import numpy as np
7
- from PIL import Image
8
- import spaces
9
  import torch
10
- from diffusers import StableDiffusionXLPipeline, EulerAncestralDiscreteScheduler
11
-
12
- DESCRIPTION = """
13
- # DALL•E 3 Image-Generation
14
- """
15
 
16
- def save_image(img):
17
- unique_name = str(uuid.uuid4()) + ".png"
18
- img.save(unique_name)
19
- return unique_name
20
-
21
- def randomize_seed_fn(seed: int, randomize_seed: bool) -> int:
22
- if randomize_seed:
23
- seed = random.randint(0, MAX_SEED)
24
- return seed
25
-
26
- MAX_SEED = np.iinfo(np.int32).max
27
 
28
- if not torch.cuda.is_available():
29
- DESCRIPTION += "\n<p>Running on CPU 🥶 This demo may not work on CPU.</p>"
 
 
 
 
 
 
30
 
31
  MAX_SEED = np.iinfo(np.int32).max
 
32
 
33
- USE_TORCH_COMPILE = 0
34
- ENABLE_CPU_OFFLOAD = 0
35
-
36
-
37
- if torch.cuda.is_available():
38
- pipe = StableDiffusionXLPipeline.from_pretrained(
39
- "fluently/Fluently-XL-Final",
40
- torch_dtype=torch.float16,
41
- use_safetensors=True,
42
- )
43
- pipe.scheduler = EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config)
44
-
45
-
46
- pipe.load_lora_weights("ehristoforu/dalle-3-xl-v2", weight_name="dalle-3-xl-lora-v2.safetensors", adapter_name="dalle")
47
- pipe.set_adapters("dalle")
48
 
49
- pipe.to("cuda")
 
 
 
50
 
 
 
 
 
 
 
 
 
 
51
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
 
53
- @spaces.GPU(enable_queue=True)
54
- def generate(
55
- prompt: str,
56
- negative_prompt: str = "",
57
- use_negative_prompt: bool = False,
58
- seed: int = 0,
59
- width: int = 1024,
60
- height: int = 1024,
61
- guidance_scale: float = 3,
62
- randomize_seed: bool = False,
63
- progress=gr.Progress(track_tqdm=True),
64
- ):
65
 
 
66
 
67
- seed = int(randomize_seed_fn(seed, randomize_seed))
68
-
69
- if not use_negative_prompt:
70
- negative_prompt = "" # type: ignore
71
-
72
- images = pipe(
73
- prompt=prompt,
74
- negative_prompt=negative_prompt,
75
- width=width,
76
- height=height,
77
- guidance_scale=guidance_scale,
78
- num_inference_steps=25,
79
- num_images_per_prompt=1,
80
- cross_attention_kwargs={"scale": 0.65},
81
- output_type="pil",
82
- ).images
83
- image_paths = [save_image(img) for img in images]
84
- print(image_paths)
85
- return image_paths, seed
86
-
87
-
88
- css = '''
89
- .gradio-container{max-width: 560px !important}
90
- h1{text-align:center}
91
- footer {
92
- visibility: hidden
93
- }
94
- '''
95
- with gr.Blocks(css=css, theme="pseudolab/huggingface-korea-theme") as demo:
96
- gr.Markdown(DESCRIPTION)
97
- gr.DuplicateButton(
98
- value="Duplicate Space for private use",
99
- elem_id="duplicate-button",
100
- visible=False,
101
- )
102
-
103
- with gr.Group():
104
  with gr.Row():
 
105
  prompt = gr.Text(
106
  label="Prompt",
107
  show_label=False,
@@ -109,81 +72,75 @@ with gr.Blocks(css=css, theme="pseudolab/huggingface-korea-theme") as demo:
109
  placeholder="Enter your prompt",
110
  container=False,
111
  )
 
112
  run_button = gr.Button("Run", scale=0)
113
- result = gr.Gallery(label="Result", columns=1, preview=True, show_label=False)
114
- with gr.Accordion("Advanced options", open=False):
115
- use_negative_prompt = gr.Checkbox(label="Use negative prompt", value=True)
116
- negative_prompt = gr.Text(
117
- label="Negative prompt",
118
- lines=4,
119
- max_lines=6,
120
- 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)""",
121
- placeholder="Enter a negative prompt",
122
- visible=True,
123
- )
124
- seed = gr.Slider(
125
- label="Seed",
126
- minimum=0,
127
- maximum=MAX_SEED,
128
- step=1,
129
- value=0,
130
- visible=True
131
- )
132
- randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
133
- with gr.Row(visible=True):
134
- width = gr.Slider(
135
- label="Width",
136
- minimum=512,
137
- maximum=2048,
138
- step=8,
139
- value=1024,
140
- )
141
- height = gr.Slider(
142
- label="Height",
143
- minimum=512,
144
- maximum=2048,
145
- step=8,
146
- value=1024,
147
  )
148
- with gr.Row():
149
- guidance_scale = gr.Slider(
150
- label="Guidance Scale",
151
- minimum=0.1,
152
- maximum=20.0,
153
- step=0.1,
154
- value=6,
155
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
 
157
-
158
-
159
- use_negative_prompt.change(
160
- fn=lambda x: gr.update(visible=x),
161
- inputs=use_negative_prompt,
162
- outputs=negative_prompt,
163
- api_name=False,
164
  )
165
-
166
 
167
- gr.on(
168
- triggers=[
169
- prompt.submit,
170
- negative_prompt.submit,
171
- run_button.click,
172
- ],
173
- fn=generate,
174
- inputs=[
175
- prompt,
176
- negative_prompt,
177
- use_negative_prompt,
178
- seed,
179
- width,
180
- height,
181
- guidance_scale,
182
- randomize_seed,
183
- ],
184
- outputs=[result, seed],
185
- api_name="run",
186
- )
187
-
188
- if __name__ == "__main__":
189
- demo.queue(max_size=20).launch(show_api=False, debug=False)
 
 
 
 
 
1
  import gradio as gr
2
  import numpy as np
3
+ import random
4
+ from diffusers import DiffusionPipeline
5
  import torch
 
 
 
 
 
6
 
7
+ device = "cuda" if torch.cuda.is_available() else "cpu"
 
 
 
 
 
 
 
 
 
 
8
 
9
+ if torch.cuda.is_available():
10
+ torch.cuda.max_memory_allocated(device=device)
11
+ pipe = DiffusionPipeline.from_pretrained("stabilityai/sdxl-turbo", torch_dtype=torch.float16, variant="fp16", use_safetensors=True)
12
+ pipe.enable_xformers_memory_efficient_attention()
13
+ pipe = pipe.to(device)
14
+ else:
15
+ pipe = DiffusionPipeline.from_pretrained("stabilityai/sdxl-turbo", use_safetensors=True)
16
+ pipe = pipe.to(device)
17
 
18
  MAX_SEED = np.iinfo(np.int32).max
19
+ MAX_IMAGE_SIZE = 1024
20
 
21
+ def infer(prompt, negative_prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
 
23
+ if randomize_seed:
24
+ seed = random.randint(0, MAX_SEED)
25
+
26
+ generator = torch.Generator().manual_seed(seed)
27
 
28
+ image = pipe(
29
+ prompt = prompt,
30
+ negative_prompt = negative_prompt,
31
+ guidance_scale = guidance_scale,
32
+ num_inference_steps = num_inference_steps,
33
+ width = width,
34
+ height = height,
35
+ generator = generator
36
+ ).images[0]
37
 
38
+ return image
39
+
40
+ examples = [
41
+ "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k",
42
+ "An astronaut riding a green horse",
43
+ "A delicious ceviche cheesecake slice",
44
+ ]
45
+
46
+ css="""
47
+ #col-container {
48
+ margin: 0 auto;
49
+ max-width: 520px;
50
+ }
51
+ """
52
 
53
+ if torch.cuda.is_available():
54
+ power_device = "GPU"
55
+ else:
56
+ power_device = "CPU"
 
 
 
 
 
 
 
 
57
 
58
+ with gr.Blocks(css=css) as demo:
59
 
60
+ with gr.Column(elem_id="col-container"):
61
+ gr.Markdown(f"""
62
+ # Text-to-Image Gradio Template
63
+ Currently running on {power_device}.
64
+ """)
65
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  with gr.Row():
67
+
68
  prompt = gr.Text(
69
  label="Prompt",
70
  show_label=False,
 
72
  placeholder="Enter your prompt",
73
  container=False,
74
  )
75
+
76
  run_button = gr.Button("Run", scale=0)
77
+
78
+ result = gr.Image(label="Result", show_label=False)
79
+
80
+ with gr.Accordion("Advanced Settings", open=False):
81
+
82
+ negative_prompt = gr.Text(
83
+ label="Negative prompt",
84
+ max_lines=1,
85
+ placeholder="Enter a negative prompt",
86
+ visible=False,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
  )
88
+
89
+ seed = gr.Slider(
90
+ label="Seed",
91
+ minimum=0,
92
+ maximum=MAX_SEED,
93
+ step=1,
94
+ value=0,
95
  )
96
+
97
+ randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
98
+
99
+ with gr.Row():
100
+
101
+ width = gr.Slider(
102
+ label="Width",
103
+ minimum=256,
104
+ maximum=MAX_IMAGE_SIZE,
105
+ step=32,
106
+ value=512,
107
+ )
108
+
109
+ height = gr.Slider(
110
+ label="Height",
111
+ minimum=256,
112
+ maximum=MAX_IMAGE_SIZE,
113
+ step=32,
114
+ value=512,
115
+ )
116
+
117
+ with gr.Row():
118
+
119
+ guidance_scale = gr.Slider(
120
+ label="Guidance scale",
121
+ minimum=0.0,
122
+ maximum=10.0,
123
+ step=0.1,
124
+ value=0.0,
125
+ )
126
+
127
+ num_inference_steps = gr.Slider(
128
+ label="Number of inference steps",
129
+ minimum=1,
130
+ maximum=12,
131
+ step=1,
132
+ value=2,
133
+ )
134
+
135
+ gr.Examples(
136
+ examples = examples,
137
+ inputs = [prompt]
138
+ )
139
 
140
+ run_button.click(
141
+ fn = infer,
142
+ inputs = [prompt, negative_prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps],
143
+ outputs = [result]
 
 
 
144
  )
 
145
 
146
+ demo.queue().launch()