Spaces:
Paused
Paused
File size: 5,175 Bytes
ce207c2 1a41a9d ce207c2 3975802 d09d81b ce207c2 d09d81b ce207c2 d09d81b ce207c2 1a41a9d 33df38a 1a41a9d d09d81b 47c214a d09d81b 47c214a d09d81b ce207c2 33df38a ce207c2 1a41a9d ce207c2 1a41a9d ce207c2 33df38a ce207c2 d09d81b 1a41a9d ce207c2 33df38a 47c214a d09d81b 47c214a 33df38a d09d81b ce207c2 1e89a47 |
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 |
import gradio as gr
import numpy as np
import PIL.Image as Image
import random
import time
import threading
# Список моделей с отображаемыми названиями и внутренними именами
models = {
"FLUX.1-dev": "black-forest-labs/FLUX.1-dev",
"flux-RealismLora": "XLabs-AI/flux-RealismLora",
"Midjourney": "Jovie/Midjourney",
"Stable Diffusion v1-5": "stable-diffusion-v1-5/stable-diffusion-v1-5",
"Pixel Art XL": "nerijs/pixel-art-xl",
"Knitted Character Flux LoRA": "prithivMLmods/Knitted-Character-Flux-LoRA",
"Flux Ghibsky Illustration": "aleksa-codes/flux-ghibsky-illustration",
"Flux Super Realism LoRA": "strangerzonehf/Flux-Super-Realism-LoRA",
"Flux Game Assets LoRA v2": "gokaygokay/Flux-Game-Assets-LoRA-v2",
"Flux Animex v2 LoRA": "strangerzonehf/Flux-Animex-v2-LoRA",
"Flux Qwen Capybara": "cfahlgren1/flux-qwen-capybara",
"Softserve Anime": "alvdansen/softserve_anime",
"FLUX Aesthetic Anime": "dataautogpt3/FLUX-AestheticAnime",
"FLUX Animeo v1 LoRA": "strangerzonehf/Flux-Animeo-v1-LoRA",
"Fractured Line Flare": "prithivMLmods/Fractured-Line-Flare",
"Castor 3D Portrait Flux LoRA": "prithivMLmods/Castor-3D-Portrait-Flux-LoRA"
}
# Очередь на генерации
queue = []
def generate_image(prompt, model_name, width, height, seed, steps, guidance_scale, random_seed, output_image, params_textbox):
# Проверка очереди
if len(queue) >= 150:
return "Очередь переполнена. Пожалуйста, подождите.", None, None
# Добавляем задачу в очередь
task_id = random.randint(100000, 999999)
queue.append(task_id)
# Генерация сида, если выбрана галочка "Случайный сид"
if random_seed:
seed = random.randint(0, 1000000)
# Формирование текста параметров
params_text = (
f"Промпт: {prompt}\n"
f"Модель: {model_name}\n"
f"Размер: {width}x{height}\n"
f"Сид: {seed}\n"
f"Шаги: {steps}\n"
f"Гуидансе скейл: {guidance_scale}"
)
# Обновление параметров
params_textbox.update(params_text)
for step in range(steps):
# Имитация генерации изображения
time.sleep(random.uniform(0.1, 0.5)) # Таймаут до 0.5 секунды
# Имитация изображения (шум)
image_array = np.random.randint(0, 256, (height, width, 3), dtype=np.uint8)
image = Image.fromarray(image_array)
# Обновление изображения
output_image.update(image)
# Удаляем задачу из очереди
queue.remove(task_id)
return output_image, params_text, seed
# Создание интерфейса
with gr.Blocks() as demo:
gr.Markdown("# Генератор изображений")
with gr.Row():
prompt_textbox = gr.Textbox(label="Промпт", placeholder="Введите ваш промпт здесь", lines=2)
with gr.Row():
model_dropdown = gr.Dropdown(list(models.keys()), label="Модель", value="FLUX.1-dev")
with gr.Row():
with gr.Column():
width_slider = gr.Slider(128, 1024, value=512, step=64, label="Ширина")
with gr.Column():
height_slider = gr.Slider(128, 1024, value=512, step=64, label="Высота")
with gr.Row():
seed_slider = gr.Slider(0, 1000000, value=random.randint(0, 1000000), step=1, label="Сид")
random_seed_checkbox = gr.Checkbox(label="Случайный сид")
with gr.Row():
steps_slider = gr.Slider(1, 100, value=50, step=1, label="Шаги")
guidance_scale_slider = gr.Slider(0.1, 20.0, value=7.5, step=0.1, label="Гуидансе скейл")
generate_button = gr.Button("Сгенерировать изображение")
output_image = gr.Image(label="Сгенерированное изображение")
params_textbox = gr.Textbox(label="Параметры генерации", interactive=False)
generate_button.click(
fn=generate_image,
inputs=[
prompt_textbox,
model_dropdown,
width_slider,
height_slider,
seed_slider,
steps_slider,
guidance_scale_slider,
random_seed_checkbox,
output_image,
params_textbox
],
outputs=[output_image, params_textbox, seed_slider]
)
demo.queue(max_size=150, api_open=False)
demo.launch(share=False, server_port=7860)
# Скрытие футера
hide_footer = """
<style>
.gradio-container .footer {
display: none !important;
}
</style>
"""
demo = demo.add_css(hide_footer)
# Установка таймаута
demo.queue(api_name="/generate").set_config(max_size=150, api_open=False, max_threads=1, timeout=125)
demo.launch()
|