Spaces:
Sleeping
Sleeping
File size: 6,452 Bytes
f1052d9 a67a3c8 95af88e 210ed13 b1328e8 210ed13 b4f9b4b a58c3bb ecc81cb 88e3d95 bc115c5 210ed13 f8fb4da f8416cc 096ee5a 210ed13 3ed5fef c6d02b3 1d16cc9 c6d02b3 2c7ffe4 f487489 a597e6b fd34825 706151f c6d02b3 dad7330 c6e402b 84291d5 7206ba2 a597e6b 48e1ac1 758f177 c6d02b3 84291d5 0307843 f2fa35d f487489 369a3fa 397731d 369a3fa 397731d 544df84 f2fa35d eb977a1 0307843 83d3e5a b4f9b4b 3261375 46822ac ebe916c 72493a8 5afec29 72493a8 ebe916c 452be41 9932afd b4f9b4b 2e21e1a 72493a8 2e21e1a 72493a8 3261375 ebe916c b4f9b4b 210ed13 f86add6 a345db9 840cd7b 647941b 0ec3daa 840cd7b a345db9 0ec3daa a345db9 763a02d 34c1550 33f3309 210ed13 0ec3daa 33f3309 f285313 5afec29 210ed13 2daa864 cacb176 91c50b4 db40b0c f7a31e7 2daa864 210ed13 aac4d05 32ecfac 1acb407 9932afd 0b4c2e7 aac4d05 7dd59c4 210ed13 9db21d2 210ed13 02471b0 aac4d05 9932afd dd2b7f9 02471b0 b632387 f285313 01ee4f0 37a22f1 5afec29 9932afd 019b2bc 9932afd 4a68766 9932afd 8b213a4 ec62674 4a68766 9932afd 88e3d95 9932afd 210ed13 |
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 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
import os
import re
import spaces
import random
import string
import torch
import requests
import gradio as gr
import numpy as np
from lxml.html import fromstring
from pathos.threading import ThreadPool as Pool
#from diffusers import DiffusionPipeline, AnimateDiffPipeline, MotionAdapter, EulerDiscreteScheduler
from diffusers.pipelines.flux import FluxPipeline
#from diffusers.utils import export_to_gif
#from huggingface_hub import hf_hub_download
#from safetensors.torch import load_file
device = "cuda" if torch.cuda.is_available() else "cpu"
dtype = torch.bfloat16
pipe = FluxPipeline.from_pretrained("black-forest-labs/FLUX.1-schnell", torch_dtype=dtype, token=os.getenv("hf_token")).to(device)
def translate(text,lang):
if text == None or lang == None:
return ""
text = re.sub(f'[{string.punctuation}]', '', re.sub('[\s+]', ' ', text)).lower().strip()
lang = re.sub(f'[{string.punctuation}]', '', re.sub('[\s+]', ' ', lang)).lower().strip()
if text == "" or lang == "":
return ""
if len(text) > 38:
raise Exception("Translation Error: Too long text!")
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Safari/605.1.15',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Safari/605.1.15'
]
padded_chars = re.sub("[(^\-)(\-$)]","",text.replace("","-").replace("- -"," ")).strip()
query_text = f'Please translate {padded_chars}, into {lang}'
url = f'https://www.google.com/search?q={query_text}'
print(url)
resp = requests.get(
url = url,
headers = {
'User-Agent': random.choice(user_agents)
}
)
content = resp.content
html = fromstring(content)
translated = text
try:
src_lang = html.xpath('//*[@class="source-language"]')[0].text_content().lower().strip()
trgt_lang = html.xpath('//*[@class="target-language"]')[0].text_content().lower().strip()
src_text = html.xpath('//*[@id="tw-source-text"]/*')[0].text_content().lower().strip()
trgt_text = html.xpath('//*[@id="tw-target-text"]/*')[0].text_content().lower().strip()
if trgt_lang == lang:
translated = trgt_text
except:
print(f'Translation Warning: Failed To Translate!')
ret = re.sub(f'[{string.punctuation}]', '', re.sub('[\s+]', ' ', translated)).lower().strip()
print(ret)
return ret
def generate_random_string(length):
characters = string.ascii_letters + string.digits
return ''.join(random.choice(characters) for _ in range(length))
@spaces.GPU(duration=45)
def Piper(_do):
try:
retu = pipe(
_do,
height=512,
width=512,
num_inference_steps=40,
max_sequence_length=256,
guidance_scale=8
)
return retu
except:
return ""
def infer(p1,p2):
name = generate_random_string(12)+".png"
_do = ['beautiful', 'playful', 'photographed', 'highly detailed', 'realistic elements', 'dynamic poze', 'deep field', 'vivid reasonable coloring', 'rough texture', 'high sharpness', 'highres', 'best quality', 'focused']
if p1 != "":
_do.append(f'showing {p1 }clearly')
if p2 != "":
_do.append(f'hiding {p2} perfectly')
output = Piper('A '+" ".join(_do))
if output == "":
return output
else:
output.images[0].save(name)
return name
css="""
input, input::placeholder {
text-align: center !important;
}
*, *::placeholder {
direction: ltr !important;
font-family: Suez One !important;
}
h1,h2,h3,h4,h5,h6,span,p,pre {
width: 100% !important;
text-align: center !important;
display: block !important;
}
footer {
display: none !important;
}
#col-container {
margin: 0 auto !important;
max-width: 15cm !important;
}
.image-container {
aspect-ratio: 448 / 448 !important;
}
.dropdown-arrow {
display: none !important;
}
*:has(.btn), .btn {
width: 100% !important;
margin: 0 auto !important;
}
"""
js="""
function custom(){
document.querySelector("div#prompt input").setAttribute("maxlength","38")
document.querySelector("div#prompt2 input").setAttribute("maxlength","38")
}
"""
with gr.Blocks(theme=gr.themes.Soft(),css=css,js=js) as demo:
result = []
with gr.Column(elem_id="col-container"):
gr.Markdown(f"""
# MULTI-LANGUAGE IMAGE GENERATOR
""")
with gr.Row():
prompt = gr.Textbox(
elem_id="prompt",
placeholder="INCLUDE",
container=False,
max_lines=1
)
with gr.Row():
prompt2 = gr.Textbox(
elem_id="prompt2",
placeholder="EXCLUDE",
container=False,
max_lines=1
)
with gr.Row():
run_button = gr.Button("START",elem_classes="btn",scale=0)
with gr.Row():
result.append(gr.Image(interactive=False,elem_classes="image-container", label="Result", show_label=False, type='filepath', show_share_button=False))
result.append(gr.Image(interactive=False,elem_classes="image-container", label="Result", show_label=False, type='filepath', show_share_button=False))
result.append(gr.Image(interactive=False,elem_classes="image-container", label="Result", show_label=False, type='filepath', show_share_button=False))
def _ret(idx,p1,p2):
print(f'Starting {idx}')
v = infer(p1,p2)
print(f'Finished {idx}')
return v
def _rets(p1,p2):
p1_en = translate(p1,"english")
p2_en = translate(p2,"english")
ln = len(result)
idxs = list(range(ln))
p1s = [p1_en for _ in idxs]
p2s = [p2_en for _ in idxs]
return list(Pool(ln).imap( _ret, idxs, p1s, p2s ))
run_button.click(fn=_rets,inputs=[prompt,prompt2],outputs=result)
demo.queue().launch() |