Pichayada commited on
Commit
20c77c4
·
verified ·
1 Parent(s): 6d3ffe6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -125
app.py CHANGED
@@ -1,130 +1,36 @@
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()
 
 
 
 
 
 
 
 
 
 
1
  import torch
2
+ from diffusers import StableDiffusionPipeline
3
+ import gradio as gr
4
 
5
+ # ตรวจสอบว่าใช้ GPU ได้หรือไม่
6
+ device = "cuda" if torch.cuda.is_available() else "cpu"
7
 
8
+ # โหลดโมเดล Stable Diffusion จาก Hugging Face
9
+ pipe = StableDiffusionPipeline.from_pretrained(
10
+ "runwayml/stable-diffusion-v1-5",
11
+ torch_dtype=torch.float16 if device == "cuda" else torch.float32,
12
+ revision="fp16" if device == "cuda" else "main",
13
+ use_auth_token=True # ต้อง login ผ่าน huggingface-cli ก่อน
14
  )
15
 
16
+ # ส่งโมเดลไปยังอุปกรณ์ที่ใช้
17
+ pipe = pipe.to(device)
18
+
19
+ # ถ้าใช้ CPU แนะนำเปิด attention slicing เพื่อลดการใช้ RAM
20
+ if device == "cpu":
21
+ pipe.enable_attention_slicing()
22
+
23
+ # ฟังก์ชันสำหรับแปลงข้อความเป็นภาพ
24
+ def text_to_image(prompt):
25
+ with torch.autocast(device) if device == "cuda" else torch.inference_mode():
26
+ image = pipe(prompt).images[0]
27
+ return image
28
+
29
+ # Gradio Interface
30
+ gr.Interface(
31
+ fn=text_to_image,
32
+ inputs=gr.Textbox(label="📝 Text Prompt"),
33
+ outputs=gr.Image(label="🎨 Generated Image"),
34
+ title="🖼 Text-to-Image with Stable Diffusion",
35
+ description="แอปนี้สามารถรันบน CPU หรือ GPU ได้ตามเครื่องที่มี โดยใช้โมเดล Stable Diffusion จาก Hugging Face"
36
+ ).launch()