|
import gradio as gr |
|
import os |
|
import sys |
|
import random |
|
import string |
|
import time |
|
from queue import Queue |
|
from threading import Thread |
|
import requests |
|
|
|
model_interface = gr.Interface.load("models/segmind/SSD-1B") |
|
API_URL = "https://api-inference.huggingface.co/models/segmind/SSD-1B" |
|
|
|
|
|
def restart_script_periodically(): |
|
while True: |
|
random_time = random.randint(540, 600) |
|
time.sleep(random_time) |
|
os.execl(sys.executable, sys.executable, *sys.argv) |
|
|
|
restart_thread = Thread(target=restart_script_periodically, daemon=True) |
|
restart_thread.start() |
|
|
|
queue = Queue() |
|
queue_threshold = 100 |
|
|
|
def add_random_noise(prompt, noise_level=0.00): |
|
if noise_level == 0: |
|
noise_level = 0.00 |
|
percentage_noise = noise_level * 5 |
|
num_noise_chars = int(len(prompt) * (percentage_noise / 100)) |
|
noise_indices = random.sample(range(len(prompt)), num_noise_chars) |
|
prompt_list = list(prompt) |
|
noise_chars = list(string.ascii_letters + string.punctuation + ' ' + string.digits) |
|
noise_chars.extend(['๐', '๐ฉ', '๐', '๐ค', '๐', '๐ค', '๐ญ', '๐', '๐ท', '๐คฏ', '๐คซ', '๐ฅด', '๐ด', '๐คฉ', '๐ฅณ', '๐', '๐ฉ', '๐คช', '๐', '๐คข', '๐', '๐น', '๐ป', '๐ค', '๐ฝ', '๐', '๐', '๐
', '๐', '๐', '๐', '๐', '๐', '๐', '๐ฎ', 'โค๏ธ', '๐', '๐', '๐', '๐', '๐ถ', '๐ฑ', '๐ญ', '๐น', '๐ฆ', '๐ป', '๐จ', '๐ฏ', '๐ฆ', '๐', '๐ฅ', '๐ง๏ธ', '๐', '๐', '๐ฅ', '๐ด', '๐', '๐บ', '๐ป', '๐ธ', '๐จ', '๐
', '๐', 'โ๏ธ', 'โ๏ธ', 'โ๏ธ', 'โ๏ธ', '๐ค๏ธ', 'โ
๏ธ', '๐ฅ๏ธ', '๐ฆ๏ธ', '๐ง๏ธ', '๐ฉ๏ธ', '๐จ๏ธ', '๐ซ๏ธ', 'โ๏ธ', '๐ฌ๏ธ', '๐จ', '๐ช๏ธ', '๐']) |
|
for index in noise_indices: |
|
prompt_list[index] = random.choice(noise_chars) |
|
return "".join(prompt_list) |
|
|
|
|
|
|
|
import uuid |
|
|
|
|
|
|
|
|
|
|
|
request_counter = 0 |
|
|
|
IMAGE_STYLES = [ |
|
"No style", |
|
"Cinematic", |
|
"Photographic", |
|
"Anime", |
|
"Manga", |
|
"Digital Art", |
|
"Pixel art", |
|
"Fantasy art", |
|
"Neonpunk", |
|
"3D Model" |
|
] |
|
|
|
DEFAULT_IMAGE_STYLE = "Cinematic" |
|
|
|
|
|
|
|
def generate_txt2img(model_interface, prompt, is_negative=False, image_style="None style", steps=50, cfg_scale=7, seed=None): |
|
if image_style == "None style": |
|
payload = { |
|
"inputs": prompt + ", 8k", |
|
"is_negative": is_negative, |
|
"steps": steps, |
|
"cfg_scale": cfg_scale, |
|
"seed": seed if seed is not None else random.randint(-1, 2147483647) |
|
} |
|
elif image_style == "Cinematic": |
|
payload = { |
|
"inputs": prompt + ", realistic, detailed, textured, skin, hair, eyes, by Alex Huguet, Mike Hill, Ian Spriggs, JaeCheol Park, Marek Denko", |
|
"is_negative": is_negative + ", abstract, cartoon, stylized", |
|
"steps": steps, |
|
"cfg_scale": cfg_scale, |
|
"seed": seed if seed is not None else random.randint(-1, 2147483647) |
|
} |
|
elif image_style == "Digital Art": |
|
payload = { |
|
"inputs": prompt + ", faded , vintage , nostalgic , by Jose Villa , Elizabeth Messina , Ryan Brenizer , Jonas Peterson , Jasmine Star", |
|
"is_negative": is_negative + ", sharp , modern , bright", |
|
"steps": steps, |
|
"cfg_scale": cfg_scale, |
|
"seed": seed if seed is not None else random.randint(-1, 2147483647) |
|
} |
|
elif image_style == "Portrait": |
|
payload = { |
|
"inputs": prompt + ", soft light, sharp, exposure blend, medium shot, bokeh, (hdr:1.4), high contrast, (cinematic, teal and orange:0.85), (muted colors, dim colors, soothing tones:1.3), low saturation, (hyperdetailed:1.2), (noir:0.4), (natural skin texture, hyperrealism, soft light, sharp:1.2)", |
|
"is_negative": is_negative, |
|
"steps": steps, |
|
"cfg_scale": cfg_scale, |
|
"seed": seed if seed is not None else random.randint(-1, 2147483647) |
|
} |
|
|
|
image_bytes = requests.post(API_URL, headers=headers, json=payload).content |
|
image = Image.open(io.BytesIO(image_bytes)) |
|
return image |
|
|
|
|
|
|
|
|
|
with gr.Blocks(css=".gradio-container {background-color: #fdf7e6;} footer{display:none !important;}",) as demo: |
|
|
|
with gr.Column(elem_id="col-container"): |
|
|
|
with gr.Row(variant="compact"): |
|
prompt = gr.Textbox( |
|
lines=8, |
|
label="Enter your prompt", |
|
show_label=False, |
|
max_lines=10, |
|
placeholder="Full Prompt", |
|
).style( |
|
container=False, |
|
textarea={'height': '400px'} |
|
) |
|
|
|
run = gr.Button("Generate Images").style(full_width=False) |
|
|
|
with gr.Accordion("Advanced options", open=False): |
|
with gr.Row(): |
|
style_selection = gr.Radio( |
|
show_label=True, container=True, interactive=True, |
|
choices=IMAGE_STYLES, |
|
value=DEFAULT_IMAGE_STYLE, |
|
label='Image Style' |
|
) |
|
|
|
negative_prompt = gr.Textbox(label="Negative Prompt (Optional)", placeholder="Example: blurry, unfocused", lines=2) |
|
|
|
with gr.Row(): |
|
with gr.Row(): |
|
noise_level = gr.Slider(minimum=0.0, maximum=3, step=0.1, label="Noise Level") |
|
|
|
with gr.Row(): |
|
with gr.Row(): |
|
output1 = gr.Image(label="", show_label=False, show_share_button=False) |
|
output2 = gr.Image(label="", show_label=False, show_share_button=False) |
|
|
|
|
|
run.click(generate_txt2img, inputs=[prompt, negative_prompt, style_selection, noise_level], outputs=[output1]) |
|
run.click(generate_txt2img, inputs=[prompt, negative_prompt, style_selection, noise_level], outputs=[output2]) |
|
|
|
demo.launch(enable_queue=True, inline=True) |
|
|