Spaces:
Sleeping
Sleeping
File size: 1,882 Bytes
dfda139 a0bcfb0 5b18b65 6c05b54 a0bcfb0 dfda139 fe614be a0bcfb0 fe614be dfda139 a0bcfb0 dfda139 6c05b54 dfda139 fe614be a0bcfb0 dfda139 5b18b65 fe614be 5b18b65 6c05b54 fe614be 5b18b65 a0bcfb0 fe614be 5b18b65 fe614be a0bcfb0 5b18b65 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
import os
import requests
import gradio as gr
import base64
from io import BytesIO
from PIL import Image
API_KEY = os.getenv("GOOGLE_API_KEY")
def image_generation(prompt):
if not API_KEY:
return "❌ API key not found. Please add GOOGLE_API_KEY in your Hugging Face secrets."
# Use Gemini's free image generation model
url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-preview-image-generation:generate?key={API_KEY}"
headers = {"Content-Type": "application/json"}
data = {"prompt": {"text": prompt}}
try:
res = requests.post(url, headers=headers, json=data)
except Exception as e:
return f"❌ Request failed: {str(e)}"
if res.status_code != 200:
return f"❌ Error {res.status_code}:\n{res.text}"
try:
result = res.json()
except Exception:
return f"❌ Invalid JSON response:\n{res.text}"
# Extract image if present
if "candidates" in result:
for candidate in result["candidates"]:
if "content" in candidate:
for part in candidate["content"].get("parts", []):
if "inline_data" in part:
image_base64 = part["inline_data"].get("data")
if image_base64:
image = Image.open(BytesIO(base64.b64decode(image_base64)))
return image
return f"⚠️ No image data found.\n\nFull response:\n{result}"
iface = gr.Interface(
fn=image_generation,
inputs=gr.Textbox(label="Enter your prompt", placeholder="e.g. A futuristic city under sunset"),
outputs=gr.Image(label="Generated Image"),
title="Google Gemini Image Generator",
description="Uses gemini-2.0-flash-preview-image-generation (free-tier). Educational purpose only."
)
if __name__ == "__main__":
iface.launch() |