Spaces:
Paused
Paused
File size: 5,173 Bytes
ce207c2 1a41a9d ce207c2 3975802 ce207c2 2196d1b ce207c2 f8ba79d 2196d1b ce207c2 1a41a9d 33df38a 1a41a9d 2196d1b d09d81b 47c214a d09d81b 2196d1b 47c214a 2196d1b ce207c2 33df38a ce207c2 1a41a9d ce207c2 1a41a9d ce207c2 33df38a ce207c2 d09d81b 1a41a9d ce207c2 33df38a 2196d1b 33df38a d09d81b ce207c2 2196d1b |
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 |
import gradio as gr
import numpy as np
import PIL.Image as Image
import random
import time
# Список моделей с отображаемыми названиями и внутренними именами
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):
# Проверка очереди
if len(queue) >= 150:
yield None, "Очередь переполнена. Пожалуйста, подождите.", None
return
# Добавляем задачу в очередь
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}"
)
# Отправляем текст параметров
yield None, params_text, seed
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)
# Обновление изображения
yield image, None, None
# Удаляем задачу из очереди
queue.remove(task_id)
# Возвращаем финальное изображение и параметры
yield 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
],
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() |