Leteint commited on
Commit
9f10e87
·
verified ·
1 Parent(s): 96ba0f2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +48 -101
app.py CHANGED
@@ -10,31 +10,12 @@ from huggingface_hub import hf_hub_download
10
 
11
  BASE_MODEL_ID = "stabilityai/stable-diffusion-xl-base-1.0"
12
 
13
- # LoRA réalisme global
14
- #LORA_PHOTO_REPO = "ostris/photorealistic-slider-sdxl-lora"
15
- #LORA_PHOTO_REPO = "Muapi/hourglass-body-shape-sd1.5-sdxl-pony-flux-olaz"
16
- #LORA_PHOTO_ADAPTER = "photo_realism"
17
- #LORA_PHOTO_ADAPTER = "hourglass_body"
18
-
19
  LORA_HOURGLASS_REPO = "Muapi/hourglass-body-shape-sd1.5-sdxl-pony-flux-olaz"
20
  LORA_HOURGLASS_FILE = "hourglass-body-shape-sd1.5-sdxl-pony-flux-olaz.safetensors"
21
  LORA_HOURGLASS_ADAPTER = "hourglass_body"
22
 
23
-
24
- # Teste le téléchargement
25
- try:
26
- local_path = hf_hub_download(
27
- repo_id=LORA_HOURGLASS_REPO,
28
- filename=LORA_HOURGLASS_FILE,
29
- local_dir="./lora_cache"
30
- )
31
- print(f"Fichier OK : {local_path}")
32
- except Exception as e:
33
- print(f"Erreur repo/fichier : {e}")
34
-
35
-
36
- # LoRA amélioration de visages
37
- #LORA_FACE_REPO = "ostris/face-helper-sdxl-lora"
38
  LORA_FACE_REPO = "akash-guptag/Detailers_By_Stable_Yogi"
39
  LORA_FACE_ADAPTER = "face_helper"
40
 
@@ -50,19 +31,26 @@ pipe = AutoPipelineForText2Image.from_pretrained(
50
  pipe.to(DEVICE)
51
  pipe.set_progress_bar_config(disable=True)
52
 
53
- #print("Chargement LoRA photorealistic...")
54
- #pipe.load_lora_weights(
55
- # LORA_PHOTO_REPO,
56
- # adapter_name=LORA_PHOTO_ADAPTER,
57
- #)
 
 
 
 
 
 
58
  print("Chargement LoRA hourglass body...")
59
  pipe.load_lora_weights(
60
- "Muapi/hourglass-body-shape-sd1.5-sdxl-pony-flux-olaz", # repo
61
- weight_name="hourglass-body-shape-sd1.5-sdxl-pony-flux-olaz.safetensors", # fichier précis
62
  adapter_name=LORA_HOURGLASS_ADAPTER,
 
63
  )
64
 
65
- print("Chargement LoRA face-helper...")
66
  pipe.load_lora_weights(
67
  LORA_FACE_REPO,
68
  adapter_name=LORA_FACE_ADAPTER,
@@ -83,10 +71,10 @@ def generate(
83
  guidance: float,
84
  width: float,
85
  height: float,
86
- photo_enabled: bool,
87
- photo_weight: float,
88
  face_enabled: bool,
89
  face_weight: float,
 
 
90
  script_name: str,
91
  ):
92
  if not prompt:
@@ -103,26 +91,14 @@ def generate(
103
  adapters = []
104
  weights = []
105
 
106
- if photo_enabled:
107
- adapters.append(LORA_PHOTO_ADAPTER)
108
- weights.append(float(photo_weight))
109
- else:
110
- adapters.append(LORA_PHOTO_ADAPTER)
111
- weights.append(0.0)
112
-
113
- if face_enabled:
114
- adapters.append(LORA_FACE_ADAPTER)
115
- weights.append(float(face_weight))
116
- else:
117
- adapters.append(LORA_FACE_ADAPTER)
118
- weights.append(0.0)
119
 
120
- # NOUVEAU : Hourglass body
121
- hourglass_enabled = True # ou passe en param UI
122
- hourglass_weight = 0.9 # recommandé par l'auteur [web:19]
123
  adapters.append(LORA_HOURGLASS_ADAPTER)
124
  weights.append(float(hourglass_weight) if hourglass_enabled else 0.0)
125
-
126
  pipe.set_adapters(adapters, adapter_weights=weights)
127
 
128
  try:
@@ -143,14 +119,15 @@ def generate(
143
 
144
  metadata = {
145
  "base_model": BASE_MODEL_ID,
146
- "photo_lora_repo": LORA_PHOTO_REPO,
147
- "photo_lora_adapter": LORA_PHOTO_ADAPTER,
148
- "photo_enabled": bool(photo_enabled),
149
- "photo_weight": float(photo_weight) if photo_enabled else 0.0,
150
  "face_lora_repo": LORA_FACE_REPO,
151
  "face_lora_adapter": LORA_FACE_ADAPTER,
152
  "face_enabled": bool(face_enabled),
153
  "face_weight": float(face_weight) if face_enabled else 0.0,
 
 
 
 
 
154
  "prompt": prompt,
155
  "negative_prompt": negative_prompt,
156
  "seed": seed_int,
@@ -176,13 +153,14 @@ def generate(
176
 
177
  return image, script_txt, json_path
178
 
 
179
  # -----------------------
180
  # UI Gradio
181
  # -----------------------
182
  with gr.Blocks(title="SDXL + LoRA (Diffusers)") as demo:
183
  gr.Markdown(
184
- "## SDXL base + LoRA SDXL (Diffusers) \n"
185
- "Génération SDXL 1.0 avec LoRA photorealistic + face-helper."
186
  )
187
 
188
  with gr.Row():
@@ -191,12 +169,15 @@ with gr.Blocks(title="SDXL + LoRA (Diffusers)") as demo:
191
  label="Prompt",
192
  lines=4,
193
  placeholder="Décris la scène à générer avec SDXL...",
194
- value="sharp face, detailed skin, realistic eyes, masterpiece, best quality, 1girl, looking at viewer",
 
 
 
195
  )
196
  negative = gr.Textbox(
197
  label="Negative prompt",
198
  lines=3,
199
- value="blurry face, deformed face, bad anatomy",
200
  )
201
 
202
  seed = gr.Number(
@@ -233,34 +214,16 @@ with gr.Blocks(title="SDXL + LoRA (Diffusers)") as demo:
233
  label="Height (SDXL natif 1024)",
234
  )
235
 
236
- photo_enabled = gr.Checkbox(
237
- label="Activer LoRA photorealistic (rendu global)",
238
- value=True,
239
- )
240
- photo_weight = gr.Slider(
241
- minimum=0.0,
242
- maximum=2.0,
243
- value=1.3,
244
- step=0.05,
245
- label="Force LoRA photorealistic",
246
- )
247
-
248
-
249
  face_enabled = gr.Checkbox(
250
- label="Activer LoRA face-helper (visages)",
251
  value=True,
252
  )
253
  face_weight = gr.Slider(
254
  minimum=0.0,
255
- maximum=2.0,
256
- value=1.0,
257
  step=0.05,
258
- label="Force LoRA face-helper",
259
- )
260
-
261
- script_name = gr.Textbox(
262
- label="Nom base pour l'image / script",
263
- value="sdxl_lora_generation",
264
  )
265
 
266
  hourglass_enabled = gr.Checkbox(
@@ -271,11 +234,16 @@ with gr.Blocks(title="SDXL + LoRA (Diffusers)") as demo:
271
  hourglass_weight = gr.Slider(
272
  minimum=0.0,
273
  maximum=2.0,
274
- value=0.9, # valeur recommandée [web:19]
275
  step=0.05,
276
  label="Force LoRA hourglass body",
277
  )
278
-
 
 
 
 
 
279
  run_btn = gr.Button("Générer", variant="primary")
280
 
281
  with gr.Column():
@@ -300,31 +268,10 @@ with gr.Blocks(title="SDXL + LoRA (Diffusers)") as demo:
300
  guidance,
301
  width,
302
  height,
303
- photo_enabled,
304
- photo_weight,
305
  face_enabled,
306
  face_weight,
307
- script_name,
308
  hourglass_enabled,
309
  hourglass_weight,
310
- ],
311
- outputs=[out_img, out_script, out_file],
312
- )
313
-
314
- run_btn.click(
315
- fn=generate,
316
- inputs=[
317
- prompt,
318
- negative,
319
- seed,
320
- steps,
321
- guidance,
322
- width,
323
- height,
324
- photo_enabled,
325
- photo_weight,
326
- face_enabled,
327
- face_weight,
328
  script_name,
329
  ],
330
  outputs=[out_img, out_script, out_file],
 
10
 
11
  BASE_MODEL_ID = "stabilityai/stable-diffusion-xl-base-1.0"
12
 
13
+ # LoRA cuerpo hourglass (Muapi)
 
 
 
 
 
14
  LORA_HOURGLASS_REPO = "Muapi/hourglass-body-shape-sd1.5-sdxl-pony-flux-olaz"
15
  LORA_HOURGLASS_FILE = "hourglass-body-shape-sd1.5-sdxl-pony-flux-olaz.safetensors"
16
  LORA_HOURGLASS_ADAPTER = "hourglass_body"
17
 
18
+ # LoRA visages / détails (Stable Yogi)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  LORA_FACE_REPO = "akash-guptag/Detailers_By_Stable_Yogi"
20
  LORA_FACE_ADAPTER = "face_helper"
21
 
 
31
  pipe.to(DEVICE)
32
  pipe.set_progress_bar_config(disable=True)
33
 
34
+ # Téléchargement explicite du LoRA hourglass (debug + cache)
35
+ try:
36
+ local_path = hf_hub_download(
37
+ repo_id=LORA_HOURGLASS_REPO,
38
+ filename=LORA_HOURGLASS_FILE,
39
+ local_dir="./lora_cache"
40
+ )
41
+ print(f"Fichier LoRA hourglass OK : {local_path}")
42
+ except Exception as e:
43
+ print(f"Erreur repo/fichier hourglass : {e}")
44
+
45
  print("Chargement LoRA hourglass body...")
46
  pipe.load_lora_weights(
47
+ LORA_HOURGLASS_REPO,
48
+ weight_name=LORA_HOURGLASS_FILE,
49
  adapter_name=LORA_HOURGLASS_ADAPTER,
50
+ low_cpu_mem_usage=False, # important pour certains LoRA hybrides
51
  )
52
 
53
+ print("Chargement LoRA face/detail (Stable Yogi)...")
54
  pipe.load_lora_weights(
55
  LORA_FACE_REPO,
56
  adapter_name=LORA_FACE_ADAPTER,
 
71
  guidance: float,
72
  width: float,
73
  height: float,
 
 
74
  face_enabled: bool,
75
  face_weight: float,
76
+ hourglass_enabled: bool,
77
+ hourglass_weight: float,
78
  script_name: str,
79
  ):
80
  if not prompt:
 
91
  adapters = []
92
  weights = []
93
 
94
+ # LoRA visages / détails
95
+ adapters.append(LORA_FACE_ADAPTER)
96
+ weights.append(float(face_weight) if face_enabled else 0.0)
 
 
 
 
 
 
 
 
 
 
97
 
98
+ # LoRA hourglass
 
 
99
  adapters.append(LORA_HOURGLASS_ADAPTER)
100
  weights.append(float(hourglass_weight) if hourglass_enabled else 0.0)
101
+
102
  pipe.set_adapters(adapters, adapter_weights=weights)
103
 
104
  try:
 
119
 
120
  metadata = {
121
  "base_model": BASE_MODEL_ID,
 
 
 
 
122
  "face_lora_repo": LORA_FACE_REPO,
123
  "face_lora_adapter": LORA_FACE_ADAPTER,
124
  "face_enabled": bool(face_enabled),
125
  "face_weight": float(face_weight) if face_enabled else 0.0,
126
+ "hourglass_lora_repo": LORA_HOURGLASS_REPO,
127
+ "hourglass_lora_file": LORA_HOURGLASS_FILE,
128
+ "hourglass_lora_adapter": LORA_HOURGLASS_ADAPTER,
129
+ "hourglass_enabled": bool(hourglass_enabled),
130
+ "hourglass_weight": float(hourglass_weight) if hourglass_enabled else 0.0,
131
  "prompt": prompt,
132
  "negative_prompt": negative_prompt,
133
  "seed": seed_int,
 
153
 
154
  return image, script_txt, json_path
155
 
156
+
157
  # -----------------------
158
  # UI Gradio
159
  # -----------------------
160
  with gr.Blocks(title="SDXL + LoRA (Diffusers)") as demo:
161
  gr.Markdown(
162
+ "## SDXL base + LoRA SDXL (Diffusers)\n"
163
+ "Génération SDXL 1.0 avec LoRA detailer + hourglass body."
164
  )
165
 
166
  with gr.Row():
 
169
  label="Prompt",
170
  lines=4,
171
  placeholder="Décris la scène à générer avec SDXL...",
172
+ value=(
173
+ "masterpiece, best quality, 1girl, looking at viewer, "
174
+ "sharp face, detailed skin, realistic eyes, hourglass figure, slim waist, wide hips"
175
+ ),
176
  )
177
  negative = gr.Textbox(
178
  label="Negative prompt",
179
  lines=3,
180
+ value="blurry face, deformed face, bad anatomy, bad proportions, low quality",
181
  )
182
 
183
  seed = gr.Number(
 
214
  label="Height (SDXL natif 1024)",
215
  )
216
 
 
 
 
 
 
 
 
 
 
 
 
 
 
217
  face_enabled = gr.Checkbox(
218
+ label="Activer LoRA face/detail (Stable Yogi)",
219
  value=True,
220
  )
221
  face_weight = gr.Slider(
222
  minimum=0.0,
223
+ maximum=1.5,
224
+ value=0.8, # recommandé <= 0.8 pour ce LoRA[web:60][web:63]
225
  step=0.05,
226
+ label="Force LoRA face/detail",
 
 
 
 
 
227
  )
228
 
229
  hourglass_enabled = gr.Checkbox(
 
234
  hourglass_weight = gr.Slider(
235
  minimum=0.0,
236
  maximum=2.0,
237
+ value=0.9,
238
  step=0.05,
239
  label="Force LoRA hourglass body",
240
  )
241
+
242
+ script_name = gr.Textbox(
243
+ label="Nom base pour l'image / script",
244
+ value="sdxl_lora_generation",
245
+ )
246
+
247
  run_btn = gr.Button("Générer", variant="primary")
248
 
249
  with gr.Column():
 
268
  guidance,
269
  width,
270
  height,
 
 
271
  face_enabled,
272
  face_weight,
 
273
  hourglass_enabled,
274
  hourglass_weight,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
275
  script_name,
276
  ],
277
  outputs=[out_img, out_script, out_file],