File size: 3,611 Bytes
f86ef0c
 
689df9f
f86ef0c
 
 
 
 
619238b
 
e2e3c24
 
 
e9f9016
619238b
 
 
 
d3b167c
619238b
 
a081231
ee00b5d
 
f4e7385
 
1fc1aa6
f4e7385
 
e2e3c24
3f0dde0
55f2bb1
 
619238b
 
 
f86ef0c
6879969
619238b
17610a2
619238b
1974db4
c4b82ef
9adb21a
af16514
619238b
 
6879969
f86ef0c
f5b7834
f86ef0c
 
 
 
619238b
f86ef0c
57d84d6
 
 
619238b
57d84d6
 
 
 
 
c4b3ea9
f86ef0c
10540ed
f86ef0c
 
619238b
 
87f1ebb
619238b
 
87f1ebb
619238b
 
f86ef0c
 
 
8b990bd
5dd7553
8b990bd
 
dcbbf2e
1974db4
5dd7553
f86ef0c
 
 
1974db4
a408ff4
95ae0b9
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
import gradio as gr
import requests
import json
import io
import random
import os
from PIL import Image

API_BASE_URL = "https://api-inference.huggingface.co/models/"
MODEL_LIST = [
    "runwayml/stable-diffusion-v1-5",
    "CompVis/stable-diffusion-v1-4",
    "stabilityai/stable-diffusion-xl-base-1.0",
    "stabilityai/stable-diffusion-2",
    "openskyml/dalle-3-xl",
    "Linaqruf/animagine-xl-2.0",
    "Lykon/dreamshaper-7",
    "Linaqruf/animagine-xl",
    "prompthero/openjourney",
    "prompthero/openjourney-v4",
    "nerijs/pixel-art-xl",
    "Linaqruf/anything-v3.0",
    "playgroundai/playground-v2-1024px-aesthetic",
    "ilovecutiee/fantastical-art-lora",
    "segmind/SSD-1B",
    "segmind/Segmind-Vega",
    "WarriorMama777/OrangeMixs",
    "stablediffusionapi/anything-v5",
    "stablediffusionapi/realistic-vision-v51",
    "hakurei/waifu-diffusion",
    "digiplay/RunDiffusionFXPhotorealistic_v1",
    "stablediffusionapi/juggernaut-xl-v5",
    "dataautogpt3/OpenDalleV1.1"
]
API_TOKEN = os.getenv("HF_READ_TOKEN")  # Make sure to set your Hugging Face token
HEADERS = {"Authorization": f"Bearer {API_TOKEN}"}

def select_model(model_name):
    if model_name in MODEL_LIST:
        return f"{API_BASE_URL}{model_name}"

def generate_image(prompt, selected_model, is_negative=False, steps=1, cfg_scale=6, seed=None):
    if not prompt.strip():
        raise gr.Error("Error generating image: Input text is empty!")
        
    model_url = select_model(selected_model)
    API_URL = f"{model_url}"

    payload = {
        "inputs": prompt,
        "is_negative": is_negative,
        "steps": steps,
        "cfg_scale": cfg_scale,
        "seed": seed if seed is not None else random.randint(-1, 2147483647)
    }

    try:
        response = requests.post(API_URL, headers=HEADERS, json=payload)
        response.raise_for_status()
    
        image_bytes = io.BytesIO(response.content)
        image = Image.open(image_bytes)
        return image
        
    except requests.exceptions.RequestException as e:
        raise gr.Error("The service/model is unavailable. Please try again later, or select another model.")

with gr.Blocks(theme="miittnnss/green", title="Play with Stable Diffusion Models") as playground:
    gr.HTML(
        """
        <div style="text-align: center; margin: 0 auto;">
          <div style="display: inline-flex; align-items: center; gap: 0.8rem; font-size: 1.75rem;">
            <h1 style="font-weight: 900; margin-bottom: 7px; margin-top: 5px;">🎨🤖 Play with SD Models</h1> 
          </div>
          <p style="margin-bottom: 10px; font-size: 94%; line-height: 23px;">
            Explore and create your AI art with Stable Diffusion models!
          </p>
        </div>
        """
    )

    with gr.Row():
        image_output = gr.Image(type="pil", label="Output Image", elem_id="gallery")
        with gr.Column(elem_id="prompt-container"):
            text_prompt = gr.Textbox(label="Prompt", placeholder="a cute cat", lines=1, elem_id="prompt-text-input")
            model_dropdown = gr.Dropdown(label="Model", choices=MODEL_LIST, elem_id="model-dropdown", value="runwayml/stable-diffusion-v1-5")
            gen_button = gr.Button("Generate", variant='primary', elem_id="gen-button")

    with gr.Accordion("Advanced settings", open=False):
        negative_prompt = gr.Textbox(label="Negative Prompt", value="text, blurry, fuzziness", lines=1, elem_id="negative-prompt-text-input")

    gen_button.click(generate_image, inputs=[text_prompt, model_dropdown, negative_prompt], outputs=image_output)
    
playground.launch(show_api=False)