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('')[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/', 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('
')[1].split('
')[0]) datafinal["width"] = int(response.text.split('Dimensions')[1].split('
')[1].split('
')[0].split("×")[0].replace("","")) datafinal["height"] = int(response.text.split('Dimensions')[1].split('
')[1].split('
')[0].split("×")[0].replace("","")) datafinal["images"] = [] tempImage = response.text.split('')[1].split('')[0] except: datafinal["negativePrompt"] = "" try: datafinal["upscaled_width"] = int(response.text.split('Upscaled')[1].split('
')[1].split('
')[0].split("×")[0].replace("","")) datafinal["upscaled_height"] = int(response.text.split('Upscaled')[1].split('
')[1].split('
')[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//', 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)