Spaces:
Running
Running
File size: 7,441 Bytes
e915cc7 8682ef8 ec20dc5 e915cc7 ec20dc5 631811e ec20dc5 8682ef8 e915cc7 8682ef8 c65fff2 e915cc7 8682ef8 e915cc7 ec20dc5 631811e e915cc7 8682ef8 e915cc7 631811e 8682ef8 e915cc7 8682ef8 ec20dc5 631811e e915cc7 631811e ec20dc5 e915cc7 631811e ec20dc5 8682ef8 e915cc7 8682ef8 e915cc7 8682ef8 e915cc7 8682ef8 e915cc7 22ccf2a 8682ef8 d1e93f8 8682ef8 e915cc7 631811e e915cc7 ec20dc5 631811e 8682ef8 e915cc7 631811e ec20dc5 e915cc7 631811e e915cc7 8682ef8 ec20dc5 631811e e915cc7 631811e 8682ef8 ec20dc5 8682ef8 ec20dc5 631811e e915cc7 631811e 8682ef8 e915cc7 8682ef8 e915cc7 |
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 |
l='REQUEST_METHOD'
k='Content-Type'
j='wsgi.input'
i='CONTENT_LENGTH'
h='proxy-connection'
g='upgrade'
f='connection'
e='HTTP_'
d='PATH_INFO'
c='embykeeperweb'
b='embykeeper'
V='/ek'
U=None
T='install'
S='pip'
R='-m'
Q=set
P=Exception
M='CONTENT_TYPE'
G=False
D=int
B=print
A=True
import eventlet as H
H.monkey_patch()
import os as C,sys as K,tempfile as m,subprocess as E,shutil as F
from pathlib import Path
import threading as W
from appdirs import user_data_dir as n
import socketio as N,eventlet as H,requests as X
L='7.1.26'
o=Path(n(b))
O=o/'hf'/'version'
def p():
try:
O.mkdir(parents=A,exist_ok=A);M=O/f"emby-keeper-{L}";H=O/f"emby-keeper-{L}.tar.gz"
if M.exists():B(f"Using cached version from {M}",flush=A);return A
I=m.mkdtemp();B('Downloading EK...',flush=A);D=C.path.join(I,'embykeeper.tar.gz')
if H.exists():B(f"Using cached tarball from {H}",flush=A);F.copy2(H,D)
else:N=f"https://github.com/emby-keeper/emby-keeper/archive/refs/tags/v{L}.tar.gz";E.run(['wget','-q',N,'-O',D],check=A);F.copy2(D,H)
E.run(['tar','xf',D,'-C',I],check=A);C.remove(D);J=C.path.join(I,f"emby-keeper-{L}");B('Obfuscating code...',flush=A)
if not q(J):raise P('Obfuscation failed')
B('Installing dependencies...',flush=A);E.run([K.executable,R,S,T,'-r',C.path.join(J,'requirements.txt')],check=A);E.run([K.executable,R,S,T,J],check=A);F.copytree(J,M,dirs_exist_ok=A);F.rmtree(I);return A
except P as Q:B(f"Error setting up EK: {Q}",flush=A);return G
def q(package_path):
Q='dist';O='pyarmor';I=package_path
try:
E.run([K.executable,R,S,T,O],check=A)
for J in[b,c]:
D=C.path.join(I,J)
if not C.path.exists(D):B(f"Package directory not found: {D}",flush=A);continue
B(f"Obfuscating {J}...",flush=A);E.run([O,'gen','--recursive','--output',C.path.join(I,Q),D],check=A);H=C.path.join(I,Q)
if C.path.exists(H):
for M in C.listdir(H):
L=C.path.join(H,M);N=C.path.join(D,M)
if C.path.isdir(L):F.copytree(L,N,dirs_exist_ok=A)
else:F.copy2(L,N)
F.rmtree(H)
else:B(f"Dist directory not found after obfuscation for {J}",flush=A);return G
return A
except P as U:B(f"Error during obfuscation: {U}",flush=A);return G
def Y():
with H.listen(('',0))as A:return A.getsockname()[1]
def r():
J='Prompt Generator v0.2(More tags)';H='Prompt Generator v0.1(Better quality)';import gradio as C,random as M;from time import time,ctime
def F(choice,num,artist):
L='art by';I=choice;E=artist;C=num;N=time();B(ctime(N))
if I==H:G=open('pr1.txt').read().splitlines()
elif I==J:G=open('pr2.txt').read().splitlines()
if D(C)<1 or D(C)>20:C=10
if D(E)<0 or D(E)>40:E=2
O=len(G);A=[];K=0
while len(sorted(Q(A),key=lambda d:A.index(d)))<D(C):
F=M.choice(G)
if F.startswith(L)and K<D(E):K+=1;A.append(F)
elif not F.startswith(L):A.append(F)
B(', '.join(Q(A))+'\n\n');return', '.join(Q(A))
E=C.Blocks()
with E:
C.HTML('\n <div style="text-align: center; margin: 0 auto;">\n <div style="display: inline-flex;align-items: center;gap: 0.8rem;font-size: 1.75rem;">\n <h1 style="font-weight: 900; margin-bottom: 7px;margin-top:5px">\n Simple Prompt Generator v0.6 (Gradio Demo)\n </h1>\n </div>\n <p style="margin-bottom: 10px; font-size: 94%; line-height: 23px;">\n Simple prompt generation script for Midjourney. EmbyKeeper is in <a href="#" onclick="const url = window.location.href; const isHfSpaces = url.includes(\'spaces/\'); const newUrl = isHfSpaces ? url.replace(\'huggingface.co/spaces/\', \'\').replace(\'prompt-generator\', \'prompt-generator.hf.space/ek\') : \'/ek\'; window.open(newUrl, \'_blank\'); return false;">/ek</a> path. <br> <p>More examples in <a class=\'link-info\' href="https://github.com/emby-keeper/emby-keeper" target="_blank">Github</a> and <a class=\'link-info\' href="https://emby-keeper.github.io/" target="_blank">Project site</a></p>\n </p>\n <center>\n <img style="display: inline-block, margin-right: 1%;" src=\'https://visitor-badge.laobi.icu/badge?page_id=WiNE-iNEFF.Simple_Prompt_Generator&left_color=red&right_color=green&left_text=Visitors\' alt=\'visitor badge\'>\n </center>\n </div>\n ')
with C.Column():K=C.Radio([H,J],label='Model Variant',value=H);L=C.Number(value='10',label='Num of tag (MAX 20)',show_label=A);N=C.Number(value='2',label='Num of artist (Standart 2)',show_label=A);O=C.Textbox(lines=4,label='Generated Prompts')
P=C.Button('Generate');P.click(fn=F,inputs=[K,L,N],outputs=O,concurrency_limit=4);C.HTML('\n <div class="footer">\n <div style=\'text-align: center;\'>Simple Prompt Generator by <a href=\'https://twitter.com/wine_ineff\' target=\'_blank\'>Artsem Holub (WiNE-iNEFF)</a><br>More information about this demo and script your can find in <a class=\'link-info\' href="https://github.com/emby-keeper/emby-keeper" target="_blank">Github</a> and <a class=\'link-info\' href="https://emby-keeper.github.io/" target="_blank">Project site</a></div>\n </div>\n ')
E.queue();B(f"Starting Gradio on port {I}",flush=A);E.launch(server_name='0.0.0.0',server_port=I,share=G,debug=A,show_error=A,prevent_thread_lock=A)
def s():
O='disconnect';L='connect';C='/pty';E=N.Server(async_mode='eventlet');P=N.WSGIApp(E);F=N.Client();K={}
@E.on(L,namespace=C)
def R(sid,environ):
B(f"Client connected: {sid}")
if not F.connected:F.connect(f"http://127.0.0.1:{J}",namespaces=[C])
K[sid]=A
@E.on(O,namespace=C)
def S(sid):
B(f"Client disconnected: {sid}");K.pop(sid,U)
if not K:F.disconnect()
@E.on('*',namespace=C)
def T(event,sid,*D):
A=event
if A not in[L,O]:B(f"Forward to ek: {A}");F.emit(A,*D,namespace=C)
@F.on('*',namespace=C)
def W(event,*D):
A=event
if A not in[L,O]:B(f"Forward from ek: {A}");E.emit(A,*D,namespace=C)
def Q(environ,start_response):
B=environ;H=B[d]
if H.startswith(V):K=f"http://127.0.0.1:{J}"
else:K=f"http://127.0.0.1:{I}"
P=f"{K}{H}";F={}
for(L,Q)in B.items():
if L.startswith(e):
N=L[5:].replace('_','-').title()
if N.lower()not in[f,g,h]:F[N]=Q
C=B.get(i);O=U
if C:
C=D(C);O=B[j].read(C)
if B.get(M):F[k]=B[M]
E=X.request(method=B[l],url=P,headers=F,data=O,stream=A,allow_redirects=G);start_response(f"{E.status_code} {E.reason}",list(E.headers.items()));return E.iter_content(chunk_size=4096)
P.wsgi_app=Q;H.wsgi.server(H.listen(('',7860)),P)
if __name__=='__main__':
B('Setting up EK...',flush=A)
if not p():B('Failed to setup EK!',flush=A);K.exit(1)
I=Y();J=Y();B(f"Using ports - Gradio: {I}, EK: {J}",flush=A);Z=W.Thread(target=r);Z.daemon=A;Z.start();a=W.Thread(target=lambda:E.run([c,'--port',str(J),'--prefix',V,'--public']));a.daemon=A;a.start()
def t(environ,start_response):
B=environ;H=B[d]
if H.startswith(V):K=f"http://127.0.0.1:{J}"
else:K=f"http://127.0.0.1:{I}"
P=f"{K}{H}";F={}
for(L,Q)in B.items():
if L.startswith(e):
N=L[5:].replace('_','-').title()
if N.lower()not in[f,g,h]:F[N]=Q
C=B.get(i);O=U
if C:
C=D(C);O=B[j].read(C)
if B.get(M):F[k]=B[M]
E=X.request(method=B[l],url=P,headers=F,data=O,stream=A,allow_redirects=G);start_response(f"{E.status_code} {E.reason}",list(E.headers.items()));return E.iter_content(chunk_size=4096)
B('Starting proxy server on port 7860...',flush=A);s() |