File size: 5,103 Bytes
bb6b552
 
 
 
274bfa8
 
 
9d32516
 
 
 
 
bb6b552
 
 
 
 
626929c
 
3ea67c2
626929c
 
 
 
 
274bfa8
 
 
bb6b552
 
f44544a
bb6b552
 
 
 
d7843e6
f44544a
be7b373
f44544a
be7b373
 
 
 
 
 
626929c
f44544a
be7b373
 
bb6b552
d7843e6
 
ccf1527
d7843e6
 
 
 
 
ccf1527
d7843e6
 
bb6b552
 
 
9d32516
 
 
626929c
 
f44544a
9d32516
 
 
 
ba9b248
626929c
9d32516
bb6b552
 
 
 
 
f44544a
bb6b552
 
 
 
 
 
 
 
 
 
 
f48b5bb
bb6b552
 
 
 
 
626929c
bb6b552
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f44544a
5114264
f44544a
 
626929c
 
 
 
 
 
 
 
1856269
 
 
 
 
 
 
bb6b552
 
 
 
 
 
 
 
 
 
 
f44544a
626929c
 
f44544a
c6825c2
c026e09
bb6b552
 
 
 
 
be7b373
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
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)