| | 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"], 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() |
| |
|