testing1 / app.py
AkashKumarave's picture
Update app.py
15652b4 verified
raw
history blame
2.52 kB
import gradio as gr
from google import genai
from PIL import Image
from io import BytesIO
import base64
# Configure the Gemini API client with the hardcoded API key
GOOGLE_API_KEY = "AIzaSyDL5Rilo7ptJpUOZdY6wy8PJYUcVcnDADs"
client = genai.Client(api_key=GOOGLE_API_KEY)
def process_image(image, prompt):
try:
# Convert Gradio image (PIL Image) to base64
buffered = BytesIO()
image.save(buffered, format="PNG")
img_base64 = base64.b64encode(buffered.getvalue()).decode("utf-8")
# Prepare the content for the Gemini API
contents = [
{
"parts": [
{"text": prompt},
{
"inline_data": {
"mime_type": "image/png",
"data": img_base64
}
}
]
}
]
# Call the Gemini API
response = client.models.generate_content(
model="gemini-2.5-flash-image-preview",
contents=contents
)
# Process the response
for part in response.candidates[0].content.parts:
if part.inline_data is not None:
# Decode the generated image
img_data = base64.b64decode(part.inline_data.data)
img = Image.open(BytesIO(img_data))
return img
elif part.text is not None:
return f"Text response: {part.text}"
return "No image or text returned by the model."
except Exception as e:
return f"Error: {str(e)}"
# Create the Gradio interface
title = "Gemini 2.5 Flash Image Editor (Nano Banana)"
description = "Upload an image and provide a text prompt to generate or edit images using Google's Gemini 2.5 Flash Image Preview model."
interface = gr.Interface(
fn=process_image,
inputs=[
gr.Image(type="pil", label="Upload Image"),
gr.Textbox(label="Prompt", placeholder="e.g., 'Add a nano-banana to the image in a fancy restaurant setting'")
],
outputs=gr.Image(type="pil", label="Generated Image"),
title=title,
description=description,
examples=[
[None, "Create a minimalist composition with a single red maple leaf in the bottom-right, soft lighting, square image"],
[None, "Generate an image of a cat eating a nano-banana in a fancy restaurant"]
]
)
# Launch the app
if __name__ == "__main__":
interface.launch()