cedpsam's picture
Update app.py
1856269 verified
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)