| import gradio as gr |
| import requests |
| from PIL import Image |
| import io |
|
|
| |
| MODEL_INFO = { |
| "None": "Default model (good for general purposes)", |
| "stability": "Stability AI's Stable Diffusion (balanced quality)", |
| "openjourney": "Midjourney-style images", |
| "dreamlike": "Dreamlike photorealistic art", |
| "protogen": "Sci-fi and futuristic styles", |
| "sd14": "Stable Diffusion 1.4 (classic model)", |
| "sd21": "Stable Diffusion 2.1 (improved details)", |
| "kontext": "Context-aware generation", |
| "gptimage": "GPT-assisted image generation", |
| "anything": "Anime-style generation", |
| "realistic": "Photorealistic outputs", |
| "analog": "Film photography style", |
| "arcanediffusion": "Fantasy art style", |
| "dreamshaper": "Enhanced creative variations", |
| "deliberate": "Precise prompt following", |
| "revanimated": "Animated/cartoon styles", |
| "meinamix": "Anime/portrait hybrid" |
| } |
|
|
| |
| |
| |
| def get_models(): |
| try: |
| r = requests.get("https://image.pollinations.ai/models", timeout=10) |
| models = [m.strip() for m in r.text.splitlines() if m.strip()] |
| except: |
| |
| models = list(MODEL_INFO.keys()) |
| |
| |
| for m in MODEL_INFO: |
| if m not in models and m != "None": |
| models.append(m) |
| |
| |
| models = sorted(models) |
| if "None" in models: |
| models.remove("None") |
| models.insert(0, "None") |
| return models |
|
|
| |
| |
| |
| def generate_image(prompt, model): |
| if model == "None": |
| model = "" |
| |
| url = f"https://image.pollinations.ai/prompt/{prompt}?nologo=true&seed=random" |
| if model: |
| url += f"&model={model}" |
| |
| try: |
| r = requests.get(url, timeout=30) |
| r.raise_for_status() |
| img = Image.open(io.BytesIO(r.content)) |
| return img |
| except Exception as e: |
| raise gr.Error(f"Failed to generate image: {str(e)}") |
|
|
| |
| |
| |
| models = get_models() |
|
|
| with gr.Blocks(theme="soft") as demo: |
| gr.Markdown("""# Openimage |
| ### Select a model style that matches your desired output |
| """) |
| |
| with gr.Row(): |
| with gr.Column(scale=3): |
| prompt_box = gr.Textbox( |
| label="Prompt", |
| placeholder="A cat wearing sunglasses on the moon...", |
| lines=2 |
| ) |
| |
| |
| model_dropdown = gr.Dropdown( |
| choices=models, |
| value="None", |
| label="Model Style", |
| info="Select a generation style", |
| interactive=True, |
| filterable=True, |
| elem_classes="model-selector" |
| ) |
| |
| |
| model_description = gr.Markdown(MODEL_INFO["None"]) |
| |
| |
| def update_description(model): |
| return MODEL_INFO.get(model, "No description available") |
| |
| model_dropdown.change( |
| fn=update_description, |
| inputs=model_dropdown, |
| outputs=model_description |
| ) |
| |
| generate_btn = gr.Button("Generate", variant="primary") |
| |
| with gr.Column(scale=3): |
| output_img = gr.Image(type="pil", label="Generated Image") |
| |
| generate_btn.click( |
| fn=generate_image, |
| inputs=[prompt_box, model_dropdown], |
| outputs=output_img |
| ) |
|
|
| if __name__ == "__main__": |
| demo.launch() |