Spaces:
Paused
Paused
import gradio as gr | |
import requests | |
from PIL import Image | |
from io import BytesIO | |
import base64 | |
import os | |
# Hugging Face ControlNet API (Canny version) | |
HF_API = "https://api-inference.huggingface.co/models/lllyasviel/controlnet-sdxl-1.0-canny" | |
API_KEY = os.getenv("HF_API_KEY") # Secure: fetch from secret | |
headers = { | |
"Authorization": f"Bearer {API_KEY}" | |
} | |
def generate_image(prompt, image): | |
buffered = BytesIO() | |
image.save(buffered, format="JPEG") | |
img_bytes = buffered.getvalue() | |
payload = { | |
"inputs": { | |
"prompt": prompt, | |
"image": base64.b64encode(img_bytes).decode("utf-8"), | |
"negative_prompt": "blurry, deformed, cropped" | |
}, | |
"options": {"wait_for_model": True} | |
} | |
response = requests.post(HF_API, headers=headers, json=payload) | |
if response.status_code == 200: | |
img_out = Image.open(BytesIO(response.content)) | |
return img_out | |
else: | |
return f"Error: {response.status_code} - {response.text}" | |
# Gradio UI | |
with gr.Blocks() as demo: | |
gr.Markdown("# 🧠 NewCrux AI Demo: Product → Lifestyle Image") | |
with gr.Row(): | |
input_image = gr.Image(type="pil", label="Upload Product Image") | |
prompt_text = gr.Textbox(label="Enter Prompt", placeholder="e.g., A runner on a beach wearing this shoe") | |
output_image = gr.Image(label="Generated Lifestyle Image") | |
generate_btn = gr.Button("Generate Image") | |
generate_btn.click(fn=generate_image, inputs=[prompt_text, input_image], outputs=output_image) | |
demo.launch() | |