Spaces:
Running
Running
import os | |
import io | |
import PIL.Image # Workaround for PIL/Gradio bug :contentReference[oaicite:13]{index=13} | |
import gradio as gr | |
from gradio_client import Client, handle_file | |
from numpy import array | |
# 1. Load your HF token from env | |
HF_TOKEN = os.getenv("HF_TOKEN") # export HF_TOKEN="hf_..." | |
# 1) Connect to the Leffa Gradio app’s predict endpoint | |
# Use the full "/call/predict" API path as shown on the View API page | |
client = Client("franciszzj/Leffa", hf_token=HF_TOKEN, ) # Gradio Python client | |
def virtual_tryon(person_path, garment_path): | |
# 2) Wrap file inputs so Gradio client uploads them correctly | |
person_file = handle_file(person_path) # handle_file uploads the image :contentReference[oaicite:6]{index=6} | |
garment_file = handle_file(garment_path) | |
# 3) Build inputs in the exact order shown on the “Use via API” page :contentReference[oaicite:7]{index=7} | |
# 4) Call the named endpoint with handle_file inputs | |
result = client.predict( | |
person_file, # Person Image | |
garment_file, # Garment Image | |
ref_acceleration=False, | |
step=30, | |
scale=2.5, | |
seed=42, | |
vt_model_type="viton_hd", | |
vt_garment_type="upper_body", | |
vt_repaint=False, | |
api_name="/leffa_predict_vt" | |
) | |
# result[0] is the generated image filepath on the server | |
return result[0] # Gradio will download & display this file | |
# 5) Gradio UI | |
with gr.Blocks() as demo: | |
gr.Markdown("## Leffa Virtual Try-On") | |
with gr.Row(): | |
src = gr.Image(sources="upload", type="filepath", label="Person Image") | |
ref = gr.Image(sources="upload", type="filepath", label="Garment Image") | |
out = gr.Image(type="filepath", label="Result", ) | |
btn = gr.Button("Generate") | |
btn.click(virtual_tryon, [src, ref], out) | |
demo.launch(share=True, | |
show_error=True, | |
pwa=True,) | |