mamungtai-sat pormungtai commited on
Commit
f7097b9
·
1 Parent(s): d353328

Prompt Builder: add pose reference image upload -> auto ControlNet OpenPose lock (reuses pose path), prompt drives face/clothes/scene (#38)

Browse files

- Prompt Builder: add pose reference image upload -> auto ControlNet OpenPose lock (reuses pose path), prompt drives face/clothes/scene (1a001728297c731b0bdee85f9ee389dc57d4a148)


Co-authored-by: pormungtailaw <pormungtai@users.noreply.huggingface.co>

Files changed (1) hide show
  1. app.py +18 -2
app.py CHANGED
@@ -80,12 +80,23 @@ def modes_for(models, model_id):
80
  @spaces.GPU(duration=120)
81
  def generate(model_id, mode, prompt, negative_prompt, ref_image,
82
  steps, guidance, denoise, ip_scale, width, height, seed, randomize,
83
- translator):
84
  models = load_models()
85
  cfg = pm.get_model(models, model_id)
86
  if cfg is None:
87
  raise gr.Error("ไม่พบโมเดลที่เลือก โปรด Reload models / Selected model not found.")
88
 
 
 
 
 
 
 
 
 
 
 
 
89
  if randomize or seed is None or int(seed) < 0:
90
  seed = random.randint(0, MAX_SEED)
91
 
@@ -301,6 +312,11 @@ with gr.Blocks(css=CSS, theme=gr.themes.Soft(primary_hue="blue"),
301
  ("เซลฟี่ / selfie", "selfie, pov, arm extended"),
302
  ],
303
  value=None, multiselect=True, allow_custom_value=True)
 
 
 
 
 
304
  build_btn = gr.Button("✨ สร้าง prompt → ใส่ในช่องด้านบน", variant="secondary")
305
 
306
  # State: ordered list of model ids (matches gallery order) + current selection.
@@ -383,7 +399,7 @@ with gr.Blocks(css=CSS, theme=gr.themes.Soft(primary_hue="blue"),
383
 
384
  gen_inputs = [selected_id, mode_radio, prompt, negative_prompt, ref_image,
385
  steps, guidance, denoise, ip_scale, width, height, seed, randomize,
386
- translator]
387
  gen_btn.click(generate, inputs=gen_inputs, outputs=[output, seed, status])
388
  prompt.submit(generate, inputs=gen_inputs, outputs=[output, seed, status])
389
 
 
80
  @spaces.GPU(duration=120)
81
  def generate(model_id, mode, prompt, negative_prompt, ref_image,
82
  steps, guidance, denoise, ip_scale, width, height, seed, randomize,
83
+ translator, pose_ref_image=None):
84
  models = load_models()
85
  cfg = pm.get_model(models, model_id)
86
  if cfg is None:
87
  raise gr.Error("ไม่พบโมเดลที่เลือก โปรด Reload models / Selected model not found.")
88
 
89
+ # Prompt Builder pose reference: if the user uploaded a pose image, lock the pose
90
+ # to it via ControlNet OpenPose (reuses the tested 'pose' path) regardless of the
91
+ # mode radio — face/clothes/scene still come from the text prompt.
92
+ if pose_ref_image is not None:
93
+ if "pose" in pm.SUPPORTED_MODES.get(cfg["base"], []):
94
+ mode = "pose"
95
+ ref_image = pose_ref_image
96
+ else:
97
+ raise gr.Error("โมเดลนี้ไม่รองรับ Pose lock (ใช้ได้กับ SD1.5 / SDXL) — "
98
+ "เลือกโมเดล SD1.5 เช่น majicMIX แล้วลองใหม่")
99
+
100
  if randomize or seed is None or int(seed) < 0:
101
  seed = random.randint(0, MAX_SEED)
102
 
 
312
  ("เซลฟี่ / selfie", "selfie, pov, arm extended"),
313
  ],
314
  value=None, multiselect=True, allow_custom_value=True)
315
+ with gr.Row():
316
+ b_pose_img = gr.Image(
317
+ label="📷 รูปอ้างอิงท่าโพส (ใส่รูป → ล็อกท่าตามรูปด้วย ControlNet OpenPose · "
318
+ "หน้า/ชุด/ฉาก ยังคุมด้วยช่องด้านบน · เว้นว่าง = ใช้ข้อความท่าโพส)",
319
+ type="pil", sources=["upload"], height=240)
320
  build_btn = gr.Button("✨ สร้าง prompt → ใส่ในช่องด้านบน", variant="secondary")
321
 
322
  # State: ordered list of model ids (matches gallery order) + current selection.
 
399
 
400
  gen_inputs = [selected_id, mode_radio, prompt, negative_prompt, ref_image,
401
  steps, guidance, denoise, ip_scale, width, height, seed, randomize,
402
+ translator, b_pose_img]
403
  gen_btn.click(generate, inputs=gen_inputs, outputs=[output, seed, status])
404
  prompt.submit(generate, inputs=gen_inputs, outputs=[output, seed, status])
405