import os import tempfile from PIL import Image import gradio as gr import google.generativeai as genai # Hardcode the Gemini API key GEMINI_API_KEY = "AIzaSyDL5Rilo7ptJpUOZdY6wy8PJYUcVcnDADs" def configure_api_key(): """Configure the Gemini API key.""" if not GEMINI_API_KEY: raise gr.Error("Gemini API key is not set.") genai.configure(api_key=GEMINI_API_KEY) def generate(text, images, model="gemini-2.5-flash"): """Generate content using the Gemini model.""" configure_api_key() # Convert images to Gemini-compatible format contents = [] for img in images: if img.mode == "RGBA": img = img.convert("RGB") contents.append(img) contents.append(text) try: response = genai.GenerativeModel(model).generate_content(contents) text_response = "" image_path = None for part in response.candidates[0].content.parts: if hasattr(part, 'text') and part.text: text_response += part.text + "\n" elif hasattr(part, 'inline_data') and part.inline_data: # Save generated image to a temporary file with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as tmp: image_path = tmp.name generated_image = Image.open(BytesIO(part.inline_data.data)) generated_image.save(image_path) print(f"Generated image saved to: {image_path} with prompt: {text}") return image_path, text_response except Exception as e: raise gr.Error(f"Error generating content: {str(e)}") def load_uploaded_images(uploaded_files): """Load and display uploaded images immediately.""" uploaded_images = [] if uploaded_files: for file in uploaded_files: if file.name.lower().endswith(('.png', '.jpg', '.jpeg', '.webp')): img = Image.open(file.name) uploaded_images.append(img) return uploaded_images def process_image_and_prompt(uploaded_files, prompt): """Process uploaded images and prompt to generate output.""" try: if not uploaded_files: raise gr.Error("Please upload at least one image.") if not prompt: raise gr.Error("Please provide a prompt.") # Load images images = load_uploaded_images(uploaded_files) # Generate content image_path, text_response = generate( text=prompt, images=images ) # Prepare outputs output_images = [Image.open(image_path)] if image_path else None return images, output_images, text_response except Exception as e: raise gr.Error(f"Error: {str(e)}") # Gradio interface with gr.Blocks(css="style.css") as demo: gr.HTML("""
Powered by Gradio⚡️ | Duplicate this Space | Learn about Gemini API