import gradio as gr import numpy as np import random import tenacity import requests from urllib.parse import quote from PIL import Image from io import BytesIO MAX_SEED = np.iinfo(np.int32).max MAX_IMAGE_SIZE = 1024 models_list=['flux', 'turbo', 'gptimage'] try: models_list=requests.get('https://image.pollinations.ai/models',timeout=2).json() except: pass @tenacity.retry(stop=tenacity.stop_after_attempt(3)|tenacity.stop_after_delay(120), wait=tenacity.wait_exponential(multiplier=2, min=10, max=120) ) def infer( prompt, seed, randomize_seed, width, height, # Enhancement enhance=False, # Auto-enhance prompt (default: False) image=None, # Input image URL for img2img # Privacy private=False, # Private generation (default: False) nologo=False, # Remove watermark (default: False) nofeed=False, # Don't add to public feed (default: False) model="flux" ): """ calling the pollinations.ai image generator Args: prompt: The description of the image (required) - "a fluffy dog in a forest" width: Image width in pixels height: Image height in pixels seed: A number to get the same image every time Returns: PIL.Image: The generated image. """ if randomize_seed: seed = random.randint(0, MAX_SEED) # Encode the prompt to handle spaces url = f"https://image.pollinations.ai/prompt/{quote(prompt)}" # Customize the image size and model params = {"width": width, "height": height, "model": model,"seed":seed} if image is not None and len(image)>1: params["image"]=image # Make the request response = requests.get(url, params=params, timeout=60) image_data = BytesIO(response.content) image = Image.open(image_data) return image, seed examples = [ "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", "An astronaut riding a green horse", "A delicious ceviche cheesecake slice" ] css = """ #col-container { margin: 0 auto; max-width: 640px; } """ with gr.Blocks(css=css) as demo: with gr.Column(elem_id="col-container"): gr.Markdown(" # Text-to-Image using pollinations ai") with gr.Row(): prompt = gr.Text( label="Prompt", show_label=False, max_lines=3, placeholder="Enter your prompt", container=False, ) run_button = gr.Button("Run", scale=0, variant="primary") result = gr.Image(label="Result", show_label=False) with gr.Accordion("Advanced Settings", open=False): seed = gr.Slider( label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0, ) randomize_seed = gr.Checkbox(label="Randomize seed", value=True) with gr.Row(): width = gr.Slider( label="Width", minimum=256, maximum=MAX_IMAGE_SIZE, step=32, value=1024, # Replace with defaults that work for your model ) height = gr.Slider( label="Height", minimum=256, maximum=MAX_IMAGE_SIZE, step=32, value=1024, # Replace with defaults that work for your model ) with gr.Row(): enhance= gr.Checkbox(label="enhance prompt", value=False) nologo=gr.Checkbox(label="nologo", value=False) nofeed=gr.Checkbox(label="nofeed", value=False) private=gr.Checkbox(label="private", value=False) image=gr.Text( label="image", show_label=False, max_lines=3, placeholder="image url", container=False, ) model=gr.Dropdown(models_list, label="model", info="selected model", interactive=True, show_label=False, container=False ) gr.Examples(examples=examples, inputs=[prompt]) gr.on( triggers=[run_button.click, prompt.submit], fn=infer, inputs=[ prompt, seed, randomize_seed, width, height, enhance, image, private, nologo, # Remove watermark (default: False) nofeed, # Don't add to public feed (default: False) ], outputs=[result, seed], ) if __name__ == "__main__": demo.launch(mcp_server=True)