| import gradio as gr |
| import requests |
| import random |
| from io import BytesIO |
| from PIL import Image |
| import os |
| import time |
|
|
| |
| BASE_URL = os.environ.get('POLLINATIONS_URL') |
|
|
| def generate_image(prompt, model): |
| if not prompt: |
| raise gr.Error("Please enter a prompt.") |
|
|
| |
| seed = random.randint(1, 999999) |
|
|
| |
| url = f"{BASE_URL}{prompt}?width=2048&height=2048&seed={seed}&nologo=true&model={model}" |
|
|
| max_retries = 2 |
| for attempt in range(max_retries): |
| try: |
| response = requests.get(url, stream=True) |
| response.raise_for_status() |
|
|
| |
| 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) |
| 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)}") |
|
|
| |
| 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") |
|
|
| 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() |
|
|