-
Notifications
You must be signed in to change notification settings - Fork 0
/
funciones.py
120 lines (101 loc) · 4.96 KB
/
funciones.py
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
import bridges
import globales
import sulkuPypi
import sulkuFront
import gradio as gr
import gradio_client
import splashmix.splash_tools as splash_tools
import splashmix.prompter as prompter
import tools
import time
tipo_api = None
btn_buy = gr.Button("Get Credits", visible=False, size='lg')
#PERFORM es la app INTERNA que llamará a la app externa.
def perform(input1, request: gr.Request):
tokens = sulkuPypi.getTokens(sulkuPypi.encripta(request.username).decode("utf-8"), globales.env)
#1: Reglas sobre autorización si se tiene el crédito suficiente.
autorizacion = sulkuPypi.authorize(tokens, globales.work)
if autorizacion is True:
try:
resultado = mass(input1)
#El resultado ya viene destuplado.
except Exception as e:
info_window, resultado, html_credits = sulkuFront.aError(request.username, tokens, excepcion = tools.titulizaExcepDeAPI(e))
return resultado, info_window, html_credits, btn_buy
else:
#Si no hubo autorización.
info_window, resultado, html_credits = sulkuFront.noCredit(request.username)
return resultado, info_window, html_credits, btn_buy
#Primero revisa si es imagen!:
if "image.webp" in resultado:
#Si es imagen, debitarás.
html_credits, info_window = sulkuFront.presentacionFinal(request.username, "debita")
else:
#Si no es imagen es un texto que nos dice algo.
info_window, resultado, html_credits = sulkuFront.aError(request.username, tokens, excepcion = resultado)
return resultado, info_window, html_credits, btn_buy
#Lo que se le regresa oficialmente al entorno.
return resultado, info_window, html_credits, btn_buy
#MASS es la que ejecuta la aplicación EXTERNA
def mass(input1):
api, tipo_api = tools.elijeAPI()
print("Una vez elegido API, el tipo api es: ", tipo_api)
client = gradio_client.Client(api, hf_token=bridges.hug)
#client = gradio_client.Client("https://058d1a6dcdbaca0dcf.gradio.live/") #MiniProxy
imagenSource = gradio_client.handle_file(input1)
imagenPosition = gradio_client.handle_file(splash_tools.getPosition())
########################################
#Hecho por Splashmix Tools...
########################################
creacion=splash_tools.creadorObjeto() #1) Aquí podrías pasarle style="anime", pero debes ver como kwargsearlo.
#2) Aquí con los parámetros que te estuviera pasando por ejemplo via input.
#En ésta ocasión haremos que siempre sea ánime.
#creacion.style = "Anime"
prompt = prompter.prompteador(creacion)
########################################
try:
result = client.predict(
imagenSource,
imagenPosition,
prompt=prompt,
negative_prompt="(lowres, low quality, worst quality:1.2), (text:1.2), watermark, (frame:1.2), deformed, ugly, deformed eyes, blur, out of focus, blurry, deformed cat, deformed, photo, anthropomorphic cat, monochrome, pet collar, gun, weapon, 3d, drones, drone, buildings in background",
style_name="(No style)", #ver lista en styles.txt
num_steps=30,
identitynet_strength_ratio=0.8,
adapter_strength_ratio=0.8,
#pose_strength=0.4,
canny_strength=0.4,
depth_strength=0.4,
controlnet_selection=["depth"], #pueden ser ['pose', 'canny', 'depth'] #Al parecer pose ya no.
guidance_scale=5,
seed=42,
scheduler="EulerDiscreteScheduler",
enable_LCM=False,
enhance_face_region=True,
api_name="/generate_image"
)
# result = client.predict(
# p="Full Body",
# api_name="/generate"
# )
# print(result)
#CON MINIPROXY
# result = client.predict(
# input1=gradio_client.handle_file('https://raw.githubusercontent.com/gradio-app/gradio/main/test/test_files/bus.png'),
# api_name="/predict"
# )
# #Si viene del miniproxy, hay que rehacer la tupla.
# result = ast.literal_eval(result)
#(Si llega aquí, debes debitar de la quota, incluso si detecto no-face o algo.)
if tipo_api == "gratis":
print("Como el tipo api fue gratis, si debitaremos la quota.")
sulkuPypi.updateQuota(globales.process_cost)
#No debitas la cuota si no era gratis, solo aplica para Zero.
result = tools.desTuplaResultado(result)
return result
except Exception as e:
print("Hubo un errora al ejecutar MASS:", e)
#Errores al correr la API.
#La no detección de un rostro es mandado aquí?! Siempre?
mensaje = tools.titulizaExcepDeAPI(e)
return mensaje