Dmtlant commited on
Commit
cab60db
·
verified ·
1 Parent(s): e3eaf53

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +109 -0
app.py ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from diffusers import DiffusionPipeline
3
+ import torch
4
+ from PIL import Image
5
+ import io
6
+ import gc # Import garbage collection
7
+
8
+ # Заголовок приложения
9
+ st.title("Генератор изображений с LCM Dreamshaper")
10
+ st.write("Используйте эту модель для быстрой генерации изображений на CPU")
11
+
12
+ # Создаем область для настроек
13
+ with st.sidebar:
14
+ st.header("Настройки")
15
+ prompt = st.text_area("Введите ваш запрос:", "hoaxx kitty", height=100)
16
+
17
+ num_inference_steps = st.slider(
18
+ "Количество шагов инференса:",
19
+ min_value=1,
20
+ max_value=50,
21
+ value=5,
22
+ help="Больше шагов = выше качество, но медленнее"
23
+ )
24
+
25
+ guidance_scale = st.slider(
26
+ "Guidance Scale:",
27
+ min_value=1.0,
28
+ max_value=15.0,
29
+ value=8.0,
30
+ step=0.5,
31
+ help="Насколько строго модель следует промпту"
32
+ )
33
+
34
+ lcm_origin_steps = st.slider(
35
+ "LCM Origin Steps:",
36
+ min_value=1,
37
+ max_value=50,
38
+ value=35
39
+ )
40
+
41
+ generate_button = st.button("Сгенерировать изображение")
42
+
43
+ # Загружаем модель при первом запуске
44
+ @st.cache_resource
45
+ def load_model():
46
+ pipe = DiffusionPipeline.from_pretrained(
47
+ "SimianLuo/LCM_Dreamshaper_v7",
48
+ torch_dtype=torch.float32
49
+ )
50
+ pipe.to("cpu")
51
+ pipe.enable_attention_slicing()
52
+ pipe.safety_checker = None
53
+ return pipe
54
+
55
+ # Функция для генерации изображения
56
+ def generate_image(pipe, prompt, steps, guidance, lcm_steps):
57
+ try:
58
+ with torch.inference_mode():
59
+ images = pipe(
60
+ prompt=prompt,
61
+ num_inference_steps=steps,
62
+ guidance_scale=guidance,
63
+ lcm_origin_steps=lcm_steps,
64
+ output_type="pil"
65
+ ).images
66
+ return images[0]
67
+ except Exception as e:
68
+ st.error(f"Error generating image: {e}")
69
+ return None
70
+
71
+ # Загружаем модель
72
+ pipe = load_model()
73
+
74
+ # Отображаем прогресс и результат
75
+ if generate_button:
76
+ with st.spinner("Генерация изображения..."):
77
+ # Создаем место для вывода изображения
78
+ result_container = st.empty()
79
+
80
+ # Генерируем изображение
81
+ image = generate_image(
82
+ pipe,
83
+ prompt,
84
+ num_inference_steps,
85
+ guidance_scale,
86
+ lcm_origin_steps
87
+ )
88
+
89
+ # Показываем результат
90
+ if image: # Only display if image generation was successful
91
+ result_container.image(image, caption=f"Результат для: {prompt}", use_container_width=True) # Use use_container_width
92
+
93
+ # Предлагаем скачать
94
+ buf = io.BytesIO()
95
+ image.save(buf, format="PNG")
96
+ byte_im = buf.getvalue()
97
+
98
+ st.download_button(
99
+ label="Скачать изображение",
100
+ data=byte_im,
101
+ file_name="generated_image.png",
102
+ mime="image/png"
103
+ )
104
+
105
+ gc.collect() # Garbage collection after image generation
106
+
107
+ # Инструкции по использованию
108
+ if not generate_button:
109
+ st.write("👈 Настройте параметры в боковой панели и нажмите 'Сгенерировать изображение'")