File size: 4,695 Bytes
f86ef0c
 
 
 
 
 
55f4105
d401370
1c8d8c6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f86ef0c
1c8d8c6
7d7b90c
 
 
 
 
 
1c8d8c6
 
 
 
 
f86ef0c
227d5b9
1c8d8c6
227d5b9
 
1c8d8c6
f86ef0c
1b0d98c
a47cafd
eb5cb7c
 
f86ef0c
1c8d8c6
 
3eb21bd
e577eb4
1c8d8c6
 
e577eb4
 
1c8d8c6
 
 
 
 
9931d72
1c8d8c6
a6c4453
3e6f556
4f8ff75
7c7de36
 
1c8d8c6
 
7c7de36
1c8d8c6
 
 
 
 
 
 
f86ef0c
1c8d8c6
 
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
import gradio as gr
import requests
import io
import random
import os
from PIL import Image
from deep_translator import GoogleTranslator

# Словарь URL для различных моделей
MODEL_URLS = {
    "DALL-E 3 XL": "https://api-inference.huggingface.co/models/openskyml/dalle-3-xl",
    "Playground 2": "https://api-inference.huggingface.co/models/playgroundai/playground-v2-1024px-aesthetic",
    "Openjourney 4": "https://api-inference.huggingface.co/models/prompthero/openjourney-v4",
    "AbsoluteReality 1.8.1": "https://api-inference.huggingface.co/models/digiplay/AbsoluteReality_v1.8.1",
    # ...
}

# Функция для получения изображения от API модели
def get_image_from_api(prompt, model, headers, payload):
    response = requests.post(MODEL_URLS[model], headers=headers, json=payload)
    if response.status_code == 200:
        image_bytes = response.content
        image = Image.open(io.BytesIO(image_bytes))
        return image
    else:
        raise gr.Error(f"Ошибка {response.status_code}: {response.reason}")

# Функция для запроса к GPT (вы должны добавить свой код здесь)
def enhance_prompt_with_gpt(prompt):
    # Добавьте ваш код для запроса к GPT здесь...
    pass

# Функция для перевода текста через Google Translator
def translate_prompt(prompt, source_lang="ru", target_lang="en"):
    return GoogleTranslator(source=source_lang, target=target_lang).translate(prompt)

# Функция для генерации изображения
def generate_image(prompt, model, negative_prompt, steps, cfg_scale, sampler, seed, strength, use_gpt):
    if not prompt:
        raise gr.Error("Prompt не может быть пустым")

    if use_gpt:
        prompt = enhance_prompt_with_gpt(prompt)

    translated_prompt = translate_prompt(prompt)

    # Добавьте к prompt дополнительные параметры если нужно
    enhanced_prompt = f"{translated_prompt} | ultra detail, ultra elaboration, ultra quality, perfect."

    payload = {
        "inputs": enhanced_prompt,
        "is_negative": negative_prompt,
        "steps": steps,
        "cfg_scale": cfg_scale,
        "sampler": sampler,
        "seed": seed if seed != -1 else random.randint(1, 1000000000),
        "strength": strength
    }

    # Получаем токен из переменных окружения
    api_token = os.getenv("HF_API_TOKEN")
    headers = {"Authorization": f"Bearer {api_token}"}

    try:
        image = get_image_from_api(enhanced_prompt, model, headers, payload)
        return image
    except Exception as e:
        raise gr.Error(f"Ошибка при генерации изображения: {e}")

css = """
* {}
footer {visibility: hidden !important;}
"""

# Создание интерфейса Gradio
with gr.Blocks(css=css) as dalle_interface:
    with gr.Tab("Базовые настройки"):
        with gr.Row():
            text_prompt = gr.Textbox(label="Prompt", placeholder="Описание изображения", lines=3)
            model = gr.Radio(label="Модель", value="DALL-E 3 XL", choices=list(MODEL_URLS.keys()))

    with gr.Tab("Расширенные настройки"):
        negative_prompt = gr.Textbox(label="Negative Prompt", placeholder="Чего не должно быть на изображении", lines=3)
        steps = gr.Slider(label="Sampling steps", value=35, minimum=1, maximum=100, step=1)
        cfg = gr.Slider(label="CFG Scale", value=7, minimum=1, maximum=20, step=1)
        method = gr.Radio(label="Sampling method", value="DPM++ 2M Karras", choices=["DPM++ 2M Karras", "DPM++ SDE Karras", "Euler", "Euler a", "Heun", "DDIM"])
        strength = gr.Slider(label="Strength", value=0.7, minimum=0, maximum=1, step=0.001)
        seed = gr.Slider(label="Seed", value=-1, minimum=-1, maximum=1000000000, step=1)
        use_gpt = gr.Checkbox(label="Use GPT to enhance prompt", value=False)

    with gr.Tab("Информация"):
        gr.Textbox(label="Prompt template", value="{prompt} | ultra detail, ultra elaboration, ultra quality, perfect.")

    with gr.Row():
        generate_button = gr.Button("Generate Image")

    with gr.Row():
        image_output = gr.Image(type="pil", label="Generated Image")

    generate_button.click(
        generate_image,
        inputs=[text_prompt, model, negative_prompt, steps, cfg, method, seed, strength, use_gpt],
        outputs=image_output
    )

# Запуск интерфейса
dalle_interface.launch(show_api=False, share=False)