tuhbooh commited on
Commit
405af98
·
verified ·
1 Parent(s): fb4cf10

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +63 -0
app.py ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import torch
3
+ from diffusers import StableDiffusionPipeline, DPMSolverMultistepScheduler
4
+
5
+ # Danh sách các model nhẹ, phù hợp cho CPU
6
+ MODELS = {
7
+ "SD v1.5 (Cơ bản)": "runwayml/stable-diffusion-v1-5",
8
+ "Tiny SD (Siêu nhanh - Khuyên dùng)": "segmind/tiny-sd",
9
+ "Dreamlike Photoreal": "dreamlike-art/dreamlike-photoreal-2.0"
10
+ }
11
+
12
+ current_model_id = ""
13
+ pipe = None
14
+
15
+ def load_model(model_id, progress=gr.Progress()):
16
+ global pipe, current_model_id
17
+ if model_id != current_model_id:
18
+ progress(0, desc="Đang tải model mới... (Vui lòng đợi)")
19
+ pipe = StableDiffusionPipeline.from_pretrained(
20
+ model_id,
21
+ torch_dtype=torch.float32,
22
+ safety_checker=None # Tắt để tiết kiệm RAM
23
+ )
24
+ # Tối ưu scheduler để chạy nhanh hơn
25
+ pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
26
+ current_model_id = model_id
27
+ return pipe
28
+
29
+ def generate(prompt, model_name, steps, progress=gr.Progress(track_tqdm=True)):
30
+ if not prompt:
31
+ return None
32
+
33
+ # 1. Load model đã chọn
34
+ model_id = MODELS[model_name]
35
+ pipeline = load_model(model_id)
36
+
37
+ # 2. Tạo ảnh với Progress Bar
38
+ # track_tqdm=True sẽ tự động bắt các bước loop của diffusers để hiện %
39
+ image = pipeline(
40
+ prompt,
41
+ num_inference_steps=int(steps),
42
+ guidance_scale=7.0
43
+ ).images[0]
44
+
45
+ return image
46
+
47
+ # Giao diện UI
48
+ with gr.Blocks(theme=gr.themes.Soft()) as demo:
49
+ gr.Markdown(f"# 🎨 Stable Diffusion Free CPU - Minh Đức AI")
50
+
51
+ with gr.Row():
52
+ with gr.Column():
53
+ prompt = gr.Textbox(label="Mô tả ảnh", placeholder="Một con mèo đi thám hiểm mặt trăng...")
54
+ model_name = gr.Dropdown(choices=list(MODELS.keys()), value="Tiny SD (Siêu nhanh - Khuyên dùng)", label="Chọn Model")
55
+ steps = gr.Slider(minimum=10, maximum=30, value=15, step=1, label="Số bước chạy (Steps - Càng cao càng chậm)")
56
+ btn = gr.Button("Bắt đầu tạo ảnh", variant="primary")
57
+
58
+ with gr.Column():
59
+ output = gr.Image(label="Kết quả")
60
+
61
+ btn.click(fn=generate, inputs=[prompt, model_name, steps], outputs=output)
62
+
63
+ demo.launch()