import requests
from PIL import Image, PngImagePlugin
import io
import base64
from ftplib import FTP
import os
ftp_server = "themis.feralhosting.com"
ftp_username = "bottlecap"
ftp_password = "UjSKCglyT5YlHMml"
ftp_ai_webpage = "/media/sdq1/bottlecap/www/phixxy.com/public_html/ai-webpage/"
ftp_ai_webpage_archive = "/media/sdq1/bottlecap/www/phixxy.com/public_html/webpage-archive/"
def upload_html_and_imgs():
with FTP(ftp_server) as ftp:
ftp.login(ftp_username, ftp_password)
ftp.cwd(ftp_ai_webpage)
for filename in os.listdir("webpage/"):
if ".png" in filename:
ftp.storbinary("STOR " + filename, open("webpage/" + filename, "rb"))
#explicitly upload html files last!
for filename in os.listdir("webpage/"):
if ".html" in filename:
ftp.storbinary("STOR " + filename, open("webpage/" + filename, "rb"))
def upload_websites():
with FTP(ftp_server) as ftp:
ftp.login(ftp_username, ftp_password)
for foldername in os.listdir("websites/"):
ftp.cwd(ftp_ai_webpage_archive)
if "archived.txt" not in os.listdir("websites/" +foldername):
ftp.mkd(foldername)
ftp.cwd(ftp_ai_webpage_archive + foldername)
for filename in os.listdir("websites/" +foldername):
if ".png" in filename:
ftp.storbinary("STOR " + filename, open("websites/" + foldername + "/" + filename, "rb"))
print("Uploaded websites/" + foldername + "/" + filename)
#explicitly upload html files last!
for filename in os.listdir("websites/" +foldername):
if ".html" in filename:
ftp.storbinary("STOR " + filename, open("websites/" + foldername + "/" + filename, "rb"))
print("Uploaded websites/" + foldername + "/" + filename)
with open("websites/" + foldername + "/" + "archived.txt","w") as f:
f.write("True")
f.close()
def generate_website_archive_html():
html1 = '''
webpage-archive
webpage-archive
This is a list of saved websites that AI generated.
'''
with FTP(ftp_server) as ftp:
ftp.login(ftp_username, ftp_password)
ftp.cwd(ftp_ai_webpage_archive)
file_list = ftp.nlst()
dir_list = ""
for folder in file_list:
if folder != "index.html":
dir_list += "" + folder + "\n"
html = html1 + dir_list + html2
with open("index.html","w") as f:
f.write(html)
f.close()
ftp.storbinary("STOR " + "index.html", open("index.html", "rb"))
def combine_dicts(dict1, dict2): #prioritizes dict2 args
combined_dict = {}
for key in dict1:
combined_dict[key] = dict1[key]
for key in dict2:
combined_dict[key] = dict2[key]
return combined_dict
def extract_image_tags(code):
count = code.count("
") + index1 + 1
img_tag = code[index1:index2]
tags.append(img_tag)
code = code[index2:]
return tags
def extract_image_alt_text(tags):
alt_texts = []
for tag in tags:
index1 = tag.find("alt") + 5
index2 = tag[index1:].find("\"") + index1
alt_text = tag[index1:index2]
alt_texts.append(alt_text)
return alt_texts
def generate_images(image_list):
file_list = []
for image in image_list:
filename = image.replace(" ", "").lower() + ".png"
url = "http://127.0.0.1:7861"
payload = {"prompt": image,"steps": 25}
response = requests.post(url=f'{url}/sdapi/v1/txt2img', json=payload)
r = response.json()
for i in r['images']:
image = Image.open(io.BytesIO(base64.b64decode(i.split(",",1)[0])))
png_payload = {"image": "data:image/png;base64," + i}
response2 = requests.post(url=f'{url}/sdapi/v1/png-info', json=png_payload)
pnginfo = PngImagePlugin.PngInfo()
pnginfo.add_text("parameters", response2.json().get("info"))
image.save("webpage/" + filename, pnginfo=pnginfo)
file_list.append(filename)
return file_list
def add_image_filenames(code, file_list):
for filename in file_list:
code = code.replace("src=\"\"", "src=\""+ filename + "\"", 1)
return code
def delete_local_pngs():
for filename in os.listdir("webpage/"):
if ".png" in filename:
os.remove("webpage/" + filename)
def delete_ftp_pngs():
with FTP(ftp_server) as ftp:
ftp.login(ftp_username, ftp_password)
ftp.cwd(ftp_ai_webpage)
file_list = ftp.nlst()
for filename in file_list:
if ".png" in filename:
print("Deleting", filename)
ftp.delete(filename)
delete_local_pngs()
delete_ftp_pngs()
with open("webpage/index.html", 'r') as f:
code = f.read()
f.close()
tags = extract_image_tags(code)
alt_texts = extract_image_alt_text(tags)
file_list = generate_images(alt_texts)
code = add_image_filenames(code, file_list)
with open("webpage/index.html", 'w') as f:
f.write(code)
f.close()
upload_html_and_imgs()
upload_websites()
generate_website_archive_html()
print("Success")