File size: 7,239 Bytes
7270c9c
 
 
 
 
 
 
 
 
 
 
 
 
 
ead7966
de2b61f
7270c9c
 
 
12c3b25
 
 
 
 
 
 
 
 
 
 
6a968b4
12c3b25
ff50399
ef84d25
 
6513c75
 
 
 
 
 
 
 
12c3b25
 
6a968b4
 
12c3b25
de2b61f
12c3b25
 
 
 
 
 
 
 
 
 
 
 
de2b61f
12c3b25
 
ff50399
12c3b25
 
de2b61f
12c3b25
 
 
 
 
 
 
 
 
 
 
 
de2b61f
12c3b25
 
ff50399
12c3b25
7270c9c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12c3b25
7270c9c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12c3b25
7270c9c
 
 
d9ea7d0
7270c9c
d9ea7d0
 
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
import gradio as gr
import requests
import time
import json
from contextlib import closing
from websocket import create_connection
from deep_translator import GoogleTranslator
from langdetect import detect
import os
from PIL import Image
import io
import base64
import re
from gradio_client import Client
from random import randrange
from fake_useragent import UserAgent


def flip_text(prompt, negative_prompt, task, steps, sampler, cfg_scale, seed):
    prompt = re.sub(r'[^a-zA-Zа-яА-Я\s]', '', prompt)
    
    try:
        language = detect(prompt)
        if language == 'ru':
            prompt = GoogleTranslator(source='ru', target='en').translate(prompt)
            print(prompt)
    except:
        pass

    try:
        with closing(create_connection(f"wss://artgan-diffusion-api.hf.space/queue/join")) as conn:
            conn.send('{"fn_index":0,"session_hash":""}')
            conn.send(f'{{"fn_index":0,"data":["{prompt}","",1024,1024,4,42,1,20,10],"session_hash":""}}')
            c = 0
            while c < 120:
                status = json.loads(conn.recv())['msg']
                if status == 'estimation':
                    time.sleep(1)
                    c += 1
                    continue
                if status == 'process_starts':
                    break            
            photo = json.loads(conn.recv())['output']['data'][0][0]['name']
            photo = "https://artgan-diffusion-api.hf.space/file=" + photo
            return photo
    except Exception as e:
        print("ERROR -->", e)
        try:
            ua = UserAgent()
            headers = {
                'authority': 'ehristoforu-stable-cascade.hf.space',
                'accept': 'text/event-stream',
                'accept-language': 'ru,en;q=0.9,la;q=0.8,ja;q=0.7',
                'cache-control': 'no-cache',
                'referer': 'https://ehristoforu-stable-cascade.hf.space/?__theme=light',
                'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "YaBrowser";v="24.1", "Yowser";v="2.5"',
                'sec-ch-ua-mobile': '?0',
                'sec-ch-ua-platform': '"Windows"',
                'sec-fetch-dest': 'empty',
                'sec-fetch-mode': 'cors',
                'sec-fetch-site': 'same-origin',
                'user-agent': f'{ua.random}'
            }
            client = Client("https://ehristoforu-stable-cascade.hf.space", headers=headers)
            result = client.predict(prompt, '', 1024, 1024, True)
            return result[0]['image']
        except:
            ua = UserAgent()
            headers = {
                'authority': 'multimodalart-stable-cascade.hf.space',
                'accept': 'text/event-stream',
                'accept-language': 'ru,en;q=0.9,la;q=0.8,ja;q=0.7',
                'cache-control': 'no-cache',
                'referer': 'https://multimodalart-stable-cascade.hf.space/?__theme=light',
                'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "YaBrowser";v="24.1", "Yowser";v="2.5"',
                'sec-ch-ua-mobile': '?0',
                'sec-ch-ua-platform': '"Windows"',
                'sec-fetch-dest': 'empty',
                'sec-fetch-mode': 'cors',
                'sec-fetch-site': 'same-origin',
                'user-agent':  f'{ua.random}'
            }
            client = Client("multimodalart/stable-cascade", headers=headers)
            result = client.predict(prompt, negative_prompt, randrange(100000), 1024, 1024, 20, 4, 10, 0, 1, api_name="/run")
            return result


def mirror(image_output, scale_by, method, gfpgan, codeformer):

    url_up = os.getenv("url_up")
    url_up_f = os.getenv("url_up_f")

    print(url_up)
    print(url_up_f)

    scale_by = int(scale_by)
    gfpgan = int(gfpgan)
    codeformer = int(codeformer)
    
    with open(image_output, "rb") as image_file:
        encoded_string2 = base64.b64encode(image_file.read())
        encoded_string2 = str(encoded_string2).replace("b'", '')

    encoded_string2 = "data:image/png;base64," + encoded_string2
    data = {"fn_index":81,"data":[0,0,encoded_string2,None,"","",True,gfpgan,codeformer,0,scale_by,512,512,None,method,"None",1,False,[],"",""],"session_hash":""}
    print(data)
    r = requests.post(f"{url_up}", json=data, timeout=100)
    print(r.text)
    ph = f"{url_up_f}" + str(r.json()['data'][0][0]['name'])
    return ph

css = """
#generate {
    width: 100%;
    background: #e253dd !important;
    border: none;
    border-radius: 50px;
    outline: none !important;
    color: white;
}
#generate:hover {
    background: #de6bda !important;
    outline: none !important;
    color: #fff;
    }
footer {visibility: hidden !important;}
#image_output {
height: 100% !important;
}
"""

with gr.Blocks(css=css) as demo:

    with gr.Tab("Базовые настройки"):
        with gr.Row():
            prompt = gr.Textbox(placeholder="Введите описание изображения...", show_label=True, label='Описание изображения:', lines=3)
    with gr.Tab("Расширенные настройки"):
        with gr.Row():
            negative_prompt = gr.Textbox(placeholder="Negative Prompt", show_label=True, label='Negative Prompt:', lines=3, value="[deformed | disfigured], poorly drawn, [bad : wrong] anatomy, [extra | missing | floating | disconnected] limb, (mutated hands and fingers), blurry")
            seed = gr.Number(show_label=True, label="Seed:", minimum=1, maximum=1000000, value=1, step=1)
    
    with gr.Tab("Настройки апскейлинга"):
        with gr.Column():
            with gr.Row():
                scale_by = gr.Number(show_label=True, label="Во сколько раз увеличить:", minimum=1, maximum=2, value=2, step=1)
            with gr.Row():
                method = gr.Dropdown(show_label=True, value="ESRGAN_4x", label="Алгоритм увеличения", choices=["ScuNET GAN", "SwinIR 4x", "ESRGAN_4x", "R-ESRGAN 4x+", "R-ESRGAN 4x+ Anime6B"])
        with gr.Column():
            with gr.Row():
                gfpgan = gr.Slider(show_label=True, label="Эффект GFPGAN (для улучшения лица)", minimum=0, maximum=1, value=0, step=0.1)
            with gr.Row():
                codeformer = gr.Slider(show_label=True, label="Эффект CodeFormer (для улучшения лица)", minimum=0, maximum=1, value=0, step=0.1)
    
    with gr.Column():
        text_button = gr.Button("Сгенерировать изображение", variant='primary', elem_id="generate")
    with gr.Column():
        image_output = gr.Image(show_download_button=True, interactive=False, label='Результат:', elem_id='image_output', type='filepath')
        text_button.click(flip_text, inputs=[prompt, negative_prompt, seed], outputs=image_output, concurrency_limit=12)
        
        img2img_b = gr.Button("Увеличить изображение", variant='secondary')
        image_i2i = gr.Image(show_label=True, label='Увеличенное изображение:')
        img2img_b.click(mirror, inputs=[image_output, scale_by, method, gfpgan, codeformer], outputs=image_i2i)
    
#demo.launch()
demo.queue().launch(show_api=False)