picxai / app.py
thejagstudio's picture
Update app.py
7a7f00c verified
from flask import Flask, render_template, jsonify, request, send_file
import requests
import http.client
import json
import time
import re
from strgen import StringGenerator as SG
import uuid
app = Flask(__name__)
def encrypt(text):
s = int(re.search(r'\d+', text).group()[0])
result = ""
for i in range(len(text)):
char = text[i]
if(not char.isnumeric() and char != "-"):
if (char.isupper()):
result += chr((ord(char) + s - 65) % 26 + 65)
else:
result += chr((ord(char) + s - 97) % 26 + 97)
else:
result += char
return result
def dencrypt(text):
s = int(re.search(r'\d+', text).group()[0])
result = ""
for i in range(len(text)):
char = text[i]
if(not char.isnumeric() and char != "-"):
if (char.isupper()):
result += chr((ord(char) - s - 65) % 26 + 65)
else:
result += chr((ord(char) - s - 97) % 26 + 97)
else:
result += char
return result
def NewAccount():
# Genrate CSRF
conn = http.client.HTTPSConnection("lexica.art")
payload = ''
conn.request("GET", "/api/auth/csrf", payload)
response = conn.getresponse()
csrf = json.loads(response.read().decode("utf-8"))["csrfToken"]
print("CSRF :", csrf)
cookies = response.getheader("Set-Cookie")
# Genrate Temp Mail
tempEmail = json.loads(requests.get(
"https://www.1secmail.com/api/v1/?action=genRandomMailbox&count=1").text)[0]
login = tempEmail.split("@")[0]
domain = tempEmail.split("@")[1]
print("Tempmail :", tempEmail)
# Send Mail From Lexica
csrfTokenCookie = str(cookies).split(
"__Host-next-auth.csrf-token=")[1].split(";")[0]
cookiesText = '__Host-next-auth.csrf-token='+csrfTokenCookie + \
'; __Secure-next-auth.callback-url=https%3A%2F%2Flexica.art%2F'
payload = 'email='+tempEmail + \
'&redirect=false&callbackUrl=https%3A%2F%2Flexica.art%2F&csrfToken='+csrf+'&json=true'
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Cookie': cookiesText
}
conn.request("POST", "/api/auth/signin/email?=null", payload, headers)
response = conn.getresponse()
if ("provider=email&type=email" in response.read().decode("utf-8")):
print("Email Sent :", True)
# Recieve Mail from Lexica
while True:
mailData = json.loads(requests.get(
"https://www.1secmail.com/api/v1/?action=getMessages&login="+login+"&domain="+domain).text)
if(len(mailData) > 0):
mailId = mailData[0]["id"]
break
time.sleep(0.5)
mailBody = json.loads(requests.get(
"https://www.1secmail.com/api/v1/?action=readMessage&login="+login+"&domain="+domain+"&id="+str(mailId)).text)["textBody"]
sessionLink = mailBody.split('<a href=\"')[1].split('\">')[0].strip()
print(sessionLink)
# Activate A New Account
payload = ''
headers = {
'Cookie': cookiesText
}
conn.request("GET", "/"+sessionLink.split("lexica.art/")
[1], payload, headers)
res = conn.getresponse()
data = res.read()
cookies = res.getheader("Set-Cookie")
print(data.decode("utf-8"))
print(cookies)
sessionTokenCookie = str(cookies).split(".session-token=")[1].split(";")[0]
return csrfTokenCookie, sessionTokenCookie
csrfTokenCookie, sessionTokenCookie = NewAccount()
csrfTokenCookieGEN, sessionTokenCookieGEN = NewAccount()
visitorId = SG("[a-zA-Z0-9]{20}").render_list(1, unique=True)[0]
def infiniteScroll(cursor, query, searchMode, model):
global csrfTokenCookie
conn = http.client.HTTPSConnection("lexica.art")
print(query)
try:
cursor = int(cursor)
except:
cursor = 0
payload = json.dumps({
"text": query,
"searchMode": searchMode,
"source": "search",
"cursor": int(cursor),
"model": model
})
headers = {
'Content-Type': 'application/json',
'Cookie': '__Host-next-auth.csrf-token='+csrfTokenCookie+'; __Secure-next-auth.callback-url=https%3A%2F%2Flexica.art'
}
conn.request("POST", "/api/infinite-prompts", payload, headers)
res = conn.getresponse()
data = res.read()
return json.loads(data.decode("utf-8"))
@app.route('/infinite-prompts', methods=["POST", "GET"])
def homeImageLoader():
if request.method == 'POST':
try:
cursor = request.form['cursor']
except:
cursor = 0
try:
query = request.form['query']
except:
query = ""
searchMode = request.form['searchMode']
model = request.form['model']
if(model == "picxai-diffuser"):
model = "lexica-aperture-v2"
if(searchMode == "prompts"):
model = "sd-1.5"
data = infiniteScroll(cursor, query, searchMode, model)
return data
@app.route('/prompt/<id>', methods=["GET"])
def promptDetail(id):
url = "https://lexica.art/prompt/" + id
payload={}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',
}
response = requests.request("GET", url, headers=headers, data=payload)
datafinal = {}
datafinal["id"] = id
datafinal["prompt"] = response.text.split('name="description" content="')[1].split('"')[0]
datafinal["c"] = int(response.text.split('Guidance scale')[1].split('<div class="text-sm">')[1].split('</div>')[0])
datafinal["width"] = int(response.text.split('Dimensions')[1].split('<div class="text-sm">')[1].split('</div>')[0].split("×")[0].replace("<!-- -->",""))
datafinal["height"] = int(response.text.split('Dimensions')[1].split('<div class="text-sm">')[1].split('</div>')[0].split("×")[0].replace("<!-- -->",""))
datafinal["images"] = []
tempImage = response.text.split('<meta property="og:image" content="')[1].split('"')[0].split("images=")[1:]
for i in tempImage:
datafinal["images"].append({"id": i.replace("&amp;", "").split("/")[-1]})
try:
datafinal["negativePrompt"] = response.text.split('Negative prompt')[1].split('<div class="text-sm">')[1].split('</div>')[0]
except:
datafinal["negativePrompt"] = ""
try:
datafinal["upscaled_width"] = int(response.text.split('Upscaled')[1].split('<div class="text-sm">')[1].split('</div>')[0].split("×")[0].replace("<!-- -->",""))
datafinal["upscaled_height"] = int(response.text.split('Upscaled')[1].split('<div class="text-sm">')[1].split('</div>')[0].split("×")[1].replace("<!-- -->",""))
except:
datafinal["upscaled_width"] =""
datafinal["upscaled_height"] =""
datafinal["model"] = "picxai-diffuser"
return render_template("prompt.html", datafinal=datafinal)
@app.route('/diffuser', methods=["POST", "GET"])
def diffuser():
global csrfTokenCookieGEN, sessionTokenCookieGEN, visitorId
if request.method == 'POST':
try:
prompt = request.form['prompt']
print(prompt)
negativePrompt = request.form['negativePrompt']
guidanceScale = request.form['guidanceScale']
enableHiresFix = str(request.form['enableHiresFix'])
width = request.form['width']
height = request.form['height']
myuuid = uuid.uuid4()
payload = json.dumps({
"prompt": prompt,
"negativePrompt": negativePrompt,
"guidanceScale": int(guidanceScale),
"width": int(width),
"height": int(height),
"enableHiresFix": enableHiresFix,
"model": "lexica-aperture-v2",
"numImagesGenerated": 0,
"id": visitorId,
"requestId": str(myuuid),
})
headers = {
'authority': 'z.lexica.art',
'accept': 'application/json, text/plain, */*',
'content-type': 'application/json',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
'Cookie': '__Secure-next-auth.session-token='+sessionTokenCookieGEN+'; __Host-next-auth.csrf-token='+csrfTokenCookieGEN+';'
}
conn = http.client.HTTPSConnection("z.lexica.art")
conn.request("POST", "/api/generator", payload, headers)
res = conn.getresponse()
data = res.read()
if "needsMembership" in data.decode("utf-8"):
csrfTokenCookieGEN, sessionTokenCookieGEN = NewAccount()
visitorId = SG("[a-zA-Z0-9]{20}").render_list(1, unique=True)[0]
data = {"error": "Please try Again"}
return jsonify(data)
return jsonify(data.decode("utf-8"))
except Exception as e:
return jsonify({"error": str(e)})
else:
return render_template("generate.html")
@app.route('/image/<size>/<id>', methods=["GET"])
def imageAPI(size, id):
print(size, id)
return send_file(filename, mimetype='image/jpg')
@app.route('/', methods=["GET"])
def home():
return render_template("index.html")
@app.route('/hello', methods=["GET"])
def hello():
return "hello picxai"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860)