imagetoimage / app.py
manichandrareddy
πŸš€ Updated app with Brain Layer + HuggingFace model improvements
d3a3bf1
raw
history blame
3.61 kB
# app.py
import gradio as gr
from PIL import Image
import base64
import requests
import os
from io import BytesIO
from utils.planner import extract_scene_plan # 🧠 Brain Layer
# πŸ” Hugging Face keys
HF_API_KEY = os.getenv("HF_API_KEY")
SDXL_MODEL_ID = "fal-ai/fast-sdxl/image-to-image" # βœ… Correct model for image-to-image
SDXL_API_URL = f"https://api-inference.huggingface.co/models/{SDXL_MODEL_ID}"
HEADERS = {"Authorization": f"Bearer {HF_API_KEY}"}
# πŸš€ Image generation (img2img)
def process_image(prompt, image, num_variations):
try:
print("🧠 Prompt received:", prompt)
# Step 1: Brain Layer
reasoning_json = extract_scene_plan(prompt)
print("🧠 Scene plan extracted:", reasoning_json)
# Step 2: Encode input image
buffered = BytesIO()
image.save(buffered, format="JPEG")
img_bytes = buffered.getvalue()
encoded_image = base64.b64encode(img_bytes).decode("utf-8")
# Step 3: Send image + prompt to HF API
outputs = []
for i in range(num_variations):
payload = {
"image": encoded_image,
"prompt": prompt,
"negative_prompt": "blurry, deformed, cropped",
"num_inference_steps": 25,
"guidance_scale": 7.5
}
print(f"πŸ“€ Sending request to HF (variation {i+1})")
response = requests.post(SDXL_API_URL, headers=HEADERS, json=payload)
if response.status_code == 200:
try:
result_json = response.json()
if "images" in result_json:
base64_img = result_json["images"][0]
result_image = Image.open(BytesIO(base64.b64decode(base64_img)))
outputs.append(result_image)
print(f"βœ… Decoded image variation {i+1} successfully")
else:
print(f"⚠️ No 'images' key found in response")
outputs.append("❌ No image in response.")
except Exception as decode_err:
print("❌ Image decode error:", decode_err)
outputs.append("❌ Failed to decode image.")
else:
print(f"❌ HF API error: {response.status_code} - {response.text}")
outputs.append(f"Error {response.status_code}: {response.text}")
return outputs, reasoning_json
except Exception as e:
print("❌ General Exception in process_image:", e)
return ["Processing error occurred"], {"error": str(e)}
# 🎨 Gradio UI
with gr.Blocks() as demo:
gr.Markdown("# 🧠 NewCrux AI Demo: Image-to-Image using Fast SDXL + Brain Layer")
with gr.Row():
with gr.Column():
prompt_input = gr.Textbox(label="Enter Prompt")
image_input = gr.Image(type="pil", label="Upload Product Image")
variation_slider = gr.Slider(1, 4, step=1, value=1, label="Number of Variations")
generate_btn = gr.Button("Generate")
with gr.Column():
output_gallery = gr.Gallery(
label="Generated Image Variations",
columns=2,
rows=2,
height="auto"
)
json_output = gr.JSON(label="Brain Layer Reasoning (Scene Plan)")
generate_btn.click(
fn=process_image,
inputs=[prompt_input, image_input, variation_slider],
outputs=[output_gallery, json_output]
)
demo.launch(share=True)