dreamer / app.py
cutiee82's picture
Update app.py
5904bc3 verified
raw
history blame
3.69 kB
import io
import random
import time
from urllib.parse import quote
import gradio as gr
import requests
from PIL import Image
MAX_SEED = 2 ** 31 - 1
session = requests.Session()
def _fetch_url(*args, retries=5, **kwargs):
for i in range(retries + 1):
try:
response = session.get(*args, **kwargs)
response.raise_for_status()
return response.content
except requests.RequestException:
if response.status_code in {429, 500, 502, 503, 504}:
delay = min(2 ** i, 60)
time.sleep(delay)
else:
return None
return None
def add_to_gallery(image, gallery=None):
if gallery is None:
gallery = []
if image is not None:
gallery = gallery + [image]
return gallery
def generate(
prompt,
seed=None,
randomize_seed=True,
width=1024,
height=1024
):
if seed is None or randomize_seed:
seed = random.randint(0, MAX_SEED)
url = f"https://pollinations.ai/p/{quote(prompt)}?nologo=true&private=true"
params = dict(prompt=prompt, seed=seed, width=width, height=height)
image = _fetch_url(url, params=params)
if image:
return Image.open(io.BytesIO(image))
return None
with gr.Blocks(
title="Text-to-image UI",
css="footer {display: none !important}",
theme=gr.themes.Base(
primary_hue="red",
secondary_hue="red",
neutral_hue="neutral"
)
) as app:
gr.Markdown("# Text-to-Image UI")
with gr.Tab("🎨 Generate"):
result = gr.Image(
label="Image",
show_label=False,
format="jpeg",
interactive=False
)
with gr.Row(variant="panel"):
prompt = gr.Textbox(
label="Prompt",
show_label=False,
placeholder="Enter your prompt..",
max_lines=1,
container=False
)
btn = gr.Button("Generate", variant="primary")
with gr.Tab("βš™οΈ Settings"):
with gr.Row():
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=1344,
step=64,
value=1024
)
height = gr.Slider(
label="Height",
minimum=256,
maximum=1344,
step=64,
value=1024
)
with gr.Tab("πŸ–ΌοΈ Gallery"):
gallery = gr.Gallery(
label="Gallery",
show_label=False,
format="jpeg",
interactive=False
)
with gr.Accordion("ℹ️ About this UI", open=False):
gr.Markdown(f"""
* Created by [πŸ’ cherry-ghosts community](https://hf.co/cherry-ghosts)
* Powered by [🐝 Pollinations](https://pollinations.ai) | [GitHub](https://github.com/pollinations/pollinations)
* Running on [Gradio](https://www.gradio.app) v{gr.__version__}
""")
btn.click(
generate,
inputs=[prompt, seed, randomize_seed, width, height],
outputs=[result],
api_name="run"
).then(
add_to_gallery,
inputs=[result, gallery],
outputs=[gallery],
queue=False,
show_api=False
)
if __name__ == "__main__":
app.queue().launch(debug=True, ssr_mode=False)