File size: 2,442 Bytes
f86ef0c
 
 
 
 
 
55f4105
 
f86ef0c
521a864
f86ef0c
 
 
37d740a
55f4105
 
 
 
 
cd28a2d
8fb92bc
cd28a2d
 
f86ef0c
f5b7834
f86ef0c
 
 
9e8c24d
f86ef0c
 
 
 
 
 
 
1b0d98c
eb5cb7c
 
f86ef0c
6b98730
3eb21bd
e577eb4
 
8172e17
cd28a2d
7c7de36
e577eb4
 
8172e17
9e8c24d
 
 
7c7de36
 
 
 
 
 
9e8c24d
f86ef0c
 
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
import gradio as gr
import requests
import io
import random
import os
from PIL import Image
from deep_translator import GoogleTranslator
from langdetect import detect

API_URL = "https://api-inference.huggingface.co/models/openskyml/dalle-3-xl"
API_TOKEN = os.getenv("HF_READ_TOKEN") # it is free
headers = {"Authorization": f"Bearer {API_TOKEN}"}

def query(prompt, model, is_negative=False, steps=20, cfg_scale=7, seed=-1):
    language = detect(prompt)
    
    if language == 'ru':
        prompt = GoogleTranslator(source='ru', target='en').translate(prompt)
        print(prompt)
    
    if model == 'DALL-E 3 XL':
        API_URL = "https://api-inference.huggingface.co/models/openskyml/dalle-3-xl"

    payload = {
        "inputs": prompt,
        "is_negative": is_negative,
        "steps": steps,
        "cfg_scale": cfg_scale,
        "seed": seed
        }

    image_bytes = requests.post(API_URL, headers=headers, json=payload).content
    image = Image.open(io.BytesIO(image_bytes))
    return image


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

with gr.Blocks(css=css) as dalle:
    with gr.Tab("Базовые настройки"):
        with gr.Row():
            with gr.Column(elem_id="prompt-container"):
                text_prompt = gr.Textbox(label="Prompt", placeholder="Описание изображения", lines=1, elem_id="prompt-text-input")
                model = gr.Radio(label="Модель", value="DALL-E 3 XL", choices=["DALL-E 3 XL"])
                

    with gr.Tab("Расширенные настройки"):
        negative_prompt = gr.Textbox(label="Negative Prompt", placeholder="Чего не должно быть на изображении", value="text, blurry, fuzziness", lines=1, elem_id="negative-prompt-text-input")
        steps = gr.Slider(label="Sampling Steps", value=20, minimum=1, maximum=30, step=1)
        cfg = gr.Slider(label="CFG Scale", value=1, minimum=1, maximum=20, step=1)
        seed = gr.Slider(label="Сид", value=-1, minimum=-1, maximum=2147483647, step=1)

    with gr.Row():
        text_button = gr.Button("Генерация", variant='primary', elem_id="gen-button")
    with gr.Row():
        image_output = gr.Image(type="pil", label="Изображение", elem_id="gallery")
        
    text_button.click(query, inputs=[text_prompt, model, negative_prompt, steps, cfg, seed], outputs=image_output)

dalle.launch(show_api=False)