llamameta's picture
Update app.py
0ace4ba verified
raw
history blame contribute delete
2.2 kB
import gradio as gr
import requests
import random
from io import BytesIO
from PIL import Image
import os
import time
# Ambil base URL dari HF Secret (sembunyikan dari code)
BASE_URL = os.environ.get('POLLINATIONS_URL') # Fallback jika secret tidak ada (untuk testing lokal)
def generate_image(prompt, model):
if not prompt:
raise gr.Error("Please enter a prompt.")
# Randomize seed
seed = random.randint(1, 999999)
# Construct full URL (direct to Pollinations)
url = f"{BASE_URL}{prompt}?width=2048&height=2048&seed={seed}&nologo=true&model={model}"
max_retries = 2 # Retry jika error (misal limit)
for attempt in range(max_retries):
try:
response = requests.get(url, stream=True)
response.raise_for_status() # Raise error jika bukan 200
# Convert to PIL Image
img = Image.open(BytesIO(response.content))
return img
except requests.exceptions.HTTPError as e:
if response.status_code == 500 and 'Access to kontext model' in response.text:
if attempt < max_retries - 1:
time.sleep(1) # Delay sebelum retry
continue
raise gr.Error("Access denied for kontext model (limit reached). Try turbo/flux or authenticate at pollinations.ai.")
else:
raise gr.Error(f"Error: {response.status_code} - {response.text}")
except Exception as e:
raise gr.Error(f"Unexpected error: {str(e)}")
# Gradio Interface
with gr.Blocks() as demo:
gr.Markdown("# Fake flux pro Image Generator")
prompt_input = gr.Textbox(label="Prompt", placeholder="e.g., emma watson")
model_input = gr.Dropdown(choices=["kontext", "turbo", "flux","imagen-4-ultra","imagen-4"], label="Model", value="turbo") # Default turbo (lebih reliable)
generate_btn = gr.Button("Generate")
output_image = gr.Image(label="Generated Image")
generate_btn.click(generate_image, inputs=[prompt_input, model_input], outputs=output_image)
demo.queue(max_size=None, default_concurrency_limit=None)
demo.launch() # Tidak ada queue=False atau demo.queue() untuk disable antrian