Pichayada commited on
Commit
ec5555d
·
verified ·
1 Parent(s): 8443b67

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +126 -38
app.py CHANGED
@@ -1,42 +1,130 @@
1
- import os
2
- import subprocess
3
- import torch
4
- from diffusers import StableDiffusionPipeline
5
  import gradio as gr
 
 
 
 
 
 
 
 
6
 
7
- # Optional flash-attn (ไม่จำเป็นกับ diffusers แต่เก็บไว้ถ้าอยาก)
8
- subprocess.run(
9
- 'pip install flash-attn --no-build-isolation',
10
- env={**os.environ, 'FLASH_ATTENTION_SKIP_CUDA_BUILD': "TRUE"},
11
- shell=True
12
- )
13
 
14
- device = "cuda" if torch.cuda.is_available() else "cpu"
15
- dtype = torch.float16 if device == "cuda" else torch.float32
16
-
17
- # โหลด pipeline
18
- pipe = StableDiffusionPipeline.from_pretrained(
19
- "runwayml/stable-diffusion-v1-5",
20
- torch_dtype=dtype,
21
- use_safetensors=True,
22
- revision="fp16" if device == "cuda" else None
23
- ).to(device)
24
-
25
- # เปิด xformers ถ้าใช้ GPU
26
- if device == "cuda":
27
- pipe.enable_xformers_memory_efficient_attention()
28
-
29
- pipe.safety_checker = None # ปิด safety
30
-
31
- def generate_image(prompt):
32
- return pipe(prompt).images[0]
33
-
34
- # Gradio UI
35
- io = gr.Interface(
36
- fn=generate_image,
37
- inputs=[gr.Textbox(label="Enter your prompt")],
38
- outputs=[gr.Image(label="Generated Image")],
39
- theme="Yntec/HaleyCH_Theme_Orange",
40
- description="⚠ Sorry for the inconvenience. The space is currently running on the CPU, which might affect performance. We appreciate your understanding."
41
  )
42
- io.launch(debug=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import spaces
 
 
 
2
  import gradio as gr
3
+ import numpy as np
4
+ import PIL.Image
5
+ from PIL import Image
6
+ import random
7
+ from diffusers import ControlNetModel, StableDiffusionXLPipeline, AutoencoderKL
8
+ from diffusers import DDIMScheduler, EulerAncestralDiscreteScheduler
9
+ import cv2
10
+ import torch
11
 
12
+ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
 
 
 
 
 
13
 
14
+ pipe = StableDiffusionXLPipeline.from_pretrained(
15
+ "votepurchase/NSFW-gen-v2",
16
+ torch_dtype=torch.float16,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  )
18
+
19
+ pipe.scheduler = EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config)
20
+ pipe.to(device)
21
+
22
+ MAX_SEED = np.iinfo(np.int32).max
23
+ MAX_IMAGE_SIZE = 1216
24
+
25
+
26
+ @spaces.GPU
27
+ def infer(prompt, negative_prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps):
28
+
29
+ if randomize_seed:
30
+ seed = random.randint(0, MAX_SEED)
31
+
32
+ generator = torch.Generator().manual_seed(seed)
33
+
34
+ output_image = pipe(
35
+ prompt=prompt,
36
+ negative_prompt=negative_prompt,
37
+ guidance_scale=guidance_scale,
38
+ num_inference_steps=num_inference_steps,
39
+ width=width,
40
+ height=height,
41
+ generator=generator
42
+ ).images[0]
43
+
44
+ return output_image
45
+
46
+
47
+ css = """
48
+ #col-container {
49
+ margin: 0 auto;
50
+ max-width: 520px;
51
+ }
52
+ """
53
+
54
+ with gr.Blocks(css=css) as demo:
55
+
56
+ with gr.Column(elem_id="col-container"):
57
+
58
+ with gr.Row():
59
+ prompt = gr.Text(
60
+ label="Prompt",
61
+ show_label=False,
62
+ max_lines=1,
63
+ placeholder="Enter your prompt",
64
+ container=False,
65
+ )
66
+
67
+ run_button = gr.Button("Run", scale=0)
68
+
69
+ result = gr.Image(label="Result", show_label=False)
70
+
71
+ with gr.Accordion("Advanced Settings", open=False):
72
+
73
+ negative_prompt = gr.Text(
74
+ label="Negative prompt",
75
+ max_lines=1,
76
+ placeholder="Enter a negative prompt",
77
+ value="nsfw, (low quality, worst quality:1.2), very displeasing, 3d, watermark, signature, ugly, poorly drawn"
78
+ )
79
+
80
+ seed = gr.Slider(
81
+ label="Seed",
82
+ minimum=0,
83
+ maximum=MAX_SEED,
84
+ step=1,
85
+ value=0,
86
+ )
87
+
88
+ randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
89
+
90
+ with gr.Row():
91
+ width = gr.Slider(
92
+ label="Width",
93
+ minimum=256,
94
+ maximum=MAX_IMAGE_SIZE,
95
+ step=32,
96
+ value=1024,#832,
97
+ )
98
+
99
+ height = gr.Slider(
100
+ label="Height",
101
+ minimum=256,
102
+ maximum=MAX_IMAGE_SIZE,
103
+ step=32,
104
+ value=1024,#1216,
105
+ )
106
+
107
+ with gr.Row():
108
+ guidance_scale = gr.Slider(
109
+ label="Guidance scale",
110
+ minimum=0.0,
111
+ maximum=20.0,
112
+ step=0.1,
113
+ value=7,
114
+ )
115
+
116
+ num_inference_steps = gr.Slider(
117
+ label="Number of inference steps",
118
+ minimum=1,
119
+ maximum=28,
120
+ step=1,
121
+ value=28,
122
+ )
123
+
124
+ run_button.click(#lambda x: None, inputs=None, outputs=result).then(
125
+ fn=infer,
126
+ inputs=[prompt, negative_prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps],
127
+ outputs=[result]
128
+ )
129
+
130
+ demo.queue().launch()