5720 lines
295 KiB
Python
5720 lines
295 KiB
Python
import random
|
|
import re
|
|
|
|
if __package__ is None or __package__ == '':
|
|
# A1111 style (standalone script or direct module execution)
|
|
# Use absolute imports for compatibility with A1111 WebUI environment
|
|
from csv_reader import *
|
|
from random_functions import *
|
|
from one_button_presets import OneButtonPresets
|
|
from superprompter.superprompter import *
|
|
else:
|
|
# ComfyUI style (imported as a package)
|
|
# Use relative imports for proper integration with ComfyUI
|
|
from .csv_reader import *
|
|
from .random_functions import *
|
|
from .one_button_presets import OneButtonPresets
|
|
from .superprompter.superprompter import *
|
|
|
|
OBPresets = OneButtonPresets()
|
|
|
|
|
|
|
|
|
|
#builds a prompt dynamically
|
|
# insanity level controls randomness of propmt 0-10
|
|
# forcesubject van be used to force a certain type of subject
|
|
# Set artistmode to none, to exclude artists
|
|
def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all", imagetype = "all", onlyartists = False, antivalues = "", prefixprompt = "", suffixprompt ="",promptcompounderlevel ="1", seperator = "comma", givensubject="",smartsubject = True,giventypeofimage="", imagemodechance = 20, gender = "all", subtypeobject="all", subtypehumanoid="all", subtypeconcept="all", advancedprompting=True, hardturnoffemojis=False, seed=-1, overrideoutfit="", prompt_g_and_l = False, base_model = "SD1.5", OBP_preset = "", prompt_enhancer = "none", subtypeanimal="all", subtypelocation="all", preset_prefix = "", preset_suffix = ""):
|
|
|
|
remove_weights = False
|
|
less_verbose = False
|
|
add_vomit = True
|
|
add_quality = True
|
|
anime_mode = False
|
|
configfilesuffix = ""
|
|
if(forcesubject == "------ all"):
|
|
forcesubject = "all"
|
|
|
|
superprompter = False
|
|
prompt_enhancer = prompt_enhancer.lower()
|
|
if(prompt_enhancer == "superprompter" or prompt_enhancer == "superprompt" or prompt_enhancer == "superprompt-v1" or prompt_enhancer == "hyperprompt"):
|
|
superprompter = True
|
|
if(superprompter==True):
|
|
base_model = "Stable Cascade"
|
|
|
|
# new method of subject choosing from the interface, lets translate this:
|
|
subjectlist = translate_main_subject(forcesubject)
|
|
forcesubject = subjectlist[0]
|
|
|
|
|
|
# ugly but it works :D Keeps both methods working while the UI changes.
|
|
if(subtypeobject != "all" or subtypeobject != ""):
|
|
subtypeobject = subjectlist[1]
|
|
if(subtypeanimal != "all" or subtypeanimal != ""):
|
|
subtypeanimal = subjectlist[1]
|
|
if(subtypelocation != "all" or subtypelocation != ""):
|
|
subtypelocation = subjectlist[1]
|
|
if(subtypehumanoid != "all" or subtypehumanoid != ""):
|
|
subtypehumanoid = subjectlist[1]
|
|
if(subtypeconcept != "all" or subtypeconcept != ""):
|
|
subtypeconcept = subjectlist[1]
|
|
|
|
# set seed
|
|
# For use in ComfyUI (might bring to Automatic1111 as well)
|
|
# lets do it when its larger than 0
|
|
# Otherwise, just do nothing and it will keep on working based on an earlier set seed
|
|
if(seed > 0):
|
|
random.seed(seed)
|
|
|
|
originalinsanitylevel = insanitylevel
|
|
if(advancedprompting != False and random.randint(0,max(0, insanitylevel - 2)) <= 0):
|
|
advancedprompting == False
|
|
|
|
original_OBP_preset = OBP_preset
|
|
if(OBP_preset == OBPresets.RANDOM_PRESET_OBP):
|
|
obp_options = OBPresets.load_obp_presets()
|
|
random_preset = random.choice(list(obp_options.keys()))
|
|
print("Engaging randomized presets, locking on to: " + random_preset)
|
|
|
|
selected_opb_preset = OBPresets.get_obp_preset(random_preset)
|
|
insanitylevel = selected_opb_preset["insanitylevel"]
|
|
forcesubject = selected_opb_preset["subject"]
|
|
artists = selected_opb_preset["artist"]
|
|
subtypeobject = selected_opb_preset["chosensubjectsubtypeobject"]
|
|
subtypehumanoid = selected_opb_preset["chosensubjectsubtypehumanoid"]
|
|
subtypeconcept = selected_opb_preset["chosensubjectsubtypeconcept"]
|
|
gender = selected_opb_preset["chosengender"]
|
|
imagetype = selected_opb_preset["imagetype"]
|
|
imagemodechance = selected_opb_preset["imagemodechance"]
|
|
givensubject = selected_opb_preset["givensubject"]
|
|
smartsubject = selected_opb_preset["smartsubject"]
|
|
overrideoutfit = selected_opb_preset["givenoutfit"]
|
|
prefixprompt = selected_opb_preset["prefixprompt"]
|
|
suffixprompt = selected_opb_preset["suffixprompt"]
|
|
giventypeofimage = selected_opb_preset["giventypeofimage"]
|
|
antistring = selected_opb_preset["antistring"]
|
|
|
|
# api support tricks for OBP presets
|
|
OBP_preset = ""
|
|
|
|
if(OBP_preset != "" and OBP_preset != 'Custom...'):
|
|
selected_opb_preset = OBPresets.get_obp_preset(OBP_preset)
|
|
insanitylevel = selected_opb_preset["insanitylevel"]
|
|
forcesubject = selected_opb_preset["subject"]
|
|
artists = selected_opb_preset["artist"]
|
|
subtypeobject = selected_opb_preset["chosensubjectsubtypeobject"]
|
|
subtypehumanoid = selected_opb_preset["chosensubjectsubtypehumanoid"]
|
|
subtypeconcept = selected_opb_preset["chosensubjectsubtypeconcept"]
|
|
gender = selected_opb_preset["chosengender"]
|
|
imagetype = selected_opb_preset["imagetype"]
|
|
imagemodechance = selected_opb_preset["imagemodechance"]
|
|
givensubject = selected_opb_preset["givensubject"]
|
|
smartsubject = selected_opb_preset["smartsubject"]
|
|
overrideoutfit = selected_opb_preset["givenoutfit"]
|
|
prefixprompt = selected_opb_preset["prefixprompt"]
|
|
suffixprompt = selected_opb_preset["suffixprompt"]
|
|
giventypeofimage = selected_opb_preset["giventypeofimage"]
|
|
antistring = selected_opb_preset["antistring"]
|
|
|
|
prefixprompt = preset_prefix + ", " + prefixprompt
|
|
suffixprompt = suffixprompt + ", " + preset_suffix
|
|
|
|
# new method of subject choosing from the interface, lets translate this:
|
|
# really hacky way of doing this now.
|
|
if("-" in forcesubject):
|
|
subjectlist = translate_main_subject(forcesubject)
|
|
forcesubject = subjectlist[0]
|
|
|
|
|
|
# ugly but it works :D Keeps both methods working while the UI changes.
|
|
if(subtypeobject != "all" or subtypeobject != ""):
|
|
subtypeobject = subjectlist[1]
|
|
if(subtypeanimal != "all" or subtypeanimal != ""):
|
|
subtypeanimal = subjectlist[1]
|
|
if(subtypelocation != "all" or subtypelocation != ""):
|
|
subtypelocation = subjectlist[1]
|
|
if(subtypehumanoid != "all" or subtypehumanoid != ""):
|
|
subtypehumanoid = subjectlist[1]
|
|
if(subtypeconcept != "all" or subtypeconcept != ""):
|
|
subtypeconcept = subjectlist[1]
|
|
|
|
|
|
originalartistchoice = artists
|
|
doartistnormal = True
|
|
outfitmode = 0
|
|
|
|
animalashuman = False
|
|
|
|
|
|
partlystylemode = False
|
|
# cheat for presets
|
|
if(OBP_preset=='Waifu''s' or OBP_preset=='Husbando''s'):
|
|
basemodel = "Anime Model"
|
|
# Base model options, used to change things in prompt generation. Might be able to extend to different forms like animatediff as well?
|
|
base_model_options = ["SD1.5", "SDXL", "Stable Cascade", "Anime Model"]
|
|
if base_model not in base_model_options:
|
|
base_model = "SD1.5" # Just in case there is no option here.
|
|
# "SD1.5" -- Standard, future: More original style prompting
|
|
# "SDXL" -- Standard (for now), future: More natural language
|
|
# "Stable Cascade" -- Remove weights
|
|
if(base_model == "Stable Cascade"):
|
|
remove_weights = True
|
|
add_vomit = False
|
|
add_quality = False
|
|
if(base_model == "SD1.5"):
|
|
less_verbose = True
|
|
if(base_model == "Anime Model"):
|
|
less_verbose = True
|
|
advancedprompting = False
|
|
anime_mode = True
|
|
configfilesuffix = "anime"
|
|
|
|
# Hard overwrite some stuff because people dont config this themselves
|
|
if((anime_mode or imagetype == "all - anime") and (artists == "all" or normal_dist(insanitylevel))):
|
|
artists = "none"
|
|
|
|
|
|
# load the config file
|
|
|
|
config = load_config_csv(configfilesuffix)
|
|
|
|
|
|
# first build up a complete anti list. Those values are removing during list building
|
|
# this uses the antivalues string AND the antilist.csv
|
|
emptylist = []
|
|
antilist = csv_to_list("antilist",emptylist , "./userfiles/",1)
|
|
|
|
antivaluelist = antivalues.split(",")
|
|
|
|
antilist += antivaluelist
|
|
|
|
# clean up antivalue list:
|
|
antilist = [s.strip().lower() for s in antilist]
|
|
|
|
|
|
|
|
# Some tricks for gender to make sure we can choose Him/Her/It etc on the right time.
|
|
if(gender=="all"):
|
|
genderchoicelist = ["male", "female"]
|
|
gender = random.choice(genderchoicelist)
|
|
heshelist = ["it"]
|
|
hisherlist = ["its"]
|
|
himherlist = ["it"]
|
|
# we also need to oppositegender for some fun!
|
|
oppositegender = "male"
|
|
if(gender=="male"):
|
|
oppositegender = "female"
|
|
|
|
# build all lists here
|
|
|
|
colorlist = csv_to_list("colors",antilist)
|
|
animallist = csv_to_list("animals",antilist)
|
|
materiallist = csv_to_list("materials",antilist)
|
|
objectlist = csv_to_list("objects",antilist)
|
|
fictionallist = csv_to_list(csvfilename="fictional characters",antilist=antilist,skipheader=True,gender=gender)
|
|
nonfictionallist = csv_to_list(csvfilename="nonfictional characters",antilist=antilist,skipheader=True,gender=gender)
|
|
oppositefictionallist = csv_to_list(csvfilename="fictional characters",antilist=antilist,skipheader=True,gender=oppositegender)
|
|
oppositenonfictionallist = csv_to_list(csvfilename="nonfictional characters",antilist=antilist,skipheader=True,gender=oppositegender)
|
|
conceptsuffixlist = csv_to_list("concept_suffix",antilist)
|
|
buildinglist = csv_to_list("buildings",antilist)
|
|
vehiclelist = csv_to_list("vehicles",antilist)
|
|
outfitlist = csv_to_list("outfits",antilist)
|
|
locationlist = csv_to_list("locations",antilist)
|
|
backgroundlist = csv_to_list("backgrounds",antilist)
|
|
|
|
accessorielist = csv_to_list("accessories",antilist,"./csvfiles/",0,"?",False,False,gender)
|
|
artmovementlist = csv_to_list("artmovements",antilist)
|
|
bodytypelist = csv_to_list("body_types",antilist=antilist,skipheader=True,gender=gender)
|
|
cameralist = csv_to_list("cameras",antilist)
|
|
colorschemelist = csv_to_list("colorscheme",antilist)
|
|
conceptprefixlist = csv_to_list("concept_prefix",antilist)
|
|
culturelist = csv_to_list("cultures",antilist)
|
|
descriptorlist = csv_to_list("descriptors",antilist)
|
|
devmessagelist = csv_to_list("devmessages",antilist)
|
|
directionlist = csv_to_list(csvfilename="directions",antilist=antilist,insanitylevel=insanitylevel)
|
|
emojilist = csv_to_list("emojis",antilist)
|
|
eventlist = csv_to_list("events",antilist)
|
|
focuslist = csv_to_list(csvfilename="focus",antilist=antilist, insanitylevel=insanitylevel)
|
|
greatworklist = csv_to_list("greatworks",antilist)
|
|
haircolorlist = csv_to_list("haircolors",antilist)
|
|
hairstylelist = csv_to_list("hairstyles",antilist)
|
|
hairvomitlist = csv_to_list("hairvomit",antilist,"./csvfiles/",0,"?",False,False)
|
|
|
|
humanoidlist = csv_to_list("humanoids",antilist)
|
|
if(anime_mode or imagetype=="all - anime"):
|
|
if(imagetype == "all"):
|
|
imagetype = "all - anime"
|
|
imagetypelist = csv_to_list(csvfilename="imagetypes_anime",antilist=antilist, insanitylevel=insanitylevel, delimiter="?")
|
|
else:
|
|
imagetypelist = csv_to_list(csvfilename="imagetypes",antilist=antilist, insanitylevel=insanitylevel, delimiter="?")
|
|
|
|
joblist = csv_to_list(csvfilename="jobs",antilist=antilist,skipheader=True,gender=gender)
|
|
lenslist = csv_to_list(csvfilename="lenses",antilist=antilist, insanitylevel=insanitylevel)
|
|
lightinglist = csv_to_list(csvfilename="lighting",antilist=antilist, insanitylevel=insanitylevel)
|
|
malefemalelist = csv_to_list(csvfilename="malefemale",antilist=antilist,skipheader=True,gender=gender)
|
|
manwomanlist = csv_to_list(csvfilename="manwoman",antilist=antilist,skipheader=True,gender=gender)
|
|
moodlist = csv_to_list(csvfilename="moods",antilist=antilist, insanitylevel=insanitylevel)
|
|
othertypelist = csv_to_list("othertypes",antilist)
|
|
poselist = csv_to_list("poses",antilist)
|
|
qualitylist = csv_to_list("quality",antilist)
|
|
shotsizelist = csv_to_list(csvfilename="shotsizes",antilist=antilist, insanitylevel=insanitylevel)
|
|
timeperiodlist = csv_to_list("timeperiods",antilist)
|
|
vomitlist = csv_to_list(csvfilename="vomit",antilist=antilist, insanitylevel=insanitylevel)
|
|
if(anime_mode):
|
|
replacements = {
|
|
"-allstylessuffix-": "-buildfacepart-",
|
|
"-artistdescription-": "-buildfacepart-"
|
|
}
|
|
|
|
for i, item in enumerate(vomitlist):
|
|
for old, new in replacements.items():
|
|
item = item.replace(old, new)
|
|
vomitlist[i] = item
|
|
|
|
|
|
foodlist = csv_to_list("foods", antilist)
|
|
genderdescriptionlist = csv_to_list(csvfilename="genderdescription",antilist=antilist,skipheader=True,gender=gender)
|
|
minilocationlist = csv_to_list("minilocations", antilist)
|
|
minioutfitlist = csv_to_list("minioutfits",antilist,"./csvfiles/",0,"?",False,False,gender)
|
|
seasonlist = csv_to_list("seasons", antilist)
|
|
elaborateoutfitlist = csv_to_list("elaborateoutfits", antilist)
|
|
minivomitlist = csv_to_list("minivomit", antilist)
|
|
imagetypequalitylist = csv_to_list("imagetypequality", antilist)
|
|
rpgclasslist = csv_to_list("rpgclasses", antilist)
|
|
brandlist = csv_to_list("brands", antilist)
|
|
spacelist = csv_to_list("space", antilist)
|
|
poemlinelist = csv_to_list("poemlines", antilist)
|
|
songlinelist = csv_to_list("songlines", antilist)
|
|
musicgenrelist = csv_to_list("musicgenres", antilist)
|
|
manwomanrelationlist = csv_to_list(csvfilename="manwomanrelations",antilist=antilist,skipheader=True,gender=gender)
|
|
manwomanmultiplelist = csv_to_list(csvfilename="manwomanmultiples",antilist=antilist,skipheader=True,gender=gender,delimiter="?")
|
|
waterlocationlist = csv_to_list("waterlocations", antilist)
|
|
containerlist = csv_to_list("containers", antilist)
|
|
firstnamelist = csv_to_list(csvfilename="firstnames",antilist=antilist,skipheader=True,gender=gender)
|
|
floralist = csv_to_list("flora", antilist)
|
|
printlist = csv_to_list("prints", antilist)
|
|
patternlist = csv_to_list("patterns", antilist)
|
|
chairlist = csv_to_list("chairs", antilist)
|
|
cardnamelist = csv_to_list("card_names", antilist)
|
|
coveringlist = csv_to_list("coverings", antilist)
|
|
facepartlist = csv_to_list("faceparts", antilist)
|
|
outfitvomitlist = csv_to_list(csvfilename="outfitvomit",antilist=antilist,delimiter="?")
|
|
humanvomitlist = csv_to_list("humanvomit", antilist)
|
|
eyecolorlist = csv_to_list("eyecolors", antilist)
|
|
fashiondesignerlist = csv_to_list("fashiondesigners", antilist)
|
|
colorcombinationlist = csv_to_list("colorcombinations", antilist)
|
|
materialcombinationlist = csv_to_list("materialcombinations", antilist)
|
|
agelist = csv_to_list("ages", antilist)
|
|
agecalculatorlist = csv_to_list("agecalculator", antilist)
|
|
elementlist = csv_to_list("elements", antilist)
|
|
settinglist = csv_to_list("settings", antilist)
|
|
charactertypelist = csv_to_list("charactertypes", antilist)
|
|
objectstoholdlist = csv_to_list("objectstohold", antilist)
|
|
episodetitlelist = csv_to_list(csvfilename="episodetitles",antilist=antilist,skipheader=True)
|
|
flufferlist = csv_to_list("fluff", antilist)
|
|
tokenlist = []
|
|
|
|
# New set of lists
|
|
locationfantasylist = csv_to_list("locationsfantasy", antilist)
|
|
locationscifilist = csv_to_list("locationsscifi", antilist)
|
|
locationvideogamelist = csv_to_list("locationsvideogame", antilist)
|
|
locationbiomelist = csv_to_list("locationsbiome", antilist)
|
|
locationcitylist = csv_to_list("locationscities", antilist)
|
|
birdlist = csv_to_list("birds", antilist)
|
|
catlist = csv_to_list(csvfilename="cats", antilist=antilist,delimiter="?")
|
|
doglist = csv_to_list(csvfilename="dogs", antilist=antilist,delimiter="?")
|
|
insectlist = csv_to_list("insects", antilist)
|
|
pokemonlist = csv_to_list("pokemon", antilist)
|
|
pokemontypelist = csv_to_list("pokemontypes", antilist)
|
|
occultlist = csv_to_list("occult", antilist)
|
|
marinelifelist = csv_to_list("marinelife", antilist)
|
|
|
|
|
|
# additional descriptor lists
|
|
outfitdescriptorlist = csv_to_list("outfitdescriptors",antilist)
|
|
hairdescriptorlist = csv_to_list("hairdescriptors",antilist)
|
|
humandescriptorlist = csv_to_list("humandescriptors",antilist)
|
|
locationdescriptorlist = csv_to_list("locationdescriptors",antilist)
|
|
basicbitchdescriptorlist = csv_to_list("basicbitchdescriptors",antilist)
|
|
animaldescriptorlist = csv_to_list("animaldescriptors",antilist)
|
|
|
|
# descriptorlist becomes one with everything
|
|
descriptortotallist = descriptorlist + outfitdescriptorlist + hairdescriptorlist + humandescriptorlist + locationdescriptorlist + basicbitchdescriptorlist + animaldescriptorlist
|
|
# Deduplicate the list while preserving casings
|
|
descriptorlist = []
|
|
seen_items = set()
|
|
|
|
for item in descriptortotallist:
|
|
# Convert the item to lowercase to ignore casing
|
|
item_lower = item.lower()
|
|
|
|
if item_lower not in seen_items:
|
|
seen_items.add(item_lower)
|
|
descriptorlist.append(item)
|
|
|
|
humanlist = fictionallist + nonfictionallist + humanoidlist
|
|
objecttotallist = objectlist + buildinglist + vehiclelist + foodlist + spacelist + floralist + containerlist + occultlist
|
|
outfitprinttotallist = objecttotallist + locationlist + colorlist + musicgenrelist + seasonlist + animallist + patternlist
|
|
if(less_verbose):
|
|
humanactivitycheatinglist = ["-miniactivity- OR(in;at) a OR(-location-;-building-;-waterlocation-)",
|
|
"-miniactivity- OR(in;at) a OR(-location-;-building-;-waterlocation-)",
|
|
"-miniactivity- OR(in;at) a OR(-location-;-building-;-waterlocation-)",
|
|
"-miniactivity- OR(in;at) a OR(-location-;-building-;-waterlocation-)",
|
|
"-miniactivity- OR(in;at) a OR(-location-;-building-;-waterlocation-)",
|
|
"-miniactivity- OR(in;at) a OR(-location-;-building-;-waterlocation-)",
|
|
"-miniactivity- OR(in;at) a OR(-location-;-building-;-waterlocation-)"]
|
|
else:
|
|
humanactivitycheatinglist = ["OR(;, -heshe- is;uncommon) -miniactivity- OR(in;at) a OR(-location-;-building-;-waterlocation-)",
|
|
"OR(;, -heshe- is;uncommon) -miniactivity- OR(in;at) a OR(-location-;-building-;-waterlocation-)",
|
|
"OR(;, -heshe- is;uncommon) -miniactivity- OR(in;at) a OR(-location-;-building-;-waterlocation-)",
|
|
"OR(;, -heshe- is;uncommon) -miniactivity- OR(in;at) a OR(-location-;-building-;-waterlocation-)",
|
|
"OR(;, -heshe- is;uncommon) -miniactivity- OR(in;at) a OR(-location-;-building-;-waterlocation-)",
|
|
"OR(;, -heshe- is;uncommon) -miniactivity- OR(in;at) a OR(-location-;-building-;-waterlocation-)",
|
|
"OR(;, -heshe- is;uncommon) -miniactivity- OR(in;at) a OR(-location-;-building-;-waterlocation-)"]
|
|
|
|
# build artists list
|
|
if artists == "wild":
|
|
artists = "all (wild)"
|
|
|
|
# we want to create more cohorence, so we are adding all (wild) mode for the old logic
|
|
|
|
# all else will be more constrained per type, to produce better images.
|
|
# the popular artists will be used more the lower the insanitylevel is
|
|
# Future: add in personal artists lists as well
|
|
|
|
# lets maybe go wild "sometimes", based on insanitylevel
|
|
if(artists == "all" and rare_dist(insanitylevel)):
|
|
artists = "all (wild)"
|
|
originalartistchoice = artists
|
|
|
|
artisttypes = ["popular", "3D", "abstract", "angular", "anime" ,"architecture", "art nouveau", "art deco", "baroque", "bauhaus", "cartoon", "character", "children's illustration", "cityscape", "cinema", "clean", "cloudscape", "collage", "colorful", "comics", "cubism", "dark", "detailed", "digital", "expressionism", "fantasy", "fashion", "fauvism", "figurativism", "graffiti", "graphic design", "high contrast", "horror", "impressionism", "installation", "landscape", "light", "line drawing", "low contrast", "luminism", "magical realism", "manga", "melanin", "messy", "monochromatic", "nature", "photography", "pop art", "portrait", "primitivism", "psychedelic", "realism", "renaissance", "romanticism", "scene", "sci-fi", "sculpture", "seascape", "space", "stained glass", "still life", "storybook realism", "street art", "streetscape", "surrealism", "symbolism", "textile", "ukiyo-e", "vibrant", "watercolor", "whimsical"]
|
|
artiststyleselector = ""
|
|
artiststyleselectormode = "normal"
|
|
if(artists == "all" and normal_dist(insanitylevel + 1)):
|
|
artiststyleselector = random.choice(artisttypes)
|
|
artists = artiststyleselector
|
|
elif(artists == "all"):
|
|
artiststyleselectormode = "custom"
|
|
# then else maybe do nothing??
|
|
if(random.randint(0,6) == 0 and onlyartists == False):
|
|
generateartist = False
|
|
# go popular! Or even worse, we go full greg mode!
|
|
elif(common_dist(max(3,insanitylevel))):
|
|
artists = "popular"
|
|
elif(random.randint(0,1) == 0):
|
|
# only on lower instanity levels anyway
|
|
if(insanitylevel < 6):
|
|
#too much greg mode!
|
|
|
|
artists = "greg mode"
|
|
else:
|
|
artists = "popular"
|
|
else:
|
|
artists = "none"
|
|
|
|
else:
|
|
artiststyleselectormode = "custom"
|
|
|
|
|
|
|
|
artistlist = []
|
|
# create artist list to use in the code, maybe based on category or personal lists
|
|
if(artists != "all (wild)" and artists != "all" and artists != "none" and artists.startswith("personal_artists") == False and artists.startswith("personal artists") == False and artists in artisttypes):
|
|
artistlist = artist_category_csv_to_list("artists_and_category",artists)
|
|
elif(artists.startswith("personal_artists") == True or artists.startswith("personal artists") == True):
|
|
artists = artists.replace(" ","_",-1) # add underscores back in
|
|
artistlist = csv_to_list(artists,antilist,"./userfiles/")
|
|
elif(artists != "none"):
|
|
artistlist = csv_to_list("artists",antilist)
|
|
|
|
|
|
# create special artists lists, used in templates
|
|
fantasyartistlist = artist_category_csv_to_list("artists_and_category","fantasy")
|
|
popularartistlist = artist_category_csv_to_list("artists_and_category","popular")
|
|
romanticismartistlist = artist_category_csv_to_list("artists_and_category","romanticism")
|
|
photographyartistlist = artist_category_csv_to_list("artists_and_category","photography")
|
|
portraitartistlist = artist_category_csv_to_list("artists_and_category","portrait")
|
|
characterartistlist = artist_category_csv_to_list("artists_and_category","character")
|
|
landscapeartistlist = artist_category_csv_to_list("artists_and_category","landscape")
|
|
scifiartistlist = artist_category_csv_to_list("artists_and_category","sci-fi")
|
|
graphicdesignartistlist = artist_category_csv_to_list("artists_and_category","graphic design")
|
|
digitalartistlist = artist_category_csv_to_list("artists_and_category","digital")
|
|
architectartistlist = artist_category_csv_to_list("artists_and_category","architecture")
|
|
cinemaartistlist = artist_category_csv_to_list("artists_and_category","cinema")
|
|
gregmodelist = csv_to_list("gregmode", antilist)
|
|
|
|
|
|
# add any other custom lists
|
|
stylestiloralist = csv_to_list("styles_ti_lora",antilist,"./userfiles/")
|
|
generatestyle = bool(stylestiloralist) # True of not empty
|
|
|
|
custominputprefixlist = csv_to_list("custom_input_prefix",antilist,"./userfiles/")
|
|
generatecustominputprefix = bool(custominputprefixlist) # True of not empty
|
|
|
|
custominputmidlist = csv_to_list("custom_input_mid",antilist,"./userfiles/")
|
|
generatecustominputmid = bool(custominputmidlist) # True of not empty
|
|
|
|
custominputsuffixlist = csv_to_list("custom_input_suffix",antilist,"./userfiles/")
|
|
generatecustominputsuffix = bool(custominputsuffixlist) # True of not empty
|
|
|
|
customsubjectslist = csv_to_list("custom_subjects",antilist,"./userfiles/")
|
|
customoutfitslist = csv_to_list("custom_outfits",antilist,"./userfiles/")
|
|
|
|
# special lists
|
|
backgroundtypelist = csv_to_list("backgroundtypes", antilist,"./csvfiles/special_lists/",0,"?")
|
|
insideshotlist = csv_to_list("insideshots", antilist,"./csvfiles/special_lists/",0,"?")
|
|
photoadditionlist = csv_to_list("photoadditions", antilist,"./csvfiles/special_lists/",0,"?")
|
|
if(less_verbose):
|
|
buildhairlist = csv_to_list("buildhair_less_verbose", antilist,"./csvfiles/special_lists/",0,"?")
|
|
buildoutfitlist = csv_to_list("buildoutfit_less_verbose", antilist,"./csvfiles/special_lists/",0,"?")
|
|
humanadditionlist = csv_to_list("humanadditions_less_verbose", antilist,"./csvfiles/special_lists/",0,"?")
|
|
objectadditionslist = csv_to_list("objectadditions_less_verbose", antilist,"./csvfiles/special_lists/",0,"?")
|
|
buildfacelist = csv_to_list("buildface_less_verbose", antilist,"./csvfiles/special_lists/",0,"?")
|
|
buildaccessorielist = csv_to_list("buildaccessorie_less_verbose", antilist,"./csvfiles/special_lists/",0,"?")
|
|
humanactivitylist = csv_to_list("human_activities_less_verbose",antilist,"./csvfiles/",0,"?",False,False)
|
|
humanexpressionlist = csv_to_list("humanexpressions_less_verbose",antilist,"./csvfiles/",0,"?",False,False)
|
|
else:
|
|
buildhairlist = csv_to_list("buildhair", antilist,"./csvfiles/special_lists/",0,"?")
|
|
buildoutfitlist = csv_to_list("buildoutfit", antilist,"./csvfiles/special_lists/",0,"?")
|
|
humanadditionlist = csv_to_list("humanadditions", antilist,"./csvfiles/special_lists/",0,"?")
|
|
objectadditionslist = csv_to_list("objectadditions", antilist,"./csvfiles/special_lists/",0,"?")
|
|
buildfacelist = csv_to_list("buildface", antilist,"./csvfiles/special_lists/",0,"?")
|
|
buildaccessorielist = csv_to_list("buildaccessorie", antilist,"./csvfiles/special_lists/",0,"?")
|
|
humanactivitylist = csv_to_list("human_activities",antilist,"./csvfiles/",0,"?",False,False)
|
|
humanexpressionlist = csv_to_list("humanexpressions",antilist,"./csvfiles/",0,"?",False,False)
|
|
|
|
humanactivitylist = humanactivitylist + humanactivitycheatinglist
|
|
|
|
animaladditionlist = csv_to_list("animaladditions", antilist,"./csvfiles/special_lists/",0,"?")
|
|
|
|
minilocationadditionslist = csv_to_list("minilocationadditions", antilist,"./csvfiles/special_lists/",0,"?")
|
|
overalladditionlist = csv_to_list("overalladditions", antilist,"./csvfiles/special_lists/",0,"?")
|
|
imagetypemodelist = csv_to_list("imagetypemodes", antilist,"./csvfiles/special_lists/",0,"?")
|
|
miniactivitylist = csv_to_list("miniactivity", antilist,"./csvfiles/special_lists/",0,"?")
|
|
animalsuffixadditionlist = csv_to_list("animalsuffixadditions", antilist,"./csvfiles/special_lists/",0,"?")
|
|
buildfacepartlist = csv_to_list("buildfaceparts", antilist,"./csvfiles/special_lists/",0,"?")
|
|
conceptmixerlist = csv_to_list("conceptmixer", antilist,"./csvfiles/special_lists/",0,"?")
|
|
|
|
|
|
tokinatorlist = csv_to_list("tokinator", antilist,"./csvfiles/templates/",0,"?")
|
|
styleslist = csv_to_list("styles", antilist,"./csvfiles/templates/",0,"?")
|
|
stylessuffix = [item.split('-subject-')[1] for item in styleslist]
|
|
breakstylessuffix = [item.split(',') for item in stylessuffix]
|
|
allstylessuffixlist = [value for sublist in breakstylessuffix for value in sublist]
|
|
allstylessuffixlist = list(set(allstylessuffixlist))
|
|
|
|
artistsuffix = artist_descriptions_csv_to_list("artists_and_category")
|
|
breakartiststylessuffix = [item.split(',') for item in artistsuffix]
|
|
artiststylessuffixlist = [value for sublist in breakartiststylessuffix for value in sublist]
|
|
artiststylessuffixlist = list(set(artiststylessuffixlist))
|
|
allstylessuffixlist += artiststylessuffixlist
|
|
|
|
|
|
|
|
dynamictemplatesprefixlist = csv_to_list("dynamic_templates_prefix", antilist,"./csvfiles/templates/",0,"?")
|
|
dynamictemplatessuffixlist = csv_to_list("dynamic_templates_suffix", antilist,"./csvfiles/templates/",0,"?")
|
|
|
|
|
|
# subjects
|
|
mainchooserlist = []
|
|
objectwildcardlist = []
|
|
locationwildcardlist = []
|
|
animalwildcardlist = []
|
|
hybridlist = []
|
|
hybridhumanlist = []
|
|
humanoidsubjectchooserlist = []
|
|
eventsubjectchooserlist = []
|
|
locationsubjectchooserlist = []
|
|
addontolocationinsidelist = []
|
|
addontolocationlist = []
|
|
|
|
# load subjects stuff from config
|
|
generatevehicle = True
|
|
generateobject = True
|
|
generatefood = True
|
|
generatebuilding = True
|
|
generatespace = True
|
|
generateflora = True
|
|
generateoccult = True
|
|
generateconcept = True
|
|
|
|
generateanimal = True
|
|
generatebird = True
|
|
generatecat = True
|
|
generatedog = True
|
|
generateinsect = True
|
|
generatepokemon = True
|
|
generatemarinelife = True
|
|
|
|
|
|
generatemanwoman = True
|
|
generatemanwomanrelation = True
|
|
generatemanwomanmultiple = True
|
|
generatefictionalcharacter = True
|
|
generatenonfictionalcharacter = True
|
|
generatehumanoids = True
|
|
generatejob = True
|
|
generatefirstnames = True
|
|
|
|
generatelandscape = True
|
|
generatelocation = True
|
|
generatelocationfantasy = True
|
|
generatelocationscifi = True
|
|
generatelocationvideogame = True
|
|
generatelocationbiome = True
|
|
generatelocationcity = True
|
|
|
|
generateevent = True
|
|
generateconcepts = True
|
|
generatepoemline = True
|
|
generatesongline = True
|
|
generatecardname = True
|
|
generateepisodetitle = True
|
|
|
|
custominputprefixrepeats = 2
|
|
custominputprefixchance = 'uncommon'
|
|
|
|
imagetypechance = 'normal'
|
|
generateimagetype = True
|
|
imagetypequalitychance = 'rare'
|
|
generateimagetypequality = True
|
|
generateminilocationaddition = True
|
|
minilocationadditionchance = 'unique'
|
|
artmovementprefixchance = 'unique'
|
|
minivomitprefix1chance = 'rare'
|
|
minivomitprefix2chance = 'unique'
|
|
shotsizechance = 'uncommon'
|
|
|
|
subjectdescriptor1chance = 'common'
|
|
subjectdescriptor2chance = 'uncommon'
|
|
subjectbodytypechance = 'normal'
|
|
subjectculturechance = 'normal'
|
|
subjectconceptsuffixchance = 'unique'
|
|
|
|
subjectlandscapeinsideshotchance = 'unique'
|
|
subjectlandscapeaddonlocationchance = 'normal'
|
|
subjectlandscapeaddonlocationdescriptorchance = 'rare'
|
|
subjectlandscapeaddonlocationculturechance = 'rare'
|
|
|
|
objectadditionsrepeats = 2
|
|
objectadditionschance = 'uncommon'
|
|
humanadditionchance = 'rare'
|
|
overalladditionchance = 'extraordinary'
|
|
|
|
emojichance = 'legendary'
|
|
buildfacechance = 'legendary'
|
|
humanexpressionchance = 'rare'
|
|
joboractivitychance = 'normal'
|
|
humanvomitchance = 'rare'
|
|
|
|
custominputmidrepeats = 2
|
|
custominputmidchance = 'uncommon'
|
|
minivomitmidchance = 'unique'
|
|
|
|
outfitchance = 'normal'
|
|
posechance = 'uncommon'
|
|
hairchance = 'normal'
|
|
accessorychance = 'normal'
|
|
humanoidinsideshotchance = 'legendary'
|
|
humanoidbackgroundchance = 'uncommon'
|
|
|
|
landscapeminilocationchance = 'uncommon'
|
|
generalminilocationchance = 'rare'
|
|
|
|
timperiodchance = 'normal'
|
|
focuschance = 'normal'
|
|
directionchance = 'normal'
|
|
moodchance = 'normal'
|
|
minivomitsuffixchance = 'unique'
|
|
artmovementchance = 'normal'
|
|
lightingchance = 'normal'
|
|
photoadditionchance = 'common'
|
|
lenschance = 'normal'
|
|
colorschemechance = 'normal'
|
|
vomit1chance = 'uncommon'
|
|
vomit2chance= 'uncommon'
|
|
greatworkchance = 'novel'
|
|
poemlinechance = 'novel'
|
|
songlinechance = 'novel'
|
|
quality1chance = 'uncommon'
|
|
quality2chance = 'uncommon'
|
|
|
|
customstyle1chance = 'uncommon'
|
|
customstyle2chance = 'uncommon'
|
|
|
|
custominputsuffixrepeats = 2
|
|
custominputsuffixchance = 'uncommon'
|
|
|
|
artistsatbackchance = 'uncommon'
|
|
|
|
for item in config:
|
|
# objects
|
|
if item[0] == 'subject_vehicle' and item[1] != 'on':
|
|
generatevehicle = False
|
|
if item[0] == 'subject_object' and item[1] != 'on':
|
|
generateobject = False
|
|
if item[0] == 'subject_food' and item[1] != 'on':
|
|
generatefood = False
|
|
if item[0] == 'subject_building' and item[1] != 'on':
|
|
generatebuilding = False
|
|
if item[0] == 'subject_space' and item[1] != 'on':
|
|
generatespace = False
|
|
if item[0] == 'subject_flora' and item[1] != 'on':
|
|
generateflora = False
|
|
if item[0] == 'subject_occult' and item[1] != 'on':
|
|
generateoccult = False
|
|
# animals
|
|
if item[0] == 'subject_animal' and item[1] != 'on':
|
|
generateanimal = False
|
|
if item[0] == 'subject_bird' and item[1] != 'on':
|
|
generatebird = False
|
|
if item[0] == 'subject_cat' and item[1] != 'on':
|
|
generatecat = False
|
|
if item[0] == 'subject_dog' and item[1] != 'on':
|
|
generatedog = False
|
|
if item[0] == 'subject_insect' and item[1] != 'on':
|
|
generateinsect = False
|
|
if item[0] == 'subject_pokemon' and item[1] != 'on':
|
|
generatepokemon = False
|
|
if item[0] == 'subject_marinelife' and item[1] != 'on':
|
|
generatemarinelife = False
|
|
# humanoids
|
|
if item[0] == 'subject_manwoman' and item[1] != 'on':
|
|
generatemanwoman = False
|
|
if item[0] == 'subject_manwomanrelation' and item[1] != 'on':
|
|
generatemanwomanrelation = False
|
|
if item[0] == 'subject_manwomanmultiple' and item[1] != 'on':
|
|
generatemanwomanmultiple = False
|
|
if item[0] == 'subject_fictional' and item[1] != 'on':
|
|
generatefictionalcharacter = False
|
|
if item[0] == 'subject_nonfictional' and item[1] != 'on':
|
|
generatenonfictionalcharacter = False
|
|
if item[0] == 'subject_humanoid' and item[1] != 'on':
|
|
generatehumanoids = False
|
|
if item[0] == 'subject_job' and item[1] != 'on':
|
|
generatejob = False
|
|
if item[0] == 'subject_firstnames' and item[1] != 'on':
|
|
generatefirstnames = False
|
|
# landscape
|
|
if item[0] == 'subject_location' and item[1] != 'on':
|
|
generatelocation = False
|
|
if item[0] == 'subject_location_fantasy' and item[1] != 'on':
|
|
generatelocationfantasy = False
|
|
if item[0] == 'subject_location_scifi' and item[1] != 'on':
|
|
generatelocationscifi = False
|
|
if item[0] == 'subject_location_videogame' and item[1] != 'on':
|
|
generatelocationvideogame = False
|
|
if item[0] == 'subject_location_biome' and item[1] != 'on':
|
|
generatelocationbiome = False
|
|
if item[0] == 'subject_location_city' and item[1] != 'on':
|
|
generatelocationcity = False
|
|
# concept
|
|
if item[0] == 'subject_event' and item[1] != 'on':
|
|
generateevent = False
|
|
if item[0] == 'subject_concept' and item[1] != 'on':
|
|
generateconcepts = False
|
|
if item[0] == 'subject_poemline' and item[1] != 'on':
|
|
generatepoemline = False
|
|
if item[0] == 'subject_songline' and item[1] != 'on':
|
|
generatesongline = False
|
|
if item[0] == 'subject_cardname' and item[1] != 'on':
|
|
generatecardname = False
|
|
if item[0] == 'subject_episodetitle' and item[1] != 'on':
|
|
generateepisodetitle = False
|
|
|
|
# main list stuff
|
|
if item[0] == 'custominputprefixrepeats':
|
|
custominputprefixrepeats = int(item[1])
|
|
if item[0] == 'custominputprefixchance':
|
|
custominputprefixchance = item[1]
|
|
if(custominputprefixchance == 'never'):
|
|
generatecustominputprefix = False
|
|
if item[0] == 'imagetypechance':
|
|
imagetypechance = item[1]
|
|
if(imagetypechance == 'never'):
|
|
generateimagetype = False
|
|
if item[0] == 'imagetypequalitychance':
|
|
imagetypequalitychance = item[1]
|
|
if(imagetypequalitychance == 'never'):
|
|
generateimagetypequality = False
|
|
if item[0] == 'minilocationadditionchance':
|
|
minilocationadditionchance = item[1]
|
|
if item[0] == 'artmovementprefixchance':
|
|
artmovementprefixchance = item[1]
|
|
if item[0] == 'minivomitprefix1chance':
|
|
minivomitprefix1chance = item[1]
|
|
if item[0] == 'minivomitprefix2chance':
|
|
minivomitprefix2chance = item[1]
|
|
|
|
if item[0] == 'shotsizechance':
|
|
shotsizechance = item[1]
|
|
|
|
if item[0] == 'subjectdescriptor1chance':
|
|
subjectdescriptor1chance = item[1]
|
|
if item[0] == 'subjectdescriptor2chance':
|
|
subjectdescriptor2chance = item[1]
|
|
if item[0] == 'subjectbodytypechance':
|
|
subjectbodytypechance = item[1]
|
|
if item[0] == 'subjectculturechance':
|
|
subjectculturechance = item[1]
|
|
if item[0] == 'subjectconceptsuffixchance':
|
|
subjectconceptsuffixchance = item[1]
|
|
|
|
if item[0] == 'subjectlandscapeinsideshotchance':
|
|
subjectlandscapeinsideshotchance = item[1]
|
|
if item[0] == 'subjectlandscapeaddonlocationchance':
|
|
subjectlandscapeaddonlocationchance = item[1]
|
|
if item[0] == 'subjectlandscapeaddonlocationdescriptorchance':
|
|
subjectlandscapeaddonlocationdescriptorchance = item[1]
|
|
if item[0] == 'subjectlandscapeaddonlocationculturechance':
|
|
subjectlandscapeaddonlocationculturechance = item[1]
|
|
|
|
if item[0] == 'objectadditionsrepeats':
|
|
objectadditionsrepeats = int(item[1])
|
|
if item[0] == 'objectadditionschance':
|
|
objectadditionschance = item[1]
|
|
if item[0] == 'humanadditionchance':
|
|
humanadditionchance = item[1]
|
|
if item[0] == 'overalladditionchance':
|
|
overalladditionchance = item[1]
|
|
|
|
if item[0] == 'emojichance':
|
|
emojichance = item[1]
|
|
if(hardturnoffemojis==True):
|
|
emojichance='never'
|
|
if item[0] == 'buildfacechance':
|
|
buildfacechance = item[1]
|
|
if item[0] == 'humanexpressionchance':
|
|
humanexpressionchance = item[1]
|
|
if item[0] == 'humanvomitchance':
|
|
humanvomitchance = item[1]
|
|
if item[0] == 'joboractivitychance':
|
|
joboractivitychance = item[1]
|
|
|
|
if item[0] == 'custominputmidrepeats':
|
|
custominputmidrepeats = int(item[1])
|
|
if item[0] == 'custominputmidchance':
|
|
custominputmidchance = item[1]
|
|
if item[0] == 'minivomitmidchance':
|
|
minivomitmidchance = item[1]
|
|
|
|
if item[0] == 'outfitchance':
|
|
outfitchance = item[1]
|
|
if item[0] == 'posechance':
|
|
posechance = item[1]
|
|
if item[0] == 'hairchance':
|
|
hairchance = item[1]
|
|
if item[0] == 'accessorychance':
|
|
accessorychance = item[1]
|
|
if item[0] == 'humanoidinsideshotchance':
|
|
humanoidinsideshotchance = item[1]
|
|
if item[0] == 'humanoidbackgroundchance':
|
|
humanoidbackgroundchance = item[1]
|
|
|
|
if item[0] == 'landscapeminilocationchance':
|
|
landscapeminilocationchance = item[1]
|
|
if item[0] == 'generalminilocationchance':
|
|
generalminilocationchance = item[1]
|
|
|
|
if item[0] == 'timperiodchance':
|
|
timperiodchance = item[1]
|
|
if item[0] == 'focuschance':
|
|
focuschance = item[1]
|
|
if item[0] == 'directionchance':
|
|
directionchance = item[1]
|
|
if item[0] == 'moodchance':
|
|
moodchance = item[1]
|
|
if item[0] == 'minivomitsuffixchance':
|
|
minivomitsuffixchance = item[1]
|
|
if item[0] == 'artmovementchance':
|
|
artmovementchance = item[1]
|
|
if item[0] == 'lightingchance':
|
|
lightingchance = item[1]
|
|
if item[0] == 'photoadditionchance':
|
|
photoadditionchance = item[1]
|
|
if item[0] == 'lenschance':
|
|
lenschance = item[1]
|
|
if item[0] == 'colorschemechance':
|
|
colorschemechance = item[1]
|
|
if item[0] == 'vomit1chance':
|
|
vomit1chance = item[1]
|
|
if item[0] == 'vomit2chance':
|
|
vomit2chance = item[1]
|
|
if item[0] == 'greatworkchance':
|
|
greatworkchance = item[1]
|
|
if item[0] == 'poemlinechance':
|
|
poemlinechance = item[1]
|
|
if item[0] == 'songlinechance':
|
|
songlinechance = item[1]
|
|
if item[0] == 'quality1chance':
|
|
quality1chance = item[1]
|
|
if item[0] == 'quality2chance':
|
|
quality2chance = item[1]
|
|
|
|
if item[0] == 'customstyle1chance':
|
|
customstyle1chance = item[1]
|
|
if item[0] == 'customstyle2chance':
|
|
customstyle2chance = item[1]
|
|
|
|
if item[0] == 'custominputsuffixrepeats':
|
|
custominputsuffixrepeats = int(item[1])
|
|
if item[0] == 'custominputsuffixchance':
|
|
custominputsuffixchance = item[1]
|
|
|
|
if item[0] == 'artistsatbackchance':
|
|
artistsatbackchance = item[1]
|
|
|
|
|
|
generatevehicle = bool(vehiclelist) and generatevehicle
|
|
generateobject = bool(objectlist) and generateobject
|
|
generatefood = bool(foodlist) and generatefood
|
|
generatebuilding = bool(buildinglist) and generatebuilding
|
|
generatespace = bool(spacelist) and generatespace
|
|
generateflora = bool(floralist) and generateflora
|
|
generateoccult = bool(occultlist) and generateoccult
|
|
generateobject = generatevehicle or generateobject or generatefood or generatebuilding or generatespace or generateflora or generateoccult
|
|
|
|
|
|
if(generatevehicle):
|
|
objectwildcardlist.append("-vehicle-")
|
|
hybridlist.append("-vehicle-")
|
|
addontolocationlist.append("-vehicle-")
|
|
|
|
if(generateobject):
|
|
objectwildcardlist.append("-object-")
|
|
hybridlist.append("-object-")
|
|
|
|
if(generatefood):
|
|
objectwildcardlist.append("-food-")
|
|
hybridlist.append("-food-")
|
|
|
|
if(generatespace):
|
|
objectwildcardlist.append("-space-")
|
|
hybridlist.append("-space-")
|
|
addontolocationlist.append("-space-")
|
|
|
|
if(generatebuilding):
|
|
objectwildcardlist.append("-building-")
|
|
hybridlist.append("-building-")
|
|
addontolocationlist.append("-building-")
|
|
addontolocationinsidelist.append("-building-")
|
|
|
|
if(generateflora):
|
|
objectwildcardlist.append("-flora-")
|
|
hybridlist.append("-flora-")
|
|
addontolocationlist.append("-flora-")
|
|
|
|
if(generateoccult):
|
|
objectwildcardlist.append("-occult-")
|
|
hybridlist.append("-occult-")
|
|
addontolocationlist.append("-occult-")
|
|
|
|
if(generateobject):
|
|
mainchooserlist.append("object")
|
|
|
|
if(generatelandscape):
|
|
mainchooserlist.append("landscape")
|
|
|
|
if(generatelocationfantasy):
|
|
locationwildcardlist.append("-locationfantasy-")
|
|
|
|
if(generatelocationscifi):
|
|
locationwildcardlist.append("-locationscifi-")
|
|
|
|
if(generatelocationvideogame):
|
|
locationwildcardlist.append("-locationvideogame-")
|
|
|
|
if(generatelocationbiome):
|
|
locationwildcardlist.append("-locationbiome-")
|
|
|
|
if(generatelocationcity):
|
|
locationwildcardlist.append("-locationcity-")
|
|
|
|
if(generatelocation):
|
|
locationwildcardlist.append("-location-")
|
|
|
|
if(generateanimal):
|
|
animalwildcardlist.append("-animal-")
|
|
|
|
if(generatebird):
|
|
animalwildcardlist.append("-bird-")
|
|
|
|
if(generatecat):
|
|
animalwildcardlist.append("-cat-")
|
|
|
|
if(generatedog):
|
|
animalwildcardlist.append("-dog-")
|
|
|
|
if(generateinsect):
|
|
animalwildcardlist.append("-insect-")
|
|
|
|
if(generatepokemon):
|
|
animalwildcardlist.append("-pokemon-")
|
|
|
|
if(generatemarinelife):
|
|
animalwildcardlist.append("-marinelife-")
|
|
|
|
generatefictionalcharacter = bool(fictionallist) and generatefictionalcharacter
|
|
generatenonfictionalcharacter = bool(nonfictionallist) and generatenonfictionalcharacter
|
|
generatehumanoids = bool(humanoidlist) and generatehumanoids
|
|
generatemanwoman = bool(manwomanlist) and generatemanwoman
|
|
generatemanwomanrelation = bool(manwomanrelationlist) and generatemanwomanrelation
|
|
generatemanwomanmultiple = bool(manwomanmultiplelist) and generatemanwomanmultiple
|
|
generatejob = bool(joblist) and generatejob
|
|
generatefirstnames = bool(firstnamelist) and generatefirstnames
|
|
generatehumanoid = generatefictionalcharacter or generatenonfictionalcharacter or generatehumanoids or generatemanwoman or generatejob or generatemanwomanrelation or generatefirstnames or generatemanwomanmultiple
|
|
|
|
|
|
if(generatefictionalcharacter):
|
|
humanoidsubjectchooserlist.append("fictional")
|
|
hybridlist.append("-fictional-")
|
|
hybridhumanlist.append("-fictional-")
|
|
|
|
if(generatefictionalcharacter):
|
|
humanoidsubjectchooserlist.append("non fictional")
|
|
hybridlist.append("-nonfictional-")
|
|
hybridhumanlist.append("-nonfictional-")
|
|
|
|
if(generatehumanoids):
|
|
humanoidsubjectchooserlist.append("humanoid")
|
|
hybridlist.append("-humanoid-")
|
|
hybridhumanlist.append("-humanoid-")
|
|
|
|
if(generatemanwoman):
|
|
humanoidsubjectchooserlist.append("human")
|
|
|
|
if(generatemanwomanrelation):
|
|
humanoidsubjectchooserlist.append("manwomanrelation")
|
|
|
|
if(generatemanwomanmultiple):
|
|
humanoidsubjectchooserlist.append("manwomanmultiple")
|
|
|
|
if(generatejob):
|
|
humanoidsubjectchooserlist.append("job")
|
|
|
|
if(generatehumanoid):
|
|
mainchooserlist.append("humanoid")
|
|
|
|
if(generatefirstnames):
|
|
humanoidsubjectchooserlist.append("firstname")
|
|
|
|
|
|
generateanimal = bool(animallist) and generateanimal
|
|
generatebird = bool(birdlist) and generatebird
|
|
generatecat = bool(catlist) and generatecat
|
|
generatedog = bool(doglist) and generatedog
|
|
generateinsect = bool(insectlist) and generateinsect
|
|
generatepokemon = bool(pokemonlist) and generatepokemon
|
|
generatemarinelife = bool(marinelifelist) and generatemarinelife
|
|
|
|
generateanimaltotal = generateanimal or generatebird or generatecat or generatedog or generateinsect or generatepokemon or generatemarinelife
|
|
|
|
if(generateanimal):
|
|
hybridlist.append("-animal-")
|
|
if(generatebird):
|
|
hybridlist.append("-bird-")
|
|
if(generatecat):
|
|
hybridlist.append("-cat-")
|
|
if(generatedog):
|
|
hybridlist.append("-dog-")
|
|
if(generateinsect):
|
|
hybridlist.append("-insect-")
|
|
if(generatepokemon):
|
|
hybridlist.append("-pokemon-")
|
|
|
|
if(generatemarinelife):
|
|
hybridlist.append("-marinelife-")
|
|
|
|
if(generateanimaltotal):
|
|
mainchooserlist.append("animal")
|
|
|
|
generatelocation = bool(locationlist) and generatelocation
|
|
generatelocationfantasy = bool(locationfantasylist) and generatelocationfantasy
|
|
generatelocationscifi = bool(locationscifilist) and generatelocationscifi
|
|
generatelocationvideogame = bool(locationvideogamelist) and generatelocationvideogame
|
|
generatelocationbiome = bool(locationbiomelist) and generatelocationbiome
|
|
generatelocationcity = bool(locationcitylist) and generatelocationcity
|
|
generatelandscape = generatelocation or generatelocationfantasy or generatelocationscifi or generatelocationvideogame or generatelocationbiome or generatelocationcity
|
|
|
|
if(generatelandscape):
|
|
addontolocationlist.append("-location-")
|
|
addontolocationlist.append("-background-")
|
|
addontolocationinsidelist.append("-location-")
|
|
addontolocationinsidelist.append("-background-")
|
|
locationsubjectchooserlist.append("landscape")
|
|
|
|
if(generatelocation):
|
|
locationsubjectchooserlist.append("location")
|
|
if(generatelocationfantasy):
|
|
locationsubjectchooserlist.append("fantasy location")
|
|
if(generatelocationscifi):
|
|
locationsubjectchooserlist.append("sci-fi location")
|
|
if(generatelocationvideogame):
|
|
locationsubjectchooserlist.append("videogame location")
|
|
if(generatelocationbiome):
|
|
locationsubjectchooserlist.append("biome")
|
|
if(generatelocationcity):
|
|
locationsubjectchooserlist.append("city")
|
|
|
|
generateevent = bool(eventlist) and generateevent
|
|
generateconcepts = bool(conceptprefixlist) and bool(conceptsuffixlist) and generateconcepts
|
|
generatepoemline = bool(poemlinelist) and generatepoemline
|
|
generatesongline = bool(songlinelist) and generatesongline
|
|
generatecardname = bool(cardnamelist) and generatecardname
|
|
generateepisodetitle = bool(episodetitlelist) and generateepisodetitle
|
|
|
|
|
|
|
|
generateconcept = generateevent or generateconcepts or generatepoemline or generatesongline
|
|
|
|
if(generateevent):
|
|
eventsubjectchooserlist.append("event")
|
|
|
|
if(generateconcepts):
|
|
eventsubjectchooserlist.append("concept")
|
|
|
|
if(generatepoemline):
|
|
eventsubjectchooserlist.append("poemline")
|
|
|
|
if(generatesongline):
|
|
eventsubjectchooserlist.append("songline")
|
|
|
|
if(generatecardname):
|
|
eventsubjectchooserlist.append("cardname")
|
|
|
|
if(generateepisodetitle):
|
|
eventsubjectchooserlist.append("episodetitle")
|
|
|
|
if(generateconcept):
|
|
mainchooserlist.append("concept")
|
|
|
|
|
|
|
|
# determine wether we have a special mode or not
|
|
if(random.randint(1,int(imagemodechance)) == 1 and (imagetype == "all" or imagetype == "all - anime") and giventypeofimage == "" and onlyartists == False):
|
|
if(less_verbose):
|
|
imagetypemodelist.remove("dynamic templates mode")
|
|
if(anime_mode):
|
|
imagetypemodelist.remove("only templates mode")
|
|
imagetypemodelist.remove("massive madness mode")
|
|
imagetypemodelist.remove("fixed styles mode")
|
|
imagetypemodelist.remove("unique art mode")
|
|
imagetype = random.choice(imagetypemodelist) # override imagetype with a random "mode" value
|
|
|
|
|
|
|
|
specialmode = False
|
|
templatemode = False
|
|
artblastermode = False
|
|
qualityvomitmode = False
|
|
uniqueartmode = False
|
|
colorcannonmode = False
|
|
photofantasymode = False
|
|
massivemadnessmode = False
|
|
onlysubjectmode = False
|
|
stylesmode = False
|
|
thetokinatormode = False
|
|
dynamictemplatesmode = False
|
|
artifymode = False
|
|
|
|
# determine wether we should go for a template or not. Not hooked up to insanitylevel
|
|
if(imagetype == "only templates mode"):
|
|
specialmode = True
|
|
templatemode = True
|
|
print("Running with a randomized template instead of a randomized prompt")
|
|
|
|
if(imagetype == "art blaster mode"):
|
|
specialmode = True
|
|
if(uncommon_dist(insanitylevel)):
|
|
artblastermode = True
|
|
elif(bool(artistlist)):
|
|
onlysubjectmode = True
|
|
artifymode = True
|
|
else:
|
|
artblastermode = True
|
|
print("Running in art blaster mode")
|
|
|
|
if(imagetype == "unique art mode"):
|
|
specialmode = True
|
|
uniqueartmode = True
|
|
print("Running in unique art mode")
|
|
|
|
if(imagetype == "quality vomit mode"):
|
|
specialmode = True
|
|
qualityvomitmode = True
|
|
print("Running in quality vomit mode")
|
|
|
|
if(imagetype == "color cannon mode"):
|
|
specialmode = True
|
|
colorcannonmode = True
|
|
print("Running in color cannon mode")
|
|
|
|
if(imagetype == "photo fantasy mode"):
|
|
specialmode = True
|
|
photofantasymode = True
|
|
print("Running in photo fantasy mode")
|
|
|
|
if(imagetype == "massive madness mode"):
|
|
specialmode = True
|
|
massivemadnessmode = True
|
|
print("Running in massive madness mode")
|
|
print("Are you ready for this?")
|
|
|
|
if(imagetype == "subject only mode"):
|
|
specialmode = True
|
|
onlysubjectmode = True
|
|
print("Running in only subject mode")
|
|
|
|
if(imagetype == "fixed styles mode"):
|
|
specialmode = True
|
|
stylesmode = True
|
|
print("Running with a randomized style instead of a randomized prompt")
|
|
|
|
if(imagetype == "the tokinator"):
|
|
specialmode = True
|
|
thetokinatormode = True
|
|
# for performance, load the list here
|
|
tokenlist = csv_to_list(csvfilename="tokens",antilist=antilist,skipheader=True)
|
|
print("Running with a completely random set of words")
|
|
print("All safety and logic is turned off")
|
|
|
|
if(imagetype == "dynamic templates mode"):
|
|
specialmode = True
|
|
dynamictemplatesmode = True
|
|
print("Running with dynamic templates mode")
|
|
|
|
# just for testing, you can't choose this. Artify runs through Art Blaster instead.
|
|
if(imagetype == "artify mode"):
|
|
specialmode = True
|
|
onlysubjectmode = True
|
|
artifymode = True
|
|
print("Running with artify mode")
|
|
|
|
# main stuff
|
|
generatetype = not specialmode
|
|
generatesubject = not templatemode
|
|
if(thetokinatormode):
|
|
generatesubject = False
|
|
|
|
# normals
|
|
generateartist = bool(artistlist) and not specialmode
|
|
if(thetokinatormode):
|
|
generateartist = bool(artistlist)
|
|
generateoutfit = bool(outfitlist) and not templatemode
|
|
generatebodytype = bool(bodytypelist) and not templatemode
|
|
generateaccessorie = bool(accessorielist) and not specialmode
|
|
generateartmovement = bool(artmovementlist) and not specialmode
|
|
generatecamera = bool(cameralist) and not specialmode
|
|
generatecolorscheme = bool(colorschemelist) and not specialmode
|
|
generatedescriptors = bool(descriptorlist) and not templatemode
|
|
generatedirection = bool(directionlist) and not specialmode
|
|
generatefocus = bool(focuslist) and not specialmode
|
|
generatehairstyle = bool(hairstylelist) and not templatemode
|
|
generatelens = bool(lenslist) and not specialmode
|
|
generatelighting = bool(lightinglist) and not specialmode
|
|
generatemood = bool(moodlist) and not specialmode
|
|
generatepose = bool(poselist) and not templatemode
|
|
generatevomit = bool(vomitlist) and not specialmode and add_vomit
|
|
generatequality = bool(qualitylist) and not specialmode and add_quality
|
|
generateshot = bool(shotsizelist) and not specialmode
|
|
generatetimeperiod = bool(timeperiodlist) and not specialmode
|
|
generateemoji = bool(emojilist) and not templatemode
|
|
generateface = bool(buildfacelist) and not specialmode
|
|
generatehumanexpression = bool(humanexpressionlist) and not specialmode
|
|
generatehumanvomit = bool(humanvomitlist) and not specialmode
|
|
|
|
# specials:
|
|
generatebackground = bool(backgroundtypelist) and not specialmode
|
|
generateinsideshot = bool(insideshotlist) and not specialmode
|
|
generatephotoaddition = bool(photoadditionlist) and not specialmode
|
|
generatehairstyle = bool(buildhairlist) and not templatemode
|
|
generateoutfit = bool(buildoutfitlist) and not templatemode
|
|
generateobjectaddition = bool(objectadditionslist) and not templatemode
|
|
generatehumanaddition = bool(humanadditionlist) and not templatemode
|
|
generateanimaladdition = bool(animaladditionlist) and not templatemode
|
|
generateaccessories = bool(buildaccessorielist) and not templatemode
|
|
generategreatwork = bool(greatworklist) and not specialmode
|
|
generatepoemline = bool(poemlinelist) and not specialmode
|
|
generatesongline = bool(songlinelist) and not specialmode
|
|
generatecardname = bool(cardnamelist) and not specialmode
|
|
generateepisodetitle = bool(episodetitlelist) and not specialmode
|
|
|
|
generateminilocationaddition = bool(minilocationadditionslist) and not specialmode
|
|
generateminivomit = bool(minivomitlist) and not specialmode and add_vomit
|
|
generateimagetypequality = bool(imagetypequalitylist) and not specialmode and generateimagetypequality
|
|
generateoveralladdition = bool(overalladditionlist) and not specialmode
|
|
generateimagetype = bool(imagetypelist) and not specialmode and generateimagetype
|
|
|
|
|
|
# Smart subject logic
|
|
givensubjectlist = []
|
|
|
|
if(givensubject != "" and smartsubject == True):
|
|
givensubject = givensubject.lower()
|
|
|
|
# Remove any list that has a matching word in the list
|
|
# Remove any list/logic with keywords, such as:
|
|
# wearing, bodytype, pose, location, hair, background
|
|
|
|
# use function to split up the words
|
|
givensubjectlist = split_prompt_to_words(givensubject)
|
|
|
|
# Check only for the lists that make sense?
|
|
|
|
# outfit
|
|
foundinlist = any(word.lower() in [item.lower() for item in outfitlist] for word in givensubjectlist)
|
|
keywordslist = ["wearing","outfit", "dressed"]
|
|
keywordsinstring = any(word.lower() in givensubject.lower() for word in keywordslist)
|
|
if(foundinlist == True or keywordsinstring == True):
|
|
generateoutfit = False
|
|
|
|
# bodytype
|
|
foundinlist = any(word.lower() in [item.lower() for item in bodytypelist] for word in givensubjectlist)
|
|
keywordslist = ["bodytype","body type","model"]
|
|
keywordsinstring = any(word.lower() in givensubject.lower() for word in keywordslist)
|
|
if(foundinlist == True or keywordsinstring == True):
|
|
generatebodytype = False
|
|
|
|
# hair
|
|
foundinlist = any(word.lower() in [item.lower() for item in hairstylelist] for word in givensubjectlist)
|
|
keywordslist = ["hair","hairstyle"]
|
|
keywordsinstring = any(word.lower() in givensubject.lower() for word in keywordslist)
|
|
if(foundinlist == True or keywordsinstring == True):
|
|
generatehairstyle = False
|
|
|
|
# descriptorlist
|
|
foundinlist = any(word.lower() in [item.lower() for item in descriptorlist] for word in givensubjectlist)
|
|
foundinlist2 = any(word.lower() in [item.lower() for item in culturelist] for word in givensubjectlist)
|
|
if(foundinlist == True or foundinlist2 == True):
|
|
generatedescriptors = False
|
|
|
|
# background
|
|
foundinlist = any(word.lower() in [item.lower() for item in locationlist] for word in givensubjectlist)
|
|
foundinlist2 = any(word.lower() in [item.lower() for item in buildinglist] for word in givensubjectlist)
|
|
keywordslist = ["location","background", "inside", "at the", "in a"]
|
|
keywordsinstring = any(word.lower() in givensubject.lower() for word in keywordslist)
|
|
if(foundinlist == True or foundinlist2 == True or keywordsinstring == True):
|
|
generatebackground = False
|
|
generateinsideshot = False
|
|
|
|
# accessorielist
|
|
foundinlist = any(word.lower() in [item.lower() for item in accessorielist] for word in givensubjectlist)
|
|
if(foundinlist == True):
|
|
generateaccessorie = False
|
|
|
|
# lenslist
|
|
foundinlist = any(word.lower() in [item.lower() for item in lenslist] for word in givensubjectlist)
|
|
if(foundinlist == True):
|
|
generatelens = False
|
|
|
|
# lightinglist
|
|
foundinlist = any(word.lower() in [item.lower() for item in lightinglist] for word in givensubjectlist)
|
|
keywordslist = ["lighting"]
|
|
keywordsinstring = any(word.lower() in givensubject.lower() for word in keywordslist)
|
|
if(foundinlist == True or keywordsinstring == True):
|
|
generatelighting = False
|
|
|
|
# mood
|
|
foundinlist = any(word.lower() in [item.lower() for item in moodlist] for word in givensubjectlist)
|
|
keywordslist = ["mood"]
|
|
keywordsinstring = any(word.lower() in givensubject.lower() for word in keywordslist)
|
|
if(foundinlist == True or keywordsinstring == True):
|
|
generatemood = False
|
|
|
|
|
|
# poselist
|
|
foundinlist = any(word.lower() in [item.lower() for item in poselist] for word in givensubjectlist)
|
|
keywordslist = ["pose", "posing"]
|
|
keywordsinstring = any(word.lower() in givensubject.lower() for word in keywordslist)
|
|
if(foundinlist == True or keywordsinstring == True):
|
|
generatepose = False
|
|
|
|
# qualitylist
|
|
foundinlist = any(word.lower() in [item.lower() for item in qualitylist] for word in givensubjectlist)
|
|
keywordslist = ["quality"]
|
|
keywordsinstring = any(word.lower() in givensubject.lower() for word in keywordslist)
|
|
if(foundinlist == True or keywordsinstring == True):
|
|
generatequality = False
|
|
|
|
# shotsize
|
|
foundinlist = any(word.lower() in [item.lower() for item in shotsizelist] for word in givensubjectlist)
|
|
keywordslist = ["shot"]
|
|
keywordsinstring = any(word.lower() in givensubject.lower() for word in keywordslist)
|
|
if(foundinlist == True or keywordsinstring == True):
|
|
generateshot = False
|
|
|
|
# timeperiodlist
|
|
foundinlist = any(word.lower() in [item.lower() for item in timeperiodlist] for word in givensubjectlist)
|
|
if(foundinlist == True):
|
|
generatetimeperiod = False
|
|
|
|
# vomit
|
|
foundinlist = any(word.lower() in [item.lower() for item in vomitlist] for word in givensubjectlist)
|
|
if(foundinlist == True):
|
|
generatevomit = False
|
|
|
|
# directionlist
|
|
foundinlist = any(word.lower() in [item.lower() for item in directionlist] for word in givensubjectlist)
|
|
if(foundinlist == True):
|
|
generatedirection = False
|
|
|
|
# focus
|
|
foundinlist = any(word.lower() in [item.lower() for item in focuslist] for word in givensubjectlist)
|
|
if(foundinlist == True):
|
|
generatefocus = False
|
|
|
|
# artmovementlist
|
|
foundinlist = any(word.lower() in [item.lower() for item in artmovementlist] for word in givensubjectlist)
|
|
if(foundinlist == True):
|
|
generateartmovement = False
|
|
|
|
# camera
|
|
foundinlist = any(word.lower() in [item.lower() for item in cameralist] for word in givensubjectlist)
|
|
if(foundinlist == True):
|
|
generatecamera = False
|
|
|
|
# colorschemelist
|
|
foundinlist = any(word.lower() in [item.lower() for item in colorschemelist] for word in givensubjectlist)
|
|
if(foundinlist == True):
|
|
generatecolorscheme = False
|
|
|
|
|
|
# given subject subject override :p
|
|
subjectingivensubject = False
|
|
if("subject" in list(map(str.lower, givensubjectlist)) and smartsubject == True):
|
|
givensubjectpromptlist = givensubject.split("subject")
|
|
subjectingivensubject = True
|
|
|
|
completeprompt = ""
|
|
|
|
|
|
|
|
|
|
promptstocompound = int(promptcompounderlevel)
|
|
compoundcounter = 0
|
|
|
|
while compoundcounter < promptstocompound:
|
|
isphoto = 0
|
|
othertype = 0
|
|
humanspecial = 0
|
|
animaladdedsomething = 0
|
|
isweighted = 0
|
|
amountofimagetypes = 0
|
|
hybridorswap = ""
|
|
artistmode = "normal"
|
|
insideshot = 0
|
|
buildingfullmode = False
|
|
subjectchooser = ""
|
|
mainchooser = ""
|
|
|
|
#completeprompt += prefixprompt
|
|
|
|
completeprompt += ", "
|
|
|
|
if(templatemode==True):
|
|
templatelist = csv_to_list("templates", antilist,"./csvfiles/templates/",1,";",True)
|
|
|
|
|
|
# templateenvironments = [templateenvironment[1] for templateenvironment in templatelist]
|
|
# templateenvironmentsources = [templateenvironmentsource[2] for templateenvironmentsource in templatelist]
|
|
# templatesubjecttypes = [templatesubjecttype[3] for templatesubjecttype in templatelist]
|
|
|
|
targettemplateenvironment = "all"
|
|
templateenvironmentsources = "all"
|
|
|
|
# takes the prompt based on filters:
|
|
# targettemplateenvironment: either civitai model or website
|
|
# templateenvironmentsources: either
|
|
templateprompts = [templateprompt[0] for templateprompt in templatelist if( (templateprompt[1] == targettemplateenvironment or targettemplateenvironment =="all") and (templateprompt[2] == templateenvironmentsources or templateenvironmentsources == "all") and (templateprompt[3] == forcesubject or forcesubject == "all") ) ]
|
|
templatepromptcreator = [templateprompt[1] for templateprompt in templatelist if( (templateprompt[1] == targettemplateenvironment or targettemplateenvironment =="all") and (templateprompt[2] == templateenvironmentsources or templateenvironmentsources == "all") and (templateprompt[3] == forcesubject or forcesubject == "all") ) ]
|
|
templatesubjects= [templateprompt[4] for templateprompt in templatelist if( (templateprompt[1] == targettemplateenvironment or targettemplateenvironment =="all") and (templateprompt[2] == templateenvironmentsources or templateenvironmentsources == "all") and (templateprompt[3] == forcesubject or forcesubject == "all") )]
|
|
|
|
# choose the template
|
|
chosentemplate = random.choice(templateprompts)
|
|
templateindex = templateprompts.index(chosentemplate)
|
|
|
|
print("Processing a prompt that was inspired from: " + templatepromptcreator[templateindex])
|
|
|
|
# if there is a subject override, then replace the subject with that
|
|
if(givensubject==""):
|
|
completeprompt += chosentemplate.replace("-subject-",templatesubjects[templateindex] )
|
|
elif(givensubject != "" and subjectingivensubject == False):
|
|
completeprompt += chosentemplate.replace("-subject-",givensubject )
|
|
elif(givensubject != "" and subjectingivensubject == True):
|
|
completeprompt += chosentemplate.replace("-subject-", givensubjectpromptlist[0] + " " + templatesubjects[templateindex] + " " + givensubjectpromptlist[1])
|
|
|
|
|
|
|
|
# custom prefix list
|
|
for i in range(custominputprefixrepeats):
|
|
if(chance_roll(insanitylevel, custominputprefixchance) and generatecustominputprefix == True):
|
|
completeprompt += random.choice(custominputprefixlist) + ", "
|
|
|
|
|
|
|
|
if(insanitylevel==0):
|
|
insanitylevel = random.randint(1, 10) # 10 = add everything, 1 is add almost nothing
|
|
insanitylevel3 = int((insanitylevel/3) + 1.20)
|
|
|
|
# print("Setting insanity level to " + str(insanitylevel))
|
|
|
|
# main chooser: 0 object, 1 animal, 2 humanoid, 3 landscape, 4 event/concept
|
|
#mainchooserlist = ["object","animal","humanoid", "landscape", "concept"]
|
|
|
|
# ["popular", "3D", "abstract", "angular", "anime" ,"architecture", "art nouveau", "art deco", "baroque", "bauhaus", "cartoon", "character", "children's illustration", "cityscape", "clean", "cloudscape", "collage", "colorful", "comics", "cubism", "dark", "detailed", "digital", "expressionism", "fantasy", "fashion", "fauvism", "figurativism", "gore", "graffiti", "graphic design", "high contrast", "horror", "impressionism", "installation", "landscape", "light", "line drawing", "low contrast", "luminism", "magical realism", "manga", "melanin", "messy", "monochromatic", "nature", "photography", "pop art", "portrait", "primitivism", "psychedelic", "realism", "renaissance", "romanticism", "scene", "sci-fi", "sculpture", "seascape", "space", "stained glass", "still life", "storybook realism", "street art", "streetscape", "surrealism", "symbolism", "textile", "ukiyo-e", "vibrant", "watercolor", "whimsical"]
|
|
|
|
# Some new logic, lets base the main chooser list on the chosen art category, to make it more cohorent
|
|
# first for humanoids
|
|
artiststylelistforchecking = ["popular", "3D", "anime" "art nouveau", "art deco", "character", "fantasy", "fashion", "manga", "photography","portrait","sci-fi"]
|
|
if((artiststyleselector in artiststylelistforchecking
|
|
or artists in artiststylelistforchecking)
|
|
and (forcesubject == "all" or forcesubject == "")):
|
|
|
|
# remove the shizzle based on chance?
|
|
# we want it to be MORE diverce when the insanity level raises
|
|
# in this case, raise the chance for a humanoid, gets more wierd when going above 5
|
|
|
|
if(random.randint(0,6) > max(2,insanitylevel -2) and "concept" in mainchooserlist):
|
|
mainchooserlist.remove("concept")
|
|
if(random.randint(0,6) > max(2,insanitylevel -2) and "landscape" in mainchooserlist):
|
|
mainchooserlist.remove("landscape")
|
|
if(random.randint(0,6) > max(2,insanitylevel -2) and "object" in mainchooserlist):
|
|
mainchooserlist.remove("object")
|
|
if(random.randint(0,6) > max(2,insanitylevel -2) and "animal" in mainchooserlist):
|
|
mainchooserlist.remove("animal")
|
|
|
|
# second for landscapes
|
|
# Some new logic, lets base the main chooser list on the chosen art category, to make it more cohorent
|
|
artiststylelistforchecking = ["architecture","bauhaus", "cityscape", "cinema", "cloudscape","impressionism", "installation", "landscape","magical realism", "nature", "romanticism","seascape", "space", "streetscape"]
|
|
|
|
if((artiststyleselector in artiststylelistforchecking
|
|
or artists in artiststylelistforchecking)
|
|
and (forcesubject == "all" or forcesubject == "")):
|
|
|
|
# remove the shizzle based on chance?
|
|
# we want it to be MORE diverce when the insanity level raises
|
|
# in this case, raise the chance for a landscape, gets more wierd when going above 5
|
|
if(random.randint(0,6) > max(2,insanitylevel -2) and "concept" in mainchooserlist):
|
|
mainchooserlist.remove("concept")
|
|
if(random.randint(0,6) > max(2,insanitylevel -2) and "animal" in mainchooserlist):
|
|
mainchooserlist.remove("animal")
|
|
if(random.randint(0,6) > max(2,insanitylevel -2) and "object" in mainchooserlist):
|
|
mainchooserlist.remove("object")
|
|
if(random.randint(0,8) > max(2,insanitylevel -2) and "humanoid" in mainchooserlist):
|
|
mainchooserlist.remove("humanoid")
|
|
|
|
#focus in animemode on mostly humans
|
|
if(anime_mode and (forcesubject == "all" or forcesubject == "")):
|
|
if(random.randint(0,11) > max(2,insanitylevel -2) and "concept" in mainchooserlist):
|
|
mainchooserlist.remove("concept")
|
|
if(random.randint(0,11) > max(2,insanitylevel -2) and "landscape" in mainchooserlist):
|
|
mainchooserlist.remove("landscape")
|
|
if(random.randint(0,11) > max(2,insanitylevel -2) and "object" in mainchooserlist):
|
|
mainchooserlist.remove("object")
|
|
if(random.randint(0,8) > max(2,insanitylevel -2) and "animal" in mainchooserlist):
|
|
mainchooserlist.remove("animal")
|
|
|
|
|
|
# choose the main subject type
|
|
mainchooser = random.choice(mainchooserlist)
|
|
|
|
if(forcesubject != "" and forcesubject != "all"):
|
|
mainchooser = forcesubject
|
|
# 0 object, 1 animal, 2 animal as human, 3 ManWoman, 4 Job, 5 fictional, 6 non fictional, 7 humanoid, 8 landscape, 9 event
|
|
if(mainchooser == "object"):
|
|
subjectchooser = "object"
|
|
if(mainchooser == "animal" and (random.randint(0,5) == 5 or anime_mode)):
|
|
# sometimes interpret the animal as a human
|
|
# for anime_mode this is always true
|
|
animalashuman = True
|
|
if(mainchooser == "humanoid"):
|
|
#humanoidsubjectchooserlist = ["human", "job", "fictional", "non fictional", "humanoid", "manwomanrelation", "firstname"]
|
|
# Lets put generic humans as a more 'normal' value. Manwoman relation as the least picked.
|
|
# balanced around 5, to have more normal man/woman
|
|
# lower values even more stable
|
|
# Upper values are still quite random
|
|
humanoidsubjectchooserlistbackup = humanoidsubjectchooserlist.copy() # make a backup of the list
|
|
if(random.randint(0,20) > max(2,insanitylevel -2) and "manwomanrelation" in humanoidsubjectchooserlist):
|
|
humanoidsubjectchooserlist.remove("manwomanrelation")
|
|
if(random.randint(0,30) > max(2,insanitylevel -2) and "manwomanmultiple" in humanoidsubjectchooserlist):
|
|
humanoidsubjectchooserlist.remove("manwomanmultiple")
|
|
if(random.randint(0,7) > max(2,insanitylevel -2) and "firstname" in humanoidsubjectchooserlist):
|
|
humanoidsubjectchooserlist.remove("firstname")
|
|
if(random.randint(0,5) > max(2,insanitylevel -2) and "job" in humanoidsubjectchooserlist):
|
|
humanoidsubjectchooserlist.remove("job")
|
|
if(random.randint(0,5) > max(2,insanitylevel -2) and "fictional" in humanoidsubjectchooserlist):
|
|
humanoidsubjectchooserlist.remove("fictional")
|
|
if(random.randint(0,5) > max(2,insanitylevel -2) and "non fictional" in humanoidsubjectchooserlist):
|
|
humanoidsubjectchooserlist.remove("non fictional")
|
|
if(random.randint(0,5) > max(2,insanitylevel -2) and "humanoid" in humanoidsubjectchooserlist):
|
|
humanoidsubjectchooserlist.remove("humanoid")
|
|
# more random stuff on higher levels
|
|
if(random.randint(0,4) > max(2,insanitylevel -2) and "human" in humanoidsubjectchooserlist):
|
|
humanoidsubjectchooserlist.remove("human")
|
|
|
|
# if we accidently remove everything, then restore the backup list
|
|
if(not bool(humanoidsubjectchooserlist)):
|
|
humanoidsubjectchooserlist = humanoidsubjectchooserlistbackup
|
|
|
|
subjectchooser = random.choice(humanoidsubjectchooserlist)
|
|
|
|
|
|
|
|
if(subtypehumanoid != "all"):
|
|
if(subtypehumanoid == "generic humans"):
|
|
subjectchooser = "human"
|
|
elif(subtypehumanoid == "generic human relations"):
|
|
subjectchooser = "manwomanrelation"
|
|
elif(subtypehumanoid == "multiple humans"):
|
|
subjectchooser = "manwomanmultiple"
|
|
elif(subtypehumanoid == "celebrities e.a."):
|
|
subjectchooser = "non fictional"
|
|
elif(subtypehumanoid == "fictional characters"):
|
|
subjectchooser = "fictional"
|
|
elif(subtypehumanoid == "humanoids"):
|
|
subjectchooser = "humanoid"
|
|
elif(subtypehumanoid == "based on job or title"):
|
|
subjectchooser = "job"
|
|
elif(subtypehumanoid == "based on first name"):
|
|
subjectchooser = "firstname"
|
|
else:
|
|
subjectchooser = subtypehumanoid
|
|
if(mainchooser == "landscape"):
|
|
subjectchooser = random.choice(locationsubjectchooserlist)
|
|
|
|
if(mainchooser == "concept"):
|
|
#eventsubjectchooserlist = ["event", "concept", "poemline", "songline"]
|
|
subjectchooser = random.choice(eventsubjectchooserlist)
|
|
if(subtypeconcept != "all"):
|
|
if(subtypeconcept == "event"):
|
|
subjectchooser = "event"
|
|
elif(subtypeconcept == "the X of Y concepts"):
|
|
subjectchooser = "concept"
|
|
elif(subtypeconcept == "lines from poems"):
|
|
subjectchooser = "poemline"
|
|
elif(subtypeconcept == "lines from songs"):
|
|
subjectchooser = "songline"
|
|
elif(subtypeconcept == "names from card based games"):
|
|
subjectchooser = "cardname"
|
|
elif(subtypeconcept == "episode titles from tv shows"):
|
|
subjectchooser = "episodetitle"
|
|
elif(subtypeconcept == "concept mixer"):
|
|
subjectchooser = "conceptmixer"
|
|
else:
|
|
subjectchooser = subtypeconcept
|
|
|
|
# After we chose the subject, lets set all things ready for He/She/It etc
|
|
|
|
if(not less_verbose and subjectchooser in ["manwomanmultiple"] and givensubject != "" and subtypehumanoid != "multiple humans"):
|
|
heshelist = ["they"]
|
|
hisherlist = ["their"]
|
|
himherlist = ["them"]
|
|
# on rare occasions do "one of them"
|
|
if(random.randint(0,20) == 0):
|
|
heshelist = ["one of them"]
|
|
hisherlist = ["one of their"]
|
|
himherlist = ["one of them"]
|
|
elif(not less_verbose and subjectchooser in ["human", "job", "fictional", "non fictional", "humanoid", "manwomanrelation","firstname","manwomanmultiple"]):
|
|
if(gender == "male"):
|
|
heshelist = ["he"]
|
|
hisherlist = ["his"]
|
|
himherlist = ["him"]
|
|
if(gender == "female"):
|
|
heshelist = ["she"]
|
|
hisherlist = ["her"]
|
|
himherlist = ["her"]
|
|
if(not less_verbose and subjectchooser in ["manwomanmultiple"] and givensubject == ""):
|
|
heshelist = ["they"]
|
|
hisherlist = ["their"]
|
|
himherlist = ["them"]
|
|
# on rare occasions do "one of them"
|
|
if(random.randint(0,20) == 0):
|
|
heshelist = ["one of them"]
|
|
hisherlist = ["one of their"]
|
|
himherlist = ["one of them"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# special modes
|
|
|
|
# start art blaster here
|
|
if(artblastermode==True):
|
|
step = 0
|
|
end = random.randint(1, insanitylevel) + 1
|
|
while step < end:
|
|
if(uncommon_dist(insanitylevel) and bool(artistlist)):
|
|
completeprompt += "-artist-, "
|
|
if(uncommon_dist(insanitylevel) and bool(artmovementlist)):
|
|
completeprompt += "-artmovement-, "
|
|
if(unique_dist(insanitylevel) and bool(vomitlist)):
|
|
completeprompt += "-vomit-, "
|
|
if(unique_dist(insanitylevel) and bool(imagetypelist)):
|
|
completeprompt += "-imagetype-, "
|
|
if(unique_dist(insanitylevel) and bool(colorschemelist)):
|
|
completeprompt += "-colorscheme-, "
|
|
if(uncommon_dist(insanitylevel) and bool(artistlist)):
|
|
completeprompt += "-artiststyle-, "
|
|
step = step + 1
|
|
|
|
|
|
# start unique art here
|
|
if(uniqueartmode==True):
|
|
step = 0
|
|
end = random.randint(1, insanitylevel) + 1
|
|
while step < end:
|
|
if(uncommon_dist(insanitylevel) and bool(othertypelist)):
|
|
completeprompt += "-othertype-, "
|
|
if(uncommon_dist(insanitylevel) and bool(artmovementlist)):
|
|
completeprompt += "-artmovement-, "
|
|
if(uncommon_dist(insanitylevel) and bool(colorschemelist)):
|
|
completeprompt += "-colorscheme-, "
|
|
if(rare_dist(insanitylevel) and bool(vomitlist)):
|
|
completeprompt += "-vomit-, "
|
|
if(rare_dist(insanitylevel) and bool(lightinglist)):
|
|
completeprompt += "-lighting-, "
|
|
if(unique_dist(insanitylevel) and bool(imagetypelist)):
|
|
completeprompt += "-imagetype-, "
|
|
if(unique_dist(insanitylevel) and bool(qualitylist)):
|
|
completeprompt += "-quality-, "
|
|
if(unique_dist(insanitylevel) and bool(artistlist)):
|
|
completeprompt += "-artistdescription-, "
|
|
|
|
step = step + 1
|
|
|
|
# start quality vomit here
|
|
if(qualityvomitmode==True):
|
|
step = 0
|
|
end = random.randint(1, insanitylevel) + 1
|
|
while step < end:
|
|
if(uncommon_dist(insanitylevel) and bool(vomitlist)):
|
|
completeprompt += "-vomit-, "
|
|
if(uncommon_dist(insanitylevel) and bool(flufferlist)):
|
|
completeprompt += "-fluff-, "
|
|
if(uncommon_dist(insanitylevel) and bool(qualitylist)):
|
|
completeprompt += "-quality-, "
|
|
if(unique_dist(insanitylevel) and bool(minivomitlist)):
|
|
completeprompt += "-minivomit-, "
|
|
if(unique_dist(insanitylevel) and bool(artmovementlist)):
|
|
completeprompt += "-artmovement-, "
|
|
if(unique_dist(insanitylevel) and bool(colorschemelist)):
|
|
completeprompt += "-colorscheme-, "
|
|
step = step + 1
|
|
|
|
# start mood color here
|
|
if(colorcannonmode == True):
|
|
step = 0
|
|
end = random.randint(1, insanitylevel) + 1
|
|
while step < end:
|
|
if(uncommon_dist(insanitylevel) and bool(moodlist)):
|
|
completeprompt += "-mood-, "
|
|
if(uncommon_dist(insanitylevel) and bool(colorschemelist)):
|
|
completeprompt += "-colorscheme-, "
|
|
if(rare_dist(insanitylevel) and bool(vomitlist)):
|
|
completeprompt += "-vomit-, "
|
|
if(unique_dist(insanitylevel) and bool(artmovementlist)):
|
|
completeprompt += "-artmovement-, "
|
|
if(unique_dist(insanitylevel) and bool(lightinglist)):
|
|
completeprompt += "-lighting-, "
|
|
if(unique_dist(insanitylevel) and bool(allstylessuffixlist)):
|
|
completeprompt += "-allstylessuffix-, "
|
|
step = step + 1
|
|
|
|
# start photo fantasy here
|
|
if(photofantasymode == True):
|
|
step = 0
|
|
end = random.randint(1, insanitylevel) + 1
|
|
if(common_dist(insanitylevel)):
|
|
if(uncommon_dist(insanitylevel)):
|
|
completeprompt += "-imagetypequality- "
|
|
completeprompt += " photograph, "
|
|
while step < end:
|
|
if(uncommon_dist(insanitylevel) and bool(lightinglist)):
|
|
completeprompt += "-photoaddition-, "
|
|
if(uncommon_dist(insanitylevel) and bool(lightinglist)):
|
|
completeprompt += "-lighting-, "
|
|
if(uncommon_dist(insanitylevel) and bool(cameralist)):
|
|
completeprompt += "-camera-, "
|
|
if(rare_dist(insanitylevel) and bool(lenslist)):
|
|
completeprompt += "-lens-, "
|
|
if(unique_dist(insanitylevel) and bool(moodlist)):
|
|
completeprompt += "-mood-, "
|
|
if(unique_dist(insanitylevel) and bool(colorschemelist)):
|
|
completeprompt += "-colorscheme-, "
|
|
step = step + 1
|
|
|
|
# start massive madness here
|
|
if(massivemadnessmode == True):
|
|
step = 0
|
|
end = random.randint(1, insanitylevel) + 1
|
|
while step < end:
|
|
if(rare_dist(insanitylevel) and bool(artistlist)):
|
|
completeprompt += "-artist-, "
|
|
if(rare_dist(insanitylevel) and bool(descriptorlist)):
|
|
completeprompt += "-descriptor-, "
|
|
if(rare_dist(insanitylevel) and bool(moodlist)):
|
|
completeprompt += "-mood-, "
|
|
if(rare_dist(insanitylevel) and bool(colorschemelist)):
|
|
completeprompt += "-colorscheme-, "
|
|
if(rare_dist(insanitylevel) and bool(vomitlist)):
|
|
completeprompt += "-vomit-, "
|
|
if(rare_dist(insanitylevel) and bool(artmovementlist)):
|
|
completeprompt += "-artmovement-, "
|
|
if(rare_dist(insanitylevel) and bool(lightinglist)):
|
|
completeprompt += "-lighting-, "
|
|
if(rare_dist(insanitylevel) and bool(minilocationadditionslist)):
|
|
completeprompt += "-minilocationaddition-, "
|
|
if(rare_dist(insanitylevel) and bool(materiallist)):
|
|
completeprompt += "-material-, "
|
|
if(rare_dist(insanitylevel) and bool(conceptsuffixlist)):
|
|
completeprompt += "-conceptsuffix-, "
|
|
if(rare_dist(insanitylevel) and bool(qualitylist)):
|
|
completeprompt += "-quality-, "
|
|
if(rare_dist(insanitylevel) and bool(cameralist)):
|
|
completeprompt += "-camera-, "
|
|
if(rare_dist(insanitylevel) and bool(lenslist)):
|
|
completeprompt += "-lens-, "
|
|
if(rare_dist(insanitylevel) and bool(imagetypelist)):
|
|
completeprompt += "-imagetype-, "
|
|
step = step + 1
|
|
|
|
|
|
|
|
# start styles mode here
|
|
if(stylesmode == True):
|
|
chosenstyle = random.choice(styleslist)
|
|
chosenstyleprefix = chosenstyle.split("-subject-")[0]
|
|
chosenstylesuffix = chosenstyle.split("-subject-")[1]
|
|
completeprompt += chosenstyleprefix
|
|
|
|
if(dynamictemplatesmode == True):
|
|
if(artists == "none"):
|
|
dynamictemplatesprefixlist = [sentence for sentence in dynamictemplatesprefixlist if "-artist-" not in sentence.lower()]
|
|
chosenstyleprefix = random.choice(dynamictemplatesprefixlist)
|
|
completeprompt += chosenstyleprefix
|
|
if(chosenstyleprefix[-1] == "."):
|
|
completeprompt += " OR(Capturing a; Describing a;Portraying a;Featuring a)"
|
|
else:
|
|
completeprompt += " OR(with a;capturing a; describing a;portraying a;of a;featuring a)"
|
|
|
|
|
|
# start artist part
|
|
|
|
|
|
artistsplacement = "front"
|
|
# remove the artistsatbackchange to be depended on the insanitylevel, we would like this to be a set chance
|
|
if(random.randint(0, 2) == 0 and onlyartists == False):
|
|
artistlocations = ["back", "middle"]
|
|
artistsplacement = random.choice(artistlocations)
|
|
|
|
if(artists != "none" and artistsplacement == "front" and generateartist == True):
|
|
doartistnormal = True
|
|
if(artists == "greg mode"):
|
|
artistbylist = ["art by", "designed by", "stylized by", "by"]
|
|
completeprompt += random.choice(artistbylist) + " -gregmode-, "
|
|
doartistnormal = False
|
|
# in case we have ALL, we can also do a specific artist mode per chosen subject. sometimes
|
|
elif(originalartistchoice == "all" and random.randint(0,3) == 0):
|
|
if(mainchooser in ["humanoid", "animal"]):
|
|
artistbylist = ["art by", "designed by", "stylized by", "by"]
|
|
completeprompt += random.choice(artistbylist) + " OR(-portraitartist-;-characterartist-), OR(-portraitartist-;-characterartist-) OR(;and OR(-fantasyartist-;-scifiartist-;-photographyartist-;-digitalartist-;-graphicdesignartist-);uncommon), "
|
|
doartistnormal = False
|
|
|
|
elif(mainchooser in ["landscape"]):
|
|
artistbylist = ["art by", "designed by", "stylized by", "by"]
|
|
completeprompt += random.choice(artistbylist) + " OR(-landscapeartist-;-digitalartist-), OR(-landscapeartist-;-graphicdesignartist-) OR(;and OR(-fantasyartist-;-scifiartist-;-photographyartist-;-digitalartist-;-graphicdesignartist-);uncommon), "
|
|
doartistnormal = False
|
|
|
|
elif(subjectchooser in ["building"]):
|
|
artistbylist = ["art by", "designed by", "stylized by", "by"]
|
|
completeprompt += random.choice(artistbylist) + " OR(-landscapeartist-;-architectartist-), OR(-landscapeartist-;-architectartist-) OR(;and OR(-fantasyartist-;-scifiartist-;-photographyartist-;-digitalartist-;-graphicdesignartist-);uncommon), "
|
|
doartistnormal = False
|
|
|
|
# else sometimes to something like this?
|
|
elif(random.randint(0,5) == 0):
|
|
artistbylist = ["art by", "designed by", "stylized by", "by"]
|
|
completeprompt += random.choice(artistbylist) + " OR(-portraitartist-;-characterartist-;-fantasyartist-;-scifiartist-;-photographyartist-;-digitalartist-;-graphicdesignartist-), OR(-portraitartist-;-characterartist-;-fantasyartist-;-scifiartist-;-photographyartist-;-digitalartist-;-graphicdesignartist-) and OR(-portraitartist-;-characterartist-;-fantasyartist-;-scifiartist-;-photographyartist-;-digitalartist-;-graphicdesignartist-)"
|
|
doartistnormal = False
|
|
|
|
|
|
|
|
if(doartistnormal):
|
|
|
|
# take 1-3 artists, weighted to 1-2
|
|
step = random.randint(0, 1)
|
|
minstep = step
|
|
end = random.randint(1, insanitylevel3)
|
|
|
|
|
|
|
|
|
|
# determine artist mode:
|
|
# normal
|
|
# hybrid |
|
|
# switching A:B:X
|
|
# adding at step x a:X
|
|
# stopping at step x ::X
|
|
# enhancing from step x
|
|
|
|
|
|
|
|
|
|
modeselector = random.randint(0,10)
|
|
if modeselector < 5 and end - step >= 2:
|
|
artistmodeslist = ["hybrid", "stopping", "adding", "switching", "enhancing"]
|
|
artistmode = artistmodeslist[modeselector]
|
|
if(advancedprompting == False):
|
|
artistmode = "normal"
|
|
if (artistmode in ["hybrid","switching"] and end - step == 1):
|
|
artistmode = "normal"
|
|
|
|
if(onlyartists == True and artistmode == "enhancing"):
|
|
artistmode = "normal"
|
|
# if there are not enough artists in the list, then just go normal
|
|
if(len(artistlist) < 3):
|
|
artistmode = "normal"
|
|
if(onlyartists == True and step == end):
|
|
step = step - 1
|
|
|
|
if artistmode in ["hybrid", "stopping", "adding","switching"]:
|
|
completeprompt += " ["
|
|
|
|
while step < end:
|
|
if(normal_dist(insanitylevel) and remove_weights == False):
|
|
isweighted = 1
|
|
|
|
if isweighted == 1:
|
|
completeprompt += " ("
|
|
|
|
#completeprompt = add_from_csv(completeprompt, "artists", 0, "art by ","")
|
|
if(step == minstep):
|
|
# sometimes do this
|
|
if(giventypeofimage=="" and imagetype == "all" and random.randint(0, 1) == 0):
|
|
if(artiststyleselectormode == "normal"):
|
|
completeprompt += artiststyleselector + " art "
|
|
else:
|
|
completeprompt += "-artiststyle- art "
|
|
artistbylist = ["art by", "designed by", "stylized by", "by"]
|
|
else:
|
|
artistbylist = [""]
|
|
completeprompt += random.choice(artistbylist) + " -artist-"
|
|
|
|
if isweighted == 1:
|
|
completeprompt += ":" + str(1 + (random.randint(-3,3)/10)) + ")"
|
|
|
|
if artistmode in ["hybrid"] and not end - step == 1:
|
|
completeprompt += "|"
|
|
if artistmode in ["switching"] and not end - step == 1:
|
|
completeprompt += ":"
|
|
|
|
if artistmode not in ["hybrid", "switching"]and not end - step > 1:
|
|
completeprompt += ","
|
|
elif artistmode not in ["hybrid", "switching"]and not end - step == 1:
|
|
completeprompt += " and "
|
|
|
|
isweighted = 0
|
|
|
|
step = step + 1
|
|
|
|
if artistmode in ["stopping"]:
|
|
completeprompt += "::"
|
|
completeprompt += str(random.randint(1,19))
|
|
|
|
if artistmode in ["switching","adding"]:
|
|
completeprompt += ":" + str(random.randint(1,18))
|
|
if artistmode in ["hybrid", "stopping","adding", "switching"]:
|
|
completeprompt += "] "
|
|
|
|
|
|
if(onlyartists == True):
|
|
#Parse or statements
|
|
completeprompt = parse_custom_functions(completeprompt, insanitylevel)
|
|
|
|
# replace artist wildcards
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, "-artist-", artistlist, False, False)
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, "-gregmode-", gregmodelist, False, False)
|
|
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, "-fantasyartist-", fantasyartistlist, False, False)
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, "-popularartist-", popularartistlist, False, False)
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, "-romanticismartist-", romanticismartistlist, False, False)
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, "-photographyartist-", photographyartistlist, False, False)
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, "-portraitartist-", portraitartistlist, False, False)
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, "-characterartist-", characterartistlist, False, False)
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, "-landscapeartist-", landscapeartistlist, False, False)
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, "-scifiartist-", scifiartistlist, False, False)
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, "-graphicdesignartist-", graphicdesignartistlist, False, False)
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, "-digitalartist-", digitalartistlist, False, False)
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, "-architectartist-", architectartistlist, False, False)
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, "-cinemaartist-", cinemaartistlist, False, False)
|
|
|
|
# clean it up
|
|
completeprompt = cleanup(completeprompt, advancedprompting, insanitylevel)
|
|
|
|
print("only generated these artists:" + completeprompt)
|
|
return completeprompt
|
|
|
|
|
|
completeprompt += ", "
|
|
|
|
|
|
# sometimes do this as well
|
|
if(giventypeofimage=="" and imagetype == "all" and random.randint(0, 2) == 0):
|
|
completeprompt += "-artiststyle- art, "
|
|
|
|
|
|
if artistmode in ["enhancing"]:
|
|
completeprompt += " ["
|
|
|
|
|
|
# start tokinator here
|
|
if(thetokinatormode == True):
|
|
tokinatorsubtype = ["personification", "human form", "object", "landscape", "OR(creature;beast;animal;myth;concept;world;planet)", "building", "location", "shape", "being", "-token-"]
|
|
if(anime_mode and gender == "male"):
|
|
tokinatorsubtype = ["(1boy, solo)"]
|
|
if(anime_mode and gender == "female"):
|
|
tokinatorsubtype = ["(1girl, solo)"]
|
|
if(chance_roll(insanitylevel,"normal")):
|
|
if(chance_roll(insanitylevel,"normal") and remove_weights == False):
|
|
completeprompt += "(OR(;-imagetypequality-;uncommon) OR(-imagetype-;-othertype-;rare):1.3) "
|
|
else:
|
|
completeprompt += "OR(;-imagetypequality-;uncommon) OR(-imagetype-;-othertype-;rare) "
|
|
completeprompt += random.choice(tokinatorlist)
|
|
completeprompt = completeprompt.replace("-tokensubtype-", random.choice(tokinatorsubtype))
|
|
|
|
if("subject" in givensubject and smartsubject):
|
|
givensubject = givensubject.replace("subject", "-token-")
|
|
|
|
if(givensubject == "" and overrideoutfit == ""):
|
|
completeprompt = completeprompt.replace("-subject-", "-token-")
|
|
elif(givensubject == "" and overrideoutfit != "" and "-outfit-" not in completeprompt):
|
|
completeprompt = completeprompt.replace("-subject-", "-token- wearing a OR(-token-;;normal) -outfit-")
|
|
elif(givensubject != "" and overrideoutfit != "" and "-outfit-" not in completeprompt):
|
|
completeprompt = completeprompt.replace("-subject-", givensubject + " wearing a OR(-token-;;normal) -outfit-")
|
|
else:
|
|
completeprompt = completeprompt.replace("-subject-", givensubject)
|
|
|
|
if(overrideoutfit == ""):
|
|
completeprompt = completeprompt.replace("-outfit-", "-token-")
|
|
else:
|
|
completeprompt = completeprompt.replace("-outfit-", overrideoutfit)
|
|
|
|
|
|
|
|
|
|
# start image type
|
|
if(giventypeofimage == "" and (imagetype == "none" or giventypeofimage=="none") ):
|
|
generatetype = False
|
|
if(giventypeofimage=="" and generatetype == True):
|
|
if(imagetype != "all" and imagetype != "all - force multiple" and imagetype != "only other types" and imagetype != "all - anime"):
|
|
|
|
completeprompt += " " + imagetype + ", "
|
|
elif(imagetype == "all - force multiple" or unique_dist(insanitylevel) and not anime_mode):
|
|
amountofimagetypes = random.randint(2,3)
|
|
elif(imagetype == "only other types"):
|
|
if(amountofimagetypes < 2 and random.randint(0,2) == 0):
|
|
partlystylemode = True
|
|
print("Ohhh! Adding some secret sauce to this prompt")
|
|
chosenstyle = random.choice(styleslist)
|
|
chosenstyleprefix = chosenstyle.split("-subject-")[0]
|
|
chosenstylesuffix = chosenstyle.split("-subject-")[1]
|
|
|
|
completeprompt += " " + chosenstyleprefix + ", "
|
|
else:
|
|
othertype = 1
|
|
completeprompt += random.choice(othertypelist)
|
|
|
|
if((imagetype == "all" or imagetype == "all - anime") and chance_roll(insanitylevel, imagetypechance) and amountofimagetypes <= 1):
|
|
amountofimagetypes = 1
|
|
|
|
# on lower insanity levels, almost force this
|
|
if((imagetype == "all" or imagetype == "all - anime") and insanitylevel <= 3 and amountofimagetypes <= 1 and random.randint(0,1)== 0):
|
|
amountofimagetypes = 1
|
|
|
|
if((imagetype == "all" or imagetype == "all - anime") and insanitylevel <= 2 and amountofimagetypes <= 1):
|
|
amountofimagetypes = 1
|
|
|
|
|
|
|
|
|
|
|
|
for i in range(amountofimagetypes):
|
|
# one in 6 images is a complex/other type
|
|
if((chance_roll(insanitylevel, imagetypequalitychance) or originalartistchoice == "greg mode") and generateimagetypequality):
|
|
completeprompt += "-imagetypequality- "
|
|
|
|
if(imagetype == "all - anime" and not anime_mode):
|
|
completeprompt += " anime"
|
|
if(random.randint(0,4) < 4 and insanitylevel > 3 ):
|
|
# woops, never to this as wildcards. We need to know as early as possible wether something is a photo. Lets put it back!
|
|
completeprompt += " " + random.choice(imagetypelist) + ", "
|
|
elif(random.randint(0,1) == 0 and insanitylevel <= 3):
|
|
completeprompt += " " + random.choice(imagetypelist) + ", "
|
|
elif(not anime_mode):
|
|
if(amountofimagetypes < 2 and random.randint(0,1) == 0):
|
|
partlystylemode = True
|
|
print("Ohhh! Adding some secret sauce to this prompt")
|
|
chosenstyle = random.choice(styleslist)
|
|
chosenstyleprefix = chosenstyle.split("-subject-")[0]
|
|
chosenstylesuffix = chosenstyle.split("-subject-")[1]
|
|
|
|
completeprompt += " " + chosenstyleprefix + ", "
|
|
else:
|
|
othertype = 1
|
|
completeprompt += " " + random.choice(othertypelist) + ", "
|
|
|
|
if(othertype==1):
|
|
completeprompt += " of a "
|
|
else:
|
|
completeprompt += ", "
|
|
elif(generatetype == True):
|
|
othertype = 1
|
|
completeprompt += giventypeofimage + " of a "
|
|
|
|
|
|
## do less insane stuff while working for superprompter
|
|
if(superprompter == True):
|
|
insanitylevel = max(1, insanitylevel-4)
|
|
### here we can do some other stuff to spice things up
|
|
if(chance_roll(insanitylevel, minilocationadditionchance) and generateminilocationaddition == True):
|
|
completeprompt += " -minilocationaddition-, "
|
|
|
|
if(chance_roll(insanitylevel, artmovementprefixchance) and generateartmovement == True):
|
|
generateartmovement = False
|
|
completeprompt += " -artmovement-, "
|
|
|
|
if(chance_roll(insanitylevel, minivomitprefix1chance) and generateminivomit == True):
|
|
completeprompt += " -minivomit-, "
|
|
|
|
if(chance_roll(insanitylevel, minivomitprefix2chance) and generateminivomit == True):
|
|
completeprompt += " -minivomit-, "
|
|
|
|
|
|
|
|
# start shot size
|
|
|
|
if(mainchooser in ["object", "animal", "humanoid", "concept"] and othertype == 0 and "portrait" not in completeprompt and generateshot == True and chance_roll(insanitylevel,shotsizechance)):
|
|
completeprompt += "-shotsize- of a "
|
|
elif("portrait" in completeprompt and generateshot == True and partlystylemode == False):
|
|
completeprompt += " , close up of a "
|
|
elif(mainchooser in ["landscape"] and generateshot == True and partlystylemode == False):
|
|
completeprompt += " landscape of a "
|
|
elif(generateshot == True):
|
|
completeprompt += ", "
|
|
|
|
genjoboractivity = False
|
|
# start subject building
|
|
|
|
# divider between subject and everything else
|
|
completeprompt += " @@@ "
|
|
|
|
|
|
if(generatesubject == True):
|
|
# start with descriptive qualities
|
|
|
|
# outfit in front mode?
|
|
# outfitmode = 0 = NO
|
|
# outfitmode = 1 IN FRONT
|
|
# outfitmode = 2 IS NORMAL
|
|
if(overrideoutfit!=""):
|
|
outfitmode = 2
|
|
if(animalashuman or subjectchooser in ["human","fictional", "non fictional", "humanoid", "manwomanrelation","manwomanmultiple", "firstname"] and chance_roll(insanitylevel, outfitchance) and generateoutfit == True and humanspecial != 1):
|
|
if(random.randint(0,10)==0):
|
|
outfitmode = 1
|
|
else:
|
|
outfitmode = 2
|
|
|
|
if(outfitmode == 1):
|
|
completeprompt += "OR(wearing;dressed in;in;normal) OR(;OR(;a very;rare) -outfitdescriptor-;normal) OR(;-color-;uncommon) OR(;-culture-;uncommon) OR(;-material-;rare) -outfit-, "
|
|
if(extraordinary_dist(insanitylevel)):
|
|
completeprompt += " -outfitvomit-, "
|
|
|
|
|
|
|
|
if(subjectingivensubject):
|
|
completeprompt += " " + givensubjectpromptlist[0] + " "
|
|
|
|
# Once in a very rare while, we get a ... full of ...s
|
|
if(novel_dist(insanitylevel) and (animalashuman or subjectchooser in ["human", "job", "fictional", "non fictional", "humanoid", "manwomanrelation","firstname"])):
|
|
buildingfullmode = True
|
|
insideshot = 1
|
|
heshelist = ["they"]
|
|
hisherlist = ["their"]
|
|
himherlist = ["them"]
|
|
completeprompt += "a OR(-building-;-location-;-waterlocation-;-container-;-background-;rare) full of "
|
|
|
|
|
|
# Sometimes the descriptors are at the back, in more natural language. Lets determine.
|
|
descriptorsintheback = random.randint(0,2)
|
|
if(descriptorsintheback < 2):
|
|
# Common to have 1 description, uncommon to have 2
|
|
if(chance_roll(insanitylevel, subjectdescriptor1chance) and generatedescriptors == True):
|
|
if(animalashuman or subjectchooser in ["human", "job", "fictional", "non fictional", "humanoid", "manwomanrelation", "manwomanmultiple","firstname"]):
|
|
if(anime_mode and random.randint(0,2)<2):
|
|
completeprompt += "-basicbitchdescriptor- "
|
|
else:
|
|
completeprompt += "-humandescriptor- "
|
|
elif(mainchooser == "landscape"):
|
|
completeprompt += "-locationdescriptor- "
|
|
elif(mainchooser == "animal"):
|
|
completeprompt += "-animaldescriptor- "
|
|
else:
|
|
completeprompt += "-descriptor- "
|
|
|
|
if(chance_roll(insanitylevel, subjectdescriptor2chance) and generatedescriptors == True):
|
|
if(animalashuman or subjectchooser in ["human", "job", "fictional", "non fictional", "humanoid", "manwomanrelation", "manwomanmultiple","firstname"]):
|
|
if(anime_mode and random.randint(0,2)<2):
|
|
completeprompt += "-basicbitchdescriptor- "
|
|
else:
|
|
completeprompt += "-humandescriptor- "
|
|
elif(mainchooser == "landscape"):
|
|
completeprompt += "-locationdescriptor- "
|
|
elif(mainchooser == "animal"):
|
|
completeprompt += "-animaldescriptor- "
|
|
else:
|
|
completeprompt += "-descriptor- "
|
|
|
|
# color, for animals, landscape, objects and concepts
|
|
if(mainchooser in ["animal", "object", "landscape", "concept"] and unique_dist(insanitylevel)):
|
|
completeprompt += " OR(-color-;-colorcombination-) "
|
|
|
|
# age, very rare to add.
|
|
if(subjectchooser in ["human", "job", "fictional", "non fictional", "humanoid", "manwomanrelation", "manwomanmultiple","firstname"] and extraordinary_dist(insanitylevel)):
|
|
completeprompt += str(random.randint(20,99)) + " OR(y.o.;year old) "
|
|
|
|
if((animalashuman or subjectchooser in ["human", "job", "fictional", "non fictional", "humanoid", "manwomanrelation", "manwomanmultiple","firstname"]) and chance_roll(insanitylevel, subjectbodytypechance) and generatebodytype == True):
|
|
completeprompt += "-bodytype- "
|
|
|
|
if((animalashuman or subjectchooser in ["object","human", "job", "fictional", "non fictional", "humanoid", "manwomanrelation", "manwomanmultiple","firstname"]) and chance_roll(insanitylevel, subjectculturechance) and generatedescriptors == True):
|
|
completeprompt += "-culture- "
|
|
|
|
if(mainchooser == "object"):
|
|
# first add a wildcard that can be used to create prompt strenght
|
|
completeprompt += " -objectstrengthstart-"
|
|
# if we have an overwrite, then make sure we only take the override
|
|
if(subtypeobject != "all"):
|
|
if(subtypeobject == "generic objects"):
|
|
objectwildcardlist = ["-object-"]
|
|
if(subtypeobject == "vehicles"):
|
|
objectwildcardlist = ["-vehicle-"]
|
|
if(subtypeobject == "food"):
|
|
objectwildcardlist = ["-food-"]
|
|
if(subtypeobject == "buildings"):
|
|
objectwildcardlist = ["-building-"]
|
|
if(subtypeobject == "space"):
|
|
objectwildcardlist = ["-space-"]
|
|
if(subtypeobject == "flora"):
|
|
objectwildcardlist = ["-flora-"]
|
|
# not varied enough
|
|
#if(subtypeobject == "occult"):
|
|
# objectwildcardlist = ["-occult-"]
|
|
subjectchooser = subtypeobject
|
|
|
|
|
|
# if we have a given subject, we should skip making an actual subject
|
|
# unless we have "subject" in the given subject
|
|
|
|
|
|
if(givensubject == "" or (subjectingivensubject and givensubject != "")):
|
|
|
|
if(rare_dist(insanitylevel) and advancedprompting == True):
|
|
hybridorswaplist = ["hybrid", "swap"]
|
|
hybridorswap = random.choice(hybridorswaplist)
|
|
completeprompt += "["
|
|
|
|
chosenobjectwildcard = random.choice(objectwildcardlist)
|
|
|
|
completeprompt += chosenobjectwildcard + " "
|
|
|
|
if(hybridorswap == "hybrid"):
|
|
if(uncommon_dist(insanitylevel)):
|
|
completeprompt += "|" + random.choice(objectwildcardlist) + "] "
|
|
else:
|
|
completeprompt += "|"
|
|
completeprompt += chosenobjectwildcard + " "
|
|
completeprompt += "] "
|
|
if(hybridorswap == "swap"):
|
|
if(uncommon_dist(insanitylevel)):
|
|
completeprompt += ":" + random.choice(objectwildcardlist) + ":" + str(random.randint(1,5)) + "] "
|
|
else:
|
|
completeprompt += ":"
|
|
completeprompt += chosenobjectwildcard + " "
|
|
completeprompt += ":" + str(random.randint(1,5)) + "] "
|
|
else:
|
|
completeprompt += " " + givensubject + " "
|
|
|
|
hybridorswap = ""
|
|
|
|
if(mainchooser == "animal"):
|
|
# first add a wildcard that can be used to create prompt strenght
|
|
completeprompt += " -objectstrengthstart-"
|
|
if(anime_mode
|
|
and "1girl" not in givensubject
|
|
and "1boy" not in givensubject):
|
|
anthrolist = ["anthro", "anthrophomorphic", "furry"]
|
|
|
|
|
|
if(gender=="male"):
|
|
completeprompt += random.choice(anthrolist) + ", 1boy, solo, "
|
|
else:
|
|
completeprompt += random.choice(anthrolist) + ", 1girl, solo, "
|
|
|
|
# if we have a given subject, we should skip making an actual subject
|
|
if(givensubject == "" or (subjectingivensubject and givensubject != "")):
|
|
|
|
if(subtypeanimal != "all"):
|
|
if(subtypeanimal=="generic animal"):
|
|
animalwildcardlist = ["-animal-"]
|
|
elif(subtypeanimal=="bird"):
|
|
animalwildcardlist = ["-bird-"]
|
|
elif(subtypeanimal=="cat"):
|
|
animalwildcardlist = ["-cat-"]
|
|
elif(subtypeanimal=="dog"):
|
|
animalwildcardlist = ["-dog-"]
|
|
elif(subtypeanimal=="insect"):
|
|
animalwildcardlist = ["-insect-"]
|
|
elif(subtypeanimal=="pokemon"):
|
|
animalwildcardlist = ["-pokemon-"]
|
|
elif(subtypeanimal=="marine life"):
|
|
animalwildcardlist = ["-marinelife-"]
|
|
|
|
|
|
chosenanimalwildcard = random.choice(animalwildcardlist)
|
|
|
|
if(rare_dist(insanitylevel) and advancedprompting == True):
|
|
hybridorswaplist = ["hybrid", "swap"]
|
|
hybridorswap = random.choice(hybridorswaplist)
|
|
completeprompt += "["
|
|
|
|
if(unique_dist(insanitylevel) and generateanimaladdition == True):
|
|
animaladdedsomething = 1
|
|
completeprompt += "-animaladdition- " + chosenanimalwildcard + " "
|
|
if(animaladdedsomething != 1):
|
|
completeprompt += chosenanimalwildcard + " "
|
|
|
|
|
|
|
|
if(hybridorswap == "hybrid"):
|
|
if(uncommon_dist(insanitylevel)):
|
|
completeprompt += "|" + random.choice(hybridlist) + "] "
|
|
else:
|
|
completeprompt += "| " + chosenanimalwildcard + " ] "
|
|
if(hybridorswap == "swap"):
|
|
if(uncommon_dist(insanitylevel)):
|
|
completeprompt += ":" + random.choice(hybridlist) + ":" + str(random.randint(1,5)) + "] "
|
|
else:
|
|
completeprompt += ":" + chosenanimalwildcard + ":" + str(random.randint(1,5)) + "] "
|
|
else:
|
|
completeprompt += " " + givensubject + " "
|
|
|
|
hybridorswap = ""
|
|
|
|
# move job or activity logic here. We want to place it at 2 different places maybe
|
|
|
|
if((animalashuman or subjectchooser in ["human","fictional", "non fictional", "humanoid", "manwomanrelation", "manwomanmultiple","firstname"]) and chance_roll(insanitylevel, joboractivitychance) and humanspecial != 1 and generatesubject == True):
|
|
genjoboractivity = True
|
|
genjoboractivitylocationslist = ["front","middle", "middle","back","back", "back"]
|
|
genjoboractivitylocation = random.choice(genjoboractivitylocationslist)
|
|
|
|
|
|
if(genjoboractivity and genjoboractivitylocation=="front"):
|
|
completeprompt += "-job- "
|
|
|
|
|
|
# if we have a given subject, we should skip making an actual subject
|
|
if(mainchooser == "humanoid"):
|
|
# first add a wildcard that can be used to create prompt strenght
|
|
completeprompt += " -objectstrengthstart-"
|
|
|
|
if(anime_mode
|
|
and "1girl" not in givensubject
|
|
and "1boy" not in givensubject):
|
|
if(subjectchooser != "manwomanmultiple"):
|
|
if(gender=="male"):
|
|
completeprompt += "1boy, solo, "
|
|
else:
|
|
completeprompt += "1girl, solo, "
|
|
else:
|
|
if(gender=="male"):
|
|
completeprompt += "multipleboys, "
|
|
else:
|
|
completeprompt += "multiplegirls, "
|
|
|
|
if(givensubject == "" or (subjectingivensubject and givensubject != "")):
|
|
|
|
if(subjectchooser == "human" and not anime_mode):
|
|
completeprompt += "-manwoman-"
|
|
|
|
if(subjectchooser == "manwomanrelation"):
|
|
completeprompt += "-manwomanrelation-"
|
|
|
|
if(subjectchooser == "manwomanmultiple"):
|
|
completeprompt += "-manwomanmultiple-"
|
|
|
|
if(subjectchooser == "job"):
|
|
if(not anime_mode):
|
|
completeprompt += "-malefemale- "
|
|
completeprompt += "-job-"
|
|
|
|
if(subjectchooser == "fictional"):
|
|
if(rare_dist(insanitylevel) and advancedprompting == True and buildingfullmode == False):
|
|
hybridorswaplist = ["hybrid", "swap"]
|
|
hybridorswap = random.choice(hybridorswaplist)
|
|
completeprompt += "["
|
|
|
|
# Sometimes, we do a gender swap. Much fun!
|
|
if(novel_dist(insanitylevel)):
|
|
completeprompt += gender + " version of -oppositefictional-"
|
|
else:
|
|
completeprompt += "-fictional-"
|
|
|
|
if(hybridorswap == "hybrid"):
|
|
completeprompt += "|" + random.choice(hybridhumanlist) + " ] "
|
|
if(hybridorswap == "swap"):
|
|
completeprompt += ":" + random.choice(hybridhumanlist) + ":" + str(random.randint(1,5)) + "] "
|
|
hybridorswap = ""
|
|
|
|
if(subjectchooser == "non fictional"):
|
|
if(rare_dist(insanitylevel) and advancedprompting == True and buildingfullmode == False):
|
|
hybridorswaplist = ["hybrid", "swap"]
|
|
hybridorswap = random.choice(hybridorswaplist)
|
|
completeprompt += "["
|
|
# Sometimes, we do a gender swap. Much fun!
|
|
if(novel_dist(insanitylevel)):
|
|
completeprompt += gender + " version of -oppositenonfictional-"
|
|
else:
|
|
completeprompt += "-nonfictional-"
|
|
|
|
if(hybridorswap == "hybrid"):
|
|
completeprompt += "|" + random.choice(hybridhumanlist) + "] "
|
|
if(hybridorswap == "swap"):
|
|
completeprompt += ":" + random.choice(hybridhumanlist) + ":" + str(random.randint(1,5)) + "] "
|
|
hybridorswap = ""
|
|
|
|
if(subjectchooser == "humanoid"):
|
|
if(gender != "all"):
|
|
completeprompt += "-malefemale- "
|
|
if(rare_dist(insanitylevel) and advancedprompting == True and buildingfullmode == False):
|
|
hybridorswaplist = ["hybrid", "swap"]
|
|
hybridorswap = random.choice(hybridorswaplist)
|
|
completeprompt += "["
|
|
|
|
completeprompt += "-humanoid-"
|
|
|
|
if(hybridorswap == "hybrid"):
|
|
completeprompt += "|" + random.choice(hybridhumanlist) + "] "
|
|
if(hybridorswap == "swap"):
|
|
completeprompt += ":" + random.choice(hybridhumanlist) + ":" + str(random.randint(1,5)) + "] "
|
|
hybridorswap = ""
|
|
|
|
if(subjectchooser == "firstname"):
|
|
if(rare_dist(insanitylevel) and advancedprompting == True and buildingfullmode == False):
|
|
hybridorswaplist = ["hybrid", "swap"]
|
|
hybridorswap = random.choice(hybridorswaplist)
|
|
completeprompt += "["
|
|
|
|
completeprompt += "-firstname-"
|
|
|
|
if(hybridorswap == "hybrid"):
|
|
completeprompt += "|" + "-firstname-" + "] "
|
|
if(hybridorswap == "swap"):
|
|
completeprompt += ":" + "-firstname-" + ":" + str(random.randint(1,5)) + "] "
|
|
hybridorswap = ""
|
|
if(buildingfullmode == True):
|
|
completeprompt += "s"
|
|
completeprompt += " "
|
|
|
|
else:
|
|
if(subjectchooser == "manwomanmultiple" and subtypehumanoid != "multiple humans" and givensubject not in ["1girl", "1boy", "solo"]):
|
|
if(random.randint(0,1) == 1):
|
|
completeprompt += " " + givensubject + " and a -manwomanmultiple- "
|
|
else:
|
|
completeprompt += " a OR(group;couple;crowd;bunch) of " + givensubject + " "
|
|
else:
|
|
completeprompt += " " + givensubject + " "
|
|
|
|
|
|
# sometimes add a suffix for more fun!
|
|
if( (mainchooser == "humanoid" or mainchooser == "animal" or mainchooser == "object") and chance_roll(insanitylevel, subjectconceptsuffixchance)):
|
|
completeprompt += " of -conceptsuffix- "
|
|
|
|
if(mainchooser == "humanoid" or mainchooser == "animal" or mainchooser == "object"):
|
|
# completion of strenght end
|
|
completeprompt += "-objectstrengthend-"
|
|
|
|
if(mainchooser == 'animal' and legendary_dist(insanitylevel)):
|
|
animaladdedsomething = 1
|
|
completeprompt += " -animalsuffixaddition- "
|
|
|
|
|
|
if(mainchooser == "landscape"):
|
|
# first add a wildcard that can be used to create prompt strenght
|
|
completeprompt += " -objectstrengthstart-"
|
|
|
|
# if we have a given subject, we should skip making an actual subject
|
|
if(givensubject == "" or (subjectingivensubject and givensubject != "")):
|
|
if(rare_dist(insanitylevel) and advancedprompting == True):
|
|
hybridorswaplist = ["hybrid", "swap"]
|
|
hybridorswap = random.choice(hybridorswaplist)
|
|
completeprompt += "["
|
|
|
|
if(subtypelocation != "all"):
|
|
if(subtypelocation=="location"):
|
|
locationwildcardlist = ["-location-"]
|
|
elif(subtypelocation=="fantasy location"):
|
|
locationwildcardlist = ["-locationfantasy-"]
|
|
elif(subtypelocation=="videogame location"):
|
|
locationwildcardlist = ["-locationvideogame-"]
|
|
elif(subtypelocation=="sci-fi location"):
|
|
locationwildcardlist = ["-locationscifi-"]
|
|
elif(subtypelocation=="biome"):
|
|
locationwildcardlist = ["-locationbiome-"]
|
|
elif(subtypelocation=="city"):
|
|
locationwildcardlist = ["-locationcity-"]
|
|
|
|
|
|
chosenlocationwildcard = random.choice(locationwildcardlist)
|
|
completeprompt += chosenlocationwildcard + " "
|
|
|
|
if(hybridorswap == "hybrid"):
|
|
completeprompt += "|" + chosenlocationwildcard + "] "
|
|
if(hybridorswap == "swap"):
|
|
completeprompt += ":" + chosenlocationwildcard + ":" + str(random.randint(1,5)) + "] "
|
|
else:
|
|
completeprompt += " " + givensubject + " "
|
|
|
|
hybridorswap = ""
|
|
|
|
# completion of strenght end
|
|
completeprompt += "-objectstrengthend-"
|
|
|
|
# shots from inside can create cool effects in landscapes
|
|
if(chance_roll(max(1,insanitylevel-2), subjectlandscapeaddonlocationchance) and insideshot == 0):
|
|
insideshot = 1
|
|
# lets cheat a bit here, we can do something cool I saw on reddit
|
|
if(mainchooser=="humanoid" and legendary_dist(insanitylevel)):
|
|
completeprompt += " looking at a -addontolocationinside- "
|
|
elif(mainchooser=="humanoid" and legendary_dist(insanitylevel)):
|
|
completeprompt += " facing a -addontolocationinside- "
|
|
elif(legendary_dist(insanitylevel)):
|
|
completeprompt += " in the distance there is a -addontolocationinside- "
|
|
else:
|
|
completeprompt += " from inside of a -addontolocationinside- "
|
|
|
|
if(chance_roll(insanitylevel, subjectlandscapeaddonlocationchance) and insideshot == 0):
|
|
completeprompt += " and "
|
|
if(chance_roll(insanitylevel, subjectlandscapeaddonlocationdescriptorchance)):
|
|
completeprompt += "-locationdescriptor- "
|
|
if(chance_roll(insanitylevel, subjectlandscapeaddonlocationculturechance)):
|
|
completeprompt += "-culture- "
|
|
|
|
#addontolocation = [locationlist,buildinglist, vehiclelist]
|
|
if(random.randint(0,1) == 1):
|
|
completeprompt += "-addontolocation- "
|
|
else:
|
|
completeprompt += "-background- "
|
|
|
|
|
|
if(mainchooser == "concept"):
|
|
# first add a wildcard that can be used to create prompt strenght
|
|
completeprompt += " -objectstrengthstart- "
|
|
if(subjectchooser == "conceptmixer"):
|
|
|
|
chosenconceptmixerprelist = random.choice(conceptmixerlist)
|
|
chosenconceptmixerlist = chosenconceptmixerprelist.split("@")
|
|
chosenconceptmixer = ''.join([chosenconceptmixerlist[0]])
|
|
chosenconceptmixersubject = ''.join([chosenconceptmixerlist[1]])
|
|
|
|
# if there is a subject override, then replace the subject with that
|
|
if(givensubject==""):
|
|
chosenconceptmixer = chosenconceptmixer.replace("-subject-",chosenconceptmixersubject )
|
|
elif(givensubject != "" and subjectingivensubject == False):
|
|
chosenconceptmixer = chosenconceptmixer.replace("-subject-",givensubject )
|
|
|
|
if(overrideoutfit!="" and ("-outfit-" in chosenconceptmixer or "-minioutfit-" in chosenconceptmixer)):
|
|
chosenconceptmixer = chosenconceptmixer.replace("-outfit-",overrideoutfit )
|
|
chosenconceptmixer = chosenconceptmixer.replace("-minioutfit-",overrideoutfit )
|
|
outfitmode = 1 # We dont want another outfit in this case
|
|
|
|
completeprompt += chosenconceptmixer
|
|
elif(givensubject == "" or (subjectingivensubject and givensubject != "")):
|
|
if(subjectchooser == "event"):
|
|
completeprompt += " \"-event-\" "
|
|
|
|
if(subjectchooser == "concept"):
|
|
completeprompt += " \"The -conceptprefix- of -conceptsuffix-\" "
|
|
|
|
if(subjectchooser == "poemline"):
|
|
completeprompt += " \"-poemline-\" "
|
|
|
|
if(subjectchooser == "songline"):
|
|
completeprompt += " \"-songline-\" "
|
|
|
|
if(subjectchooser == "cardname"):
|
|
completeprompt += " \"-cardname-\" "
|
|
|
|
if(subjectchooser == "episodetitle"):
|
|
completeprompt += " \"-episodetitle-\" "
|
|
|
|
|
|
|
|
# making subject override work with X and Y concepts, much fun!
|
|
elif(givensubject != "" and subjectchooser == "concept" and subjectingivensubject == False):
|
|
if(random.randint(0,3) == 0):
|
|
completeprompt += " \"The -conceptprefix- of " + givensubject + "\" "
|
|
else:
|
|
completeprompt += " \"The " + givensubject + " of -conceptsuffix-\" "
|
|
else:
|
|
completeprompt += " " + givensubject + " "
|
|
|
|
# completion of strenght end
|
|
completeprompt += " -objectstrengthend-"
|
|
|
|
if(subjectingivensubject):
|
|
completeprompt += " " + givensubjectpromptlist[1] + " "
|
|
|
|
if(genjoboractivity and genjoboractivitylocation=="middle"):
|
|
joboractivitylist = [joblist,humanactivitylist]
|
|
completeprompt += random.choice(random.choice(joboractivitylist)) + ", "
|
|
|
|
if(descriptorsintheback == 2):
|
|
# Common to have 1 description, uncommon to have 2
|
|
if(chance_roll(insanitylevel, subjectdescriptor1chance) and generatedescriptors == True):
|
|
if(animalashuman or subjectchooser in ["human", "job", "fictional", "non fictional", "humanoid", "manwomanrelation","manwomanmultiple", "firstname"]):
|
|
if(less_verbose):
|
|
if(anime_mode and random.randint(0,2)<2):
|
|
completeprompt += ", -basicbitchdescriptor- "
|
|
else:
|
|
completeprompt += ", -humandescriptor- "
|
|
elif(random.randint(0,3) > 0):
|
|
completeprompt += ", OR(;-heshe- is;normal) OR(;very;rare) -humandescriptor- "
|
|
elif(subjectchooser == "manwomanmultiple"):
|
|
completeprompt += ", the -samehumansubject- are OR(;very;rare) -humandescriptor-"
|
|
else:
|
|
completeprompt += ", OR(the -manwoman-;-samehumansubject-) is OR(;very;rare) -humandescriptor-"
|
|
elif(mainchooser == "landscape"):
|
|
if(less_verbose):
|
|
completeprompt += ", -locationdescriptor- "
|
|
else:
|
|
completeprompt += ", OR(;-heshe- is;normal) OR(;very;rare) -locationdescriptor- "
|
|
elif(mainchooser == "animal"):
|
|
if(less_verbose):
|
|
completeprompt += ", -animaldescriptor- "
|
|
else:
|
|
completeprompt += ", OR(;-heshe- is;normal) OR(;very;rare) -animaldescriptor- "
|
|
else:
|
|
if(less_verbose):
|
|
completeprompt += ", -descriptor- "
|
|
else:
|
|
completeprompt += ", OR(;-heshe- is;normal) OR(;very;rare) -descriptor- "
|
|
|
|
if(chance_roll(insanitylevel, subjectdescriptor2chance) and generatedescriptors == True):
|
|
if(animalashuman or subjectchooser in ["human", "job", "fictional", "non fictional", "humanoid", "manwomanrelation","manwomanmultiple","firstname"]):
|
|
if(less_verbose):
|
|
completeprompt += ", -humandescriptor- "
|
|
else:
|
|
completeprompt += " and -humandescriptor- "
|
|
elif(mainchooser == "landscape"):
|
|
if(less_verbose):
|
|
completeprompt += ", -locationdescriptor- "
|
|
else:
|
|
completeprompt += " and -locationdescriptor- "
|
|
elif(mainchooser == "animal"):
|
|
if(less_verbose):
|
|
completeprompt += ", -animaldescriptor- "
|
|
else:
|
|
completeprompt += " and -animaldescriptor- "
|
|
else:
|
|
if(less_verbose):
|
|
completeprompt += ", -descriptor- "
|
|
else:
|
|
completeprompt += " and -descriptor- "
|
|
completeprompt += ", "
|
|
## set the insanitylevel back
|
|
if(superprompter == True):
|
|
insanitylevel = originalinsanitylevel
|
|
|
|
if(thetokinatormode == False):
|
|
# object additions
|
|
for i in range(objectadditionsrepeats):
|
|
if(mainchooser == "object" and chance_roll(insanitylevel, objectadditionschance) and generateobjectaddition == True):
|
|
completeprompt += ", -objectaddition- , "
|
|
|
|
|
|
# riding an animal, holding an object or driving a vehicle, rare
|
|
if((animalashuman or subjectchooser in ["human","fictional", "non fictional", "humanoid", "manwomanrelation","manwomanmultiple","firstname"]) and chance_roll(insanitylevel, humanadditionchance) and generatehumanaddition == True):
|
|
humanspecial = 1
|
|
completeprompt += "-humanaddition- "
|
|
|
|
completeprompt += ", "
|
|
|
|
# unique additions for all types:
|
|
if(chance_roll(insanitylevel, overalladditionchance) and generateoveralladdition == True):
|
|
completeprompt += "-overalladdition- "
|
|
|
|
|
|
|
|
|
|
|
|
# SD understands emoji's. Can be used to manipulate facial expressions.
|
|
# emoji, legendary
|
|
if((animalashuman or subjectchooser in ["human","fictional", "non fictional", "humanoid", "manwomanrelation","manwomanmultiple","firstname"]) and chance_roll(insanitylevel, emojichance) and generateemoji== True):
|
|
completeprompt += "-emoji-, "
|
|
|
|
# human expressions
|
|
if((animalashuman or subjectchooser in ["animal as human,","human","fictional", "non fictional", "humanoid", "manwomanrelation","manwomanmultiple","firstname"]) and chance_roll(insanitylevel, humanexpressionchance) and generatehumanexpression== True):
|
|
completeprompt += "-humanexpression-, "
|
|
|
|
|
|
# cosplaying
|
|
#if(subjectchooser in ["animal as human", "non fictional", "humanoid"] and rare_dist(insanitylevel) and humanspecial != 1):
|
|
# completeprompt += "cosplaying as " + random.choice(fictionallist) + ", "
|
|
|
|
# Job
|
|
# either go job or activity, not both
|
|
|
|
if(genjoboractivity and genjoboractivitylocation=="back"):
|
|
if(random.randint(0,1)==0):
|
|
completeprompt += ", " + random.choice(humanactivitylist)+ ", "
|
|
else:
|
|
completeprompt += ", OR(,; as a;rare) -job-, "
|
|
|
|
|
|
|
|
|
|
# add face builder sometimes on generic humans
|
|
if(subjectchooser in ["human", "humanoid", "manwomanrelation","firstname"] and chance_roll(insanitylevel, buildfacechance) and generateface== True):
|
|
completeprompt += random.choice(buildfacelist) + ", "
|
|
|
|
|
|
|
|
|
|
# custom mid list
|
|
for i in range(custominputmidrepeats):
|
|
if(chance_roll(insanitylevel, custominputmidchance) and generatecustominputmid == True):
|
|
completeprompt += random.choice(custominputmidlist) + ", "
|
|
|
|
# add in some more mini vomits
|
|
if(chance_roll(insanitylevel, minivomitmidchance) and generateminivomit == True):
|
|
completeprompt += " -minivomit-, "
|
|
|
|
# outfit builder
|
|
|
|
if(outfitmode == 2):
|
|
completeprompt += " " + random.choice(buildoutfitlist) + ", "
|
|
if(extraordinary_dist(insanitylevel)):
|
|
completeprompt += " -outfitvomit-, "
|
|
elif(outfitmode == 2 and overrideoutfit != "" and imagetype != "only templates mode"):
|
|
completeprompt += " " + random.choice(buildoutfitlist) + ", "
|
|
if(extraordinary_dist(insanitylevel)):
|
|
completeprompt += " -outfitvomit-, "
|
|
|
|
|
|
|
|
if((animalashuman or subjectchooser in ["human","fictional", "non fictional", "humanoid", "manwomanrelation","manwomanmultiple", "firstname"]) and chance_roll(insanitylevel, posechance) and humanspecial != 1 and generatepose == True):
|
|
completeprompt += random.choice(poselist) + ", "
|
|
|
|
if(subjectchooser in ["human","job","fictional", "non fictional", "humanoid", "manwomanrelation","manwomanmultiple", "firstname"] and chance_roll(insanitylevel, hairchance) and generatehairstyle == True):
|
|
completeprompt += random.choice(buildhairlist) + ", "
|
|
if(unique_dist(insanitylevel)):
|
|
completeprompt += " -hairvomit-, "
|
|
|
|
if((animalashuman or subjectchooser in ["human","fictional", "non fictional", "humanoid", "manwomanrelation","manwomanmultiple", "firstname"]) and chance_roll(insanitylevel, accessorychance) and generateaccessorie == True and generateaccessories == True):
|
|
completeprompt += random.choice(buildaccessorielist) + ", "
|
|
|
|
if(chance_roll(insanitylevel, humanoidinsideshotchance) and subjectchooser not in ["landscape", "concept"] and generateinsideshot == True):
|
|
insideshot = 1
|
|
completeprompt += random.choice(insideshotlist) + ", "
|
|
|
|
if(subjectchooser not in ["landscape", "concept"] and humanspecial != 1 and insideshot == 0 and chance_roll(insanitylevel, humanoidbackgroundchance) and generatebackground == True):
|
|
completeprompt += random.choice(backgroundtypelist) + ", "
|
|
|
|
# minilocation bit
|
|
if(subjectchooser in ["landscape"] and chance_roll(insanitylevel, landscapeminilocationchance) and generateminilocationaddition == True):
|
|
completeprompt += " -minilocationaddition-, "
|
|
|
|
if(chance_roll(insanitylevel, generalminilocationchance) and generateminilocationaddition == True):
|
|
completeprompt += " -minilocationaddition-, "
|
|
|
|
|
|
# divider between subject and everything else
|
|
completeprompt += " @@@ "
|
|
|
|
|
|
# Add more quality while in greg mode lol
|
|
if(originalartistchoice == "greg mode" and generatequality == True):
|
|
completeprompt += "-quality-, "
|
|
|
|
# landscapes it is nice to always have a time period
|
|
if(chance_roll(insanitylevel, timperiodchance) or subjectchooser=="landscape"):
|
|
if(generatetimeperiod == True):
|
|
completeprompt += "-timeperiod-, "
|
|
|
|
if(mainchooser not in ["landscape"] and chance_roll(insanitylevel, focuschance) and generatefocus == True):
|
|
completeprompt += "-focus-, "
|
|
|
|
|
|
# artists in the middle, can happen as well:
|
|
|
|
if(artists != "none" and artistsplacement == "middle" and generateartist == True):
|
|
completeprompt += ", "
|
|
doartistnormal = True
|
|
if(artists == "greg mode"):
|
|
artistbylist = ["art by", "designed by", "stylized by", "by"]
|
|
completeprompt += random.choice(artistbylist) + " -gregmode-, "
|
|
doartistnormal = False
|
|
|
|
# in case we have ALL, we can also do a specific artist mode per chosen subject. sometimes
|
|
elif(originalartistchoice == "all" and random.randint(0,3) == 0):
|
|
if(mainchooser in ["humanoid", "animal"]):
|
|
artistbylist = ["art by", "designed by", "stylized by", "by"]
|
|
completeprompt += random.choice(artistbylist) + " OR(-portraitartist-;-characterartist-), OR(-portraitartist-;-characterartist-) OR(;and OR(-fantasyartist-;-scifiartist-;-photographyartist-;-digitalartist-;-graphicdesignartist-);uncommon), "
|
|
doartistnormal = False
|
|
|
|
elif(mainchooser in ["landscape"]):
|
|
artistbylist = ["art by", "designed by", "stylized by", "by"]
|
|
completeprompt += random.choice(artistbylist) + " OR(-landscapeartist-;-digitalartist-), OR(-landscapeartist-;-graphicdesignartist-) OR(;and OR(-fantasyartist-;-scifiartist-;-photographyartist-;-digitalartist-;-graphicdesignartist-);uncommon), "
|
|
doartistnormal = False
|
|
|
|
elif(subjectchooser in ["building"]):
|
|
artistbylist = ["art by", "designed by", "stylized by", "by"]
|
|
completeprompt += random.choice(artistbylist) + " OR(-landscapeartist-;-architectartist-), OR(-landscapeartist-;-architectartist-) OR(;and OR(-fantasyartist-;-scifiartist-;-photographyartist-;-digitalartist-;-graphicdesignartist-);uncommon), "
|
|
doartistnormal = False
|
|
|
|
if(doartistnormal):
|
|
|
|
# sometimes do this as well, but now in the front of the artists
|
|
if(giventypeofimage=="" and imagetype == "all" and random.randint(0, 2) == 0):
|
|
completeprompt += "-artiststyle- art, "
|
|
|
|
# take 1-3 artists, weighted to 1-2
|
|
step = random.randint(0, 1)
|
|
minstep = step
|
|
end = random.randint(1, insanitylevel3)
|
|
|
|
|
|
|
|
|
|
# determine artist mode:
|
|
# normal
|
|
# hybrid |
|
|
# switching A:B:X
|
|
# adding at step x a:X
|
|
# stopping at step x ::X
|
|
|
|
|
|
modeselector = random.randint(0,10)
|
|
if modeselector < 4 and end - step >= 2:
|
|
artistmodeslist = ["hybrid", "stopping", "adding", "switching"]
|
|
artistmode = artistmodeslist[modeselector]
|
|
if(advancedprompting == False):
|
|
artistmode = "normal"
|
|
if artistmode in ["hybrid","switching"] and end - step == 1:
|
|
artistmode = "normal"
|
|
# if there are not enough artists in the list, then just go normal
|
|
if(len(artistlist) < 3):
|
|
artistmode = "normal"
|
|
|
|
if artistmode in ["hybrid", "stopping", "adding","switching"]:
|
|
completeprompt += " ["
|
|
|
|
while step < end:
|
|
if(normal_dist(insanitylevel) and remove_weights == False):
|
|
isweighted = 1
|
|
|
|
if isweighted == 1:
|
|
completeprompt += " ("
|
|
|
|
#completeprompt = add_from_csv(completeprompt, "artists", 0, "art by ","")
|
|
if(step == minstep):
|
|
# sometimes do this
|
|
if(giventypeofimage=="" and imagetype == "all" and random.randint(0, 1) == 0):
|
|
if(artiststyleselectormode == "normal"):
|
|
completeprompt += artiststyleselector + " art "
|
|
else:
|
|
completeprompt += "-artiststyle- art "
|
|
artistbylist = ["art by", "designed by", "stylized by", "by"]
|
|
else:
|
|
artistbylist = [""]
|
|
completeprompt += random.choice(artistbylist) + " -artist-"
|
|
|
|
if isweighted == 1:
|
|
completeprompt += ":" + str(1 + (random.randint(-3,3)/10)) + ")"
|
|
|
|
if artistmode in ["hybrid"] and not end - step == 1:
|
|
completeprompt += "|"
|
|
if artistmode in ["switching"] and not end - step == 1:
|
|
completeprompt += ":"
|
|
|
|
if artistmode not in ["hybrid", "switching"]and not end - step == 1:
|
|
completeprompt += ","
|
|
|
|
isweighted = 0
|
|
|
|
step = step + 1
|
|
|
|
if artistmode in ["stopping"]:
|
|
completeprompt += "::"
|
|
completeprompt += str(random.randint(1,19))
|
|
|
|
if artistmode in ["switching","adding"]:
|
|
completeprompt += ":" + str(random.randint(1,18))
|
|
if artistmode in ["hybrid", "stopping","adding", "switching"]:
|
|
completeprompt += "] "
|
|
|
|
completeprompt += ", "
|
|
# end of the artist stuff
|
|
if(thetokinatormode == False):
|
|
|
|
# todo
|
|
descriptivemode = False
|
|
# if we have artists, maybe go in artists descriptor mode
|
|
if(not anime_mode and not less_verbose and templatemode == False and specialmode == False and "-artist-" in completeprompt and uncommon_dist(max(8 - insanitylevel,3))):
|
|
for i in range(random.randint(1,3)):
|
|
# print("adding artist stuff")
|
|
completeprompt += ", -artistdescription-"
|
|
descriptivemode = True
|
|
completeprompt += ", "
|
|
|
|
|
|
|
|
# if not, we could go in random styles descriptor mode
|
|
elif(not anime_mode and not less_verbose and templatemode == False and specialmode == False and legendary_dist(10 - insanitylevel)):
|
|
for i in range(random.randint(1,max(7,insanitylevel + 2))):
|
|
# print("adding random crap")
|
|
completeprompt += ", -allstylessuffix-"
|
|
descriptivemode = True
|
|
completeprompt += ", "
|
|
|
|
# and on high levels, DO EVERYTHING :D
|
|
if(descriptivemode == False or rare_dist(insanitylevel)):
|
|
|
|
# Add more quality while in greg mode lol
|
|
if(originalartistchoice == "greg mode" and generatequality == True):
|
|
completeprompt += "-quality-, "
|
|
|
|
# others
|
|
if(chance_roll(max(1,insanitylevel -1), directionchance) and generatedirection == True):
|
|
completeprompt += "-direction-, "
|
|
|
|
if(chance_roll(insanitylevel, moodchance) and generatemood == True):
|
|
completeprompt += "-mood-, "
|
|
|
|
# add in some more mini vomits
|
|
if(chance_roll(insanitylevel, minivomitsuffixchance) and generateminivomit == True):
|
|
completeprompt += " -minivomit-, "
|
|
|
|
if(chance_roll(insanitylevel, artmovementchance) and generateartmovement == True):
|
|
completeprompt += "-artmovement-, "
|
|
|
|
if(chance_roll(insanitylevel, lightingchance) and generatelighting == True):
|
|
completeprompt += "-lighting-, "
|
|
|
|
# determine wether we have a photo or not
|
|
if("photo" in completeprompt.lower()):
|
|
isphoto = 1
|
|
|
|
if(chance_roll(insanitylevel, photoadditionchance) and isphoto == 1 and generatephotoaddition == True):
|
|
completeprompt += random.choice(photoadditionlist) + ", "
|
|
|
|
if(isphoto == 1 and generatecamera == True):
|
|
completeprompt += "-camera-, "
|
|
|
|
if(chance_roll(insanitylevel, lenschance) or isphoto == 1):
|
|
if(generatelens == True):
|
|
completeprompt += "-lens-, "
|
|
|
|
if(chance_roll(insanitylevel, colorschemechance) and generatecolorscheme == True):
|
|
completeprompt += "-colorscheme-, "
|
|
|
|
# vomit some cool/wierd things into the prompt
|
|
if(chance_roll(insanitylevel, vomit1chance) and generatevomit == True):
|
|
completeprompt += "-vomit-, "
|
|
if(chance_roll(insanitylevel, vomit2chance)):
|
|
completeprompt += "-vomit-, "
|
|
|
|
# human specfic vomit
|
|
if(mainchooser == "humanoid" and chance_roll(insanitylevel, humanvomitchance) and generatehumanvomit == True):
|
|
completeprompt += "-humanvomit-, "
|
|
if(chance_roll(insanitylevel, humanvomitchance)):
|
|
completeprompt += "-humanvomit-, "
|
|
|
|
#adding a great work of art, like starry night has cool effects. But this should happen only very rarely.
|
|
if(chance_roll(insanitylevel, greatworkchance) and generategreatwork == True):
|
|
completeprompt += " in the style of -greatwork-, "
|
|
|
|
#adding a poemline. But this should happen only very rarely.
|
|
if(chance_roll(insanitylevel, poemlinechance) and generatepoemline == True):
|
|
completeprompt += " \"-poemline-\", "
|
|
|
|
#adding a songline. But this should happen only very rarely.
|
|
if(chance_roll(insanitylevel, songlinechance) and generatesongline == True):
|
|
completeprompt += " \"-songline-\", "
|
|
|
|
# everyone loves the adding quality. The better models don't need this, but lets add it anyway
|
|
if((chance_roll(insanitylevel, quality1chance) or originalartistchoice == "greg mode") and generatequality == True):
|
|
completeprompt += "-quality-, "
|
|
if((chance_roll(insanitylevel, quality2chance) or originalartistchoice == "greg mode")):
|
|
completeprompt += "-quality-, "
|
|
|
|
|
|
|
|
# start second part of art blaster here
|
|
if(artblastermode==True):
|
|
step = 0
|
|
end = random.randint(1, insanitylevel) + 1
|
|
while step < end:
|
|
if(uncommon_dist(insanitylevel) and bool(artistlist)):
|
|
completeprompt += "-artist-, "
|
|
if(uncommon_dist(insanitylevel) and bool(artmovementlist)):
|
|
completeprompt += "-artmovement-, "
|
|
if(unique_dist(insanitylevel) and bool(vomitlist)):
|
|
completeprompt += "-vomit-, "
|
|
if(unique_dist(insanitylevel) and bool(imagetypelist)):
|
|
completeprompt += "-imagetype-, "
|
|
if(unique_dist(insanitylevel) and bool(colorschemelist)):
|
|
completeprompt += "-colorscheme-, "
|
|
step = step + 1
|
|
|
|
# start second part of unique art here
|
|
if(uniqueartmode==True):
|
|
step = 0
|
|
end = random.randint(1, insanitylevel) + 1
|
|
while step < end:
|
|
if(uncommon_dist(insanitylevel) and bool(artmovementlist)):
|
|
completeprompt += "-artmovement-, "
|
|
if(uncommon_dist(insanitylevel) and bool(colorschemelist)):
|
|
completeprompt += "-colorscheme-, "
|
|
if(rare_dist(insanitylevel) and bool(vomitlist)):
|
|
completeprompt += "-vomit-, "
|
|
if(rare_dist(insanitylevel) and bool(lightinglist)):
|
|
completeprompt += "-lighting-, "
|
|
if(unique_dist(insanitylevel) and bool(qualitylist)):
|
|
completeprompt += "-quality-, "
|
|
if(unique_dist(insanitylevel) and bool(artistlist)):
|
|
completeprompt += "-artist-, "
|
|
if(novel_dist(insanitylevel) and bool(greatworklist)):
|
|
completeprompt += "in style of -greatwork-, "
|
|
if(novel_dist(insanitylevel) and bool(poemlinelist)):
|
|
completeprompt += "\"-poemline-\", "
|
|
if(novel_dist(insanitylevel) and bool(songlinelist)):
|
|
completeprompt += "\"-songline-\", "
|
|
|
|
step = step + 1
|
|
|
|
|
|
# start second part of quality vomit here
|
|
if(qualityvomitmode==True):
|
|
step = 0
|
|
end = random.randint(1, insanitylevel) + 1
|
|
while step < end:
|
|
if(uncommon_dist(insanitylevel) and bool(vomitlist)):
|
|
completeprompt += "-vomit-, "
|
|
if(uncommon_dist(insanitylevel) and bool(qualitylist)):
|
|
completeprompt += "-quality-, "
|
|
if(unique_dist(insanitylevel) and bool(minivomitlist)):
|
|
completeprompt += "-minivomit-, "
|
|
if(unique_dist(insanitylevel) and bool(artmovementlist)) :
|
|
completeprompt += "-artmovement-, "
|
|
if(unique_dist(insanitylevel) and bool(colorschemelist)):
|
|
completeprompt += "-colorscheme-, "
|
|
step = step + 1
|
|
|
|
# start second part of mood color here
|
|
if(colorcannonmode == True):
|
|
step = 0
|
|
end = random.randint(1, insanitylevel) + 1
|
|
while step < end:
|
|
if(uncommon_dist(insanitylevel) and bool(moodlist)):
|
|
completeprompt += "-mood-, "
|
|
if(uncommon_dist(insanitylevel) and bool(colorschemelist)):
|
|
completeprompt += "-colorscheme-, "
|
|
if(rare_dist(insanitylevel) and bool(vomitlist)):
|
|
completeprompt += "-vomit-, "
|
|
if(unique_dist(insanitylevel) and bool(artmovementlist)):
|
|
completeprompt += "-artmovement-, "
|
|
if(unique_dist(insanitylevel) and bool(lightinglist)):
|
|
completeprompt += "-lighting-, "
|
|
step = step + 1
|
|
|
|
|
|
# start second part of photo fantasy here
|
|
if(photofantasymode == True):
|
|
step = 0
|
|
end = random.randint(1, insanitylevel) + 1
|
|
while step < end:
|
|
if(uncommon_dist(insanitylevel) and bool(lightinglist)):
|
|
completeprompt += "-lighting-, "
|
|
if(uncommon_dist(insanitylevel) and bool(cameralist)):
|
|
completeprompt += "-camera-, "
|
|
if(rare_dist(insanitylevel) and bool(lenslist)):
|
|
completeprompt += "-lens-, "
|
|
if(unique_dist(insanitylevel) and bool(moodlist)):
|
|
completeprompt += "-mood-, "
|
|
if(unique_dist(insanitylevel) and bool(colorschemelist)):
|
|
completeprompt += "-colorscheme-, "
|
|
step = step + 1
|
|
|
|
# start second part of massive madness here
|
|
if(massivemadnessmode == True):
|
|
completeprompt += ", "
|
|
step = 0
|
|
end = random.randint(1, insanitylevel) + 1
|
|
while step < end:
|
|
if(rare_dist(insanitylevel) and bool(artistlist)):
|
|
completeprompt += "-artist-, "
|
|
if(rare_dist(insanitylevel) and bool(descriptorlist)):
|
|
completeprompt += "-descriptor-, "
|
|
if(rare_dist(insanitylevel) and bool(moodlist)):
|
|
completeprompt += "-mood-, "
|
|
if(rare_dist(insanitylevel) and bool(colorschemelist)):
|
|
completeprompt += "-colorscheme-, "
|
|
if(rare_dist(insanitylevel) and bool(vomitlist)):
|
|
completeprompt += "-vomit-, "
|
|
if(rare_dist(insanitylevel) and bool(artmovementlist)):
|
|
completeprompt += "-artmovement-, "
|
|
if(rare_dist(insanitylevel) and bool(lightinglist)):
|
|
completeprompt += "-lighting-, "
|
|
if(rare_dist(insanitylevel) and bool(minilocationadditionslist)):
|
|
completeprompt += "-minilocationaddition-, "
|
|
if(rare_dist(insanitylevel) and bool(materiallist)):
|
|
completeprompt += "-material-, "
|
|
if(rare_dist(insanitylevel) and bool(conceptsuffixlist)):
|
|
completeprompt += "-conceptsuffix-, "
|
|
if(rare_dist(insanitylevel) and bool(qualitylist)):
|
|
completeprompt += "-quality-, "
|
|
if(rare_dist(insanitylevel) and bool(cameralist)):
|
|
completeprompt += "-camera-, "
|
|
step = step + 1
|
|
|
|
# start styles mode here
|
|
if(stylesmode == True):
|
|
completeprompt += chosenstylesuffix
|
|
|
|
templatesmodechance = 0
|
|
if(uncommon_dist(insanitylevel) and not anime_mode): # not for anime models!
|
|
templatesmodechance = 1
|
|
|
|
if(dynamictemplatesmode == True and templatesmodechance == 1):
|
|
for i in range(random.randint(1,max(2,insanitylevel))):
|
|
completeprompt += ", -allstylessuffix-"
|
|
|
|
|
|
|
|
if(dynamictemplatesmode == True and common_dist(insanitylevel) and templatesmodechance == 0):
|
|
if("-artist-" in completeprompt or artists == "none"):
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-artist-" not in sentence.lower()]
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-artiststyle-" not in sentence.lower()]
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-artistdescription-" not in sentence.lower()]
|
|
if("-lighting-" in completeprompt):
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-lighting-" not in sentence.lower()]
|
|
if("-shotsize-" in completeprompt):
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-shotsize-" not in sentence.lower()]
|
|
if("-artmovement-" in completeprompt):
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-artmovement-" not in sentence.lower()]
|
|
if("-imagetype-" in completeprompt or "-othertype-" in completeprompt ):
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-imagetype-" not in sentence.lower()]
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-othertype-" not in sentence.lower()]
|
|
if("-colorcombination-" in completeprompt or "-colorscheme" in completeprompt ):
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-colorcombination-" not in sentence.lower()]
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-colorscheme-" not in sentence.lower()]
|
|
if("-mood-" in completeprompt or "-humanexpression" in completeprompt ):
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-mood-" not in sentence.lower()]
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-humanexpression-" not in sentence.lower()]
|
|
chosenstylesuffix = random.choice(dynamictemplatessuffixlist)
|
|
completeprompt += ". " + chosenstylesuffix
|
|
|
|
if(normal_dist(insanitylevel)):
|
|
if("-artist-" in completeprompt):
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-artist-" not in sentence.lower()]
|
|
if("-lighting-" in completeprompt):
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-lighting-" not in sentence.lower()]
|
|
if("-shotsize-" in completeprompt):
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-shotsize-" not in sentence.lower()]
|
|
if("-artmovement-" in completeprompt):
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-artmovement-" not in sentence.lower()]
|
|
if("-imagetype-" in completeprompt or "-othertype-" in completeprompt ):
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-imagetype-" not in sentence.lower()]
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-othertype-" not in sentence.lower()]
|
|
if("-colorcombination-" in completeprompt or "-colorscheme" in completeprompt ):
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-colorcombination-" not in sentence.lower()]
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-colorscheme-" not in sentence.lower()]
|
|
if("-mood-" in completeprompt or "-humanexpression" in completeprompt ):
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-mood-" not in sentence.lower()]
|
|
dynamictemplatessuffixlist = [sentence for sentence in dynamictemplatessuffixlist if "-humanexpression-" not in sentence.lower()]
|
|
chosenstylesuffix = random.choice(dynamictemplatessuffixlist)
|
|
completeprompt += " " + chosenstylesuffix
|
|
|
|
|
|
# custom style list
|
|
if(chance_roll(insanitylevel, customstyle1chance) and generatestyle == True):
|
|
completeprompt += "-styletilora-, "
|
|
if(chance_roll(insanitylevel, customstyle2chance)):
|
|
completeprompt += "-styletilora-, "
|
|
|
|
|
|
# custom suffix list
|
|
for i in range(custominputsuffixrepeats):
|
|
if(chance_roll(insanitylevel, custominputsuffixchance) and generatecustominputsuffix == True):
|
|
completeprompt += random.choice(custominputsuffixlist) + ", "
|
|
|
|
|
|
|
|
if artistmode in ["enhancing"]:
|
|
completeprompt += "::" + str(random.randint(1,17)) + "] "
|
|
|
|
|
|
|
|
if(artists != "none" and artistsplacement == "back" and generateartist == True):
|
|
completeprompt += ", "
|
|
doartistnormal = True
|
|
if(artists == "greg mode"):
|
|
artistbylist = ["art by", "designed by", "stylized by", "by"]
|
|
completeprompt += random.choice(artistbylist) + " -gregmode- ,"
|
|
doartistnormal = False
|
|
|
|
# in case we have ALL, we can also do a specific artist mode per chosen subject. sometimes
|
|
elif(originalartistchoice == "all" and random.randint(0,3) == 0):
|
|
if(mainchooser in ["humanoid", "animal"]):
|
|
artistbylist = ["art by", "designed by", "stylized by", "by"]
|
|
completeprompt += random.choice(artistbylist) + " OR(-portraitartist-;-characterartist-), OR(-portraitartist-;-characterartist-) OR(;and OR(-fantasyartist-;-scifiartist-;-photographyartist-;-digitalartist-;-graphicdesignartist-);uncommon), "
|
|
doartistnormal = False
|
|
|
|
elif(mainchooser in ["landscape"]):
|
|
artistbylist = ["art by", "designed by", "stylized by", "by"]
|
|
completeprompt += random.choice(artistbylist) + " OR(-landscapeartist-;-digitalartist-), OR(-landscapeartist-;-graphicdesignartist-) OR(;and OR(-fantasyartist-;-scifiartist-;-photographyartist-;-digitalartist-;-graphicdesignartist-);uncommon), "
|
|
doartistnormal = False
|
|
|
|
elif(subjectchooser in ["building"]):
|
|
artistbylist = ["art by", "designed by", "stylized by", "by"]
|
|
completeprompt += random.choice(artistbylist) + " OR(-landscapeartist-;-architectartist-), OR(-landscapeartist-;-architectartist-) OR(;and OR(-fantasyartist-;-scifiartist-;-photographyartist-;-digitalartist-;-graphicdesignartist-);uncommon), "
|
|
doartistnormal = False
|
|
|
|
if(doartistnormal):
|
|
# take 1-3 artists, weighted to 1-2
|
|
step = random.randint(0, 1)
|
|
minstep = step
|
|
end = random.randint(1, insanitylevel3)
|
|
|
|
|
|
|
|
|
|
# determine artist mode:
|
|
# normal
|
|
# hybrid |
|
|
# switching A:B:X
|
|
# adding at step x a:X
|
|
# stopping at step x ::X
|
|
|
|
|
|
modeselector = random.randint(0,10)
|
|
if modeselector < 4 and end - step >= 2:
|
|
artistmodeslist = ["hybrid", "stopping", "adding", "switching"]
|
|
artistmode = artistmodeslist[modeselector]
|
|
if(advancedprompting == False):
|
|
artistmode = "normal"
|
|
if artistmode in ["hybrid","switching"] and end - step == 1:
|
|
artistmode = "normal"
|
|
# if there are not enough artists in the list, then just go normal
|
|
if(len(artistlist) < 3):
|
|
artistmode = "normal"
|
|
|
|
if artistmode in ["hybrid", "stopping", "adding","switching"]:
|
|
completeprompt += " ["
|
|
|
|
while step < end:
|
|
if(normal_dist(insanitylevel) and remove_weights == False):
|
|
isweighted = 1
|
|
|
|
if isweighted == 1:
|
|
completeprompt += " ("
|
|
|
|
#completeprompt = add_from_csv(completeprompt, "artists", 0, "art by ","")
|
|
if(step == minstep):
|
|
# sometimes do this
|
|
if(giventypeofimage=="" and imagetype == "all" and random.randint(0, 1) == 0):
|
|
if(artiststyleselectormode == "normal"):
|
|
completeprompt += artiststyleselector + " art "
|
|
else:
|
|
completeprompt += "-artiststyle- art "
|
|
artistbylist = ["art by", "designed by", "stylized by", "by"]
|
|
else:
|
|
artistbylist = [""]
|
|
completeprompt += random.choice(artistbylist) + " -artist-"
|
|
|
|
if isweighted == 1:
|
|
completeprompt += ":" + str(1 + (random.randint(-3,3)/10)) + ")"
|
|
|
|
if artistmode in ["hybrid"] and not end - step == 1:
|
|
completeprompt += "|"
|
|
if artistmode in ["switching"] and not end - step == 1:
|
|
completeprompt += ":"
|
|
|
|
if artistmode not in ["hybrid", "switching"]and not end - step == 1:
|
|
completeprompt += ","
|
|
|
|
isweighted = 0
|
|
|
|
step = step + 1
|
|
|
|
if artistmode in ["stopping"]:
|
|
completeprompt += "::"
|
|
completeprompt += str(random.randint(1,19))
|
|
|
|
if artistmode in ["switching","adding"]:
|
|
completeprompt += ":" + str(random.randint(1,18))
|
|
if artistmode in ["hybrid", "stopping","adding", "switching"]:
|
|
completeprompt += "] "
|
|
# end of the artist stuff
|
|
|
|
|
|
|
|
if(partlystylemode == True):
|
|
# add a part of the style to the back
|
|
chosenstylesuffixlist = chosenstylesuffix.split(",")
|
|
for i in range(len(chosenstylesuffixlist)):
|
|
if(random.randint(3, 10)<insanitylevel):
|
|
chosenstylesuffixlist.pop(random.randint(0, len(chosenstylesuffixlist)-1))
|
|
chosenstylesuffixcomplete = ", ".join(chosenstylesuffixlist)
|
|
|
|
|
|
completeprompt += ", " + chosenstylesuffixcomplete
|
|
|
|
if(artifymode == True):
|
|
amountofartists = "random"
|
|
if(unique_dist(insanitylevel)):
|
|
mode = "super remix turbo"
|
|
elif(legendary_dist(insanitylevel)):
|
|
mode = "remix"
|
|
else:
|
|
mode = "standard"
|
|
completeprompt = artify_prompt(insanitylevel=insanitylevel,prompt=completeprompt, artists=artists, amountofartists=amountofartists, mode=mode, seed=seed)
|
|
|
|
completeprompt += " -tempnewwords- "
|
|
completeprompt += ", "
|
|
|
|
completeprompt = prefixprompt + ", " + completeprompt
|
|
completeprompt += suffixprompt
|
|
|
|
# and then up the compounding stuff
|
|
compoundcounter += 1
|
|
|
|
# Here comes all the seperator stuff for prompt compounding
|
|
if(compoundcounter < promptstocompound):
|
|
if(seperator == "comma"):
|
|
completeprompt += " \n , "
|
|
else:
|
|
completeprompt += " \n " + seperator + " "
|
|
|
|
|
|
|
|
|
|
#end of the while loop, now clean up the prompt
|
|
|
|
|
|
|
|
|
|
|
|
# In front and the back?
|
|
if(dynamictemplatesmode == False):
|
|
completeprompt = parse_custom_functions(completeprompt, insanitylevel)
|
|
|
|
# Sometimes change he/she to the actual subject
|
|
# Doesnt work if someone puts in a manual subject
|
|
if(mainchooser == "humanoid" and (givensubject == "" or subjectingivensubject and givensubject != "") and subjectchooser != "manwomanmultiple"):
|
|
samehumanreplacementlist = ["-heshe-","-heshe-","-heshe-","-heshe-","-heshe-", "-samehumansubject-", "-samehumansubject-", "-samehumansubject-", "-samehumansubject-", "-samehumansubject-"]
|
|
random.shuffle(samehumanreplacementlist)
|
|
|
|
# Convert completeprompt to a list to allow character-wise manipulation
|
|
completeprompt_list = list(completeprompt)
|
|
# Iterate over the characters in completeprompt_list
|
|
for i in range(len(completeprompt_list) - len("-heshe-") + 1):
|
|
if "".join(completeprompt_list[i:i+len("-heshe-")]) == "-heshe-":
|
|
# Replace -heshe- with a value from the shuffled list
|
|
replacement = samehumanreplacementlist.pop()
|
|
completeprompt_list[i:i+len("-heshe-")] = replacement
|
|
|
|
# Convert the list back to a string
|
|
completeprompt = "".join(completeprompt_list)
|
|
|
|
# Sometimes change he/she to the actual subject
|
|
if(mainchooser in ["animal", "object"] and (givensubject == "" or subjectingivensubject and givensubject != "")):
|
|
sameobjectreplacementlist = ["-heshe-","-heshe-","-heshe-","-heshe-","-heshe-", "-sameothersubject-", "-sameothersubject-", "-sameothersubject-", "-sameothersubject-", "-sameothersubject-"]
|
|
random.shuffle(sameobjectreplacementlist)
|
|
# Convert completeprompt to a list to allow character-wise manipulation
|
|
completeprompt_list = list(completeprompt)
|
|
|
|
# Iterate over the characters in completeprompt_list
|
|
for i in range(len(completeprompt_list) - len("-heshe-") + 1):
|
|
if "".join(completeprompt_list[i:i+len("-heshe-")]) == "-heshe-":
|
|
# Replace -heshe- with a value from the shuffled list
|
|
replacement = sameobjectreplacementlist.pop()
|
|
completeprompt_list[i:i+len("-heshe-")] = replacement
|
|
# Convert the list back to a string
|
|
completeprompt = "".join(completeprompt_list)
|
|
|
|
# hair descriptor
|
|
if(rare_dist(insanitylevel)): # Use base hair descriptor, until we are not.
|
|
completeprompt = completeprompt.replace("-hairdescriptor-", "-descriptor-")
|
|
|
|
# human descriptor
|
|
if(rare_dist(insanitylevel)): # Use base human descriptor, until we are not.
|
|
completeprompt = completeprompt.replace("-humandescriptor-", "-descriptor-")
|
|
|
|
# location descriptor
|
|
if(rare_dist(insanitylevel)): # Use base location descriptor, until we are not.
|
|
completeprompt = completeprompt.replace("-locationdescriptor-", "-descriptor-")
|
|
|
|
# animeal descriptor
|
|
if(rare_dist(insanitylevel)): # Use base animal descriptor, until we are not.
|
|
completeprompt = completeprompt.replace("-animaldescriptor-", "-descriptor-")
|
|
|
|
|
|
# sometimes, culture becomes traditional!
|
|
if(unique_dist(insanitylevel)):
|
|
completeprompt = completeprompt.replace("-culture-", "traditional -culture-")
|
|
|
|
|
|
# first some manual stuff for outfit
|
|
|
|
if(unique_dist(insanitylevel)): # sometimes, its just nice to have descriptor and a normal "outfit". We use mini outfits for this!
|
|
completeprompt = completeprompt.replace("-outfit-", "-minioutfit-",1)
|
|
if(rare_dist(insanitylevel)): # Use base outfit descriptor, until we are not.
|
|
completeprompt = completeprompt.replace("-outfitdescriptor-", "-descriptor-")
|
|
|
|
# if -outfit- is in the override, we want a consistent result
|
|
if("-outfit-" in overrideoutfit):
|
|
if(chance_roll(insanitylevel, "common")):
|
|
overrideoutfit = overrideoutfit.replace("-outfit-", random.choice(outfitlist))
|
|
else:
|
|
overrideoutfit = overrideoutfit.replace("-outfit-", random.choice(minioutfitlist))
|
|
|
|
if(overrideoutfit != ""):
|
|
completeprompt = completeprompt.replace("-sameoutfit-", overrideoutfit)
|
|
completeprompt = completeprompt.replace("-outfit-", overrideoutfit,1)
|
|
completeprompt = completeprompt.replace("-minioutfit-", overrideoutfit,1)
|
|
completeprompt = completeprompt.replace("-overrideoutfit-", overrideoutfit)
|
|
|
|
if(givensubject != "" and subjectingivensubject == False):
|
|
completeprompt = completeprompt.replace("-samehumansubject-", givensubject)
|
|
completeprompt = completeprompt.replace("-sameothersubject-", givensubject)
|
|
|
|
|
|
|
|
# If we don't have an override outfit, then remove this part
|
|
completeprompt = completeprompt.replace("-overrideoutfit-", "")
|
|
|
|
# sometimes replace one descriptor with a artmovement, only on high insanitylevels
|
|
if(insanitylevel > 7 and unique_dist(insanitylevel)):
|
|
completeprompt = completeprompt.replace("-descriptor-", "-artmovement-",1)
|
|
|
|
# On low insanity levels (lower than 5) ,a chance refer to the basic bitch list on some occasions
|
|
if(random.randint(0,insanitylevel) == 0 and insanitylevel < 5):
|
|
completeprompt = completeprompt.replace("-locationdescriptor-", "-basicbitchdescriptor-")
|
|
completeprompt = completeprompt.replace("-humandescriptor-", "-basicbitchdescriptor-")
|
|
completeprompt = completeprompt.replace("-outfitdescriptor-", "-basicbitchdescriptor-")
|
|
completeprompt = completeprompt.replace("-descriptor-", "-basicbitchdescriptor-")
|
|
completeprompt = completeprompt.replace("-animaldescriptor-", "-basicbitchdescriptor-")
|
|
|
|
# we now have color combinations, which are stronger than just color. So lets change them while we are at it.
|
|
if(random.randint(0,max(0, insanitylevel - 2)) <= 0):
|
|
completeprompt = completeprompt.replace("-color- and -color-", "-colorcombination-") # any color and color becomes a color combination
|
|
|
|
colorreplacementlist = ["-color-","-color-","-color-","-colorcombination-","-colorcombination-", "-colorcombination-", "-colorcombination-", "-colorcombination-", "-colorcombination-", "-colorcombination-"]
|
|
random.shuffle(colorreplacementlist)
|
|
|
|
# Convert completeprompt to a list to allow character-wise manipulation
|
|
completeprompt_list = list(completeprompt)
|
|
# Iterate over the characters in completeprompt_list
|
|
for i in range(len(completeprompt_list) - len("-color-") + 1):
|
|
if "".join(completeprompt_list[i:i+len("-color-")]) == "-color-":
|
|
# Replace -heshe- with a value from the shuffled list
|
|
replacement = colorreplacementlist.pop()
|
|
completeprompt_list[i:i+len("-color-")] = replacement
|
|
|
|
# Convert the list back to a string
|
|
completeprompt = "".join(completeprompt_list)
|
|
|
|
|
|
# we now have material combinations, which are stronger than just one material. So lets change them while we are at it.
|
|
if(random.randint(0,max(0, insanitylevel - 4)) <= 0):
|
|
completeprompt = completeprompt.replace("-material- and -material-", "-materialcombination-") # any color and color becomes a color combination
|
|
|
|
materialreplacementlist = ["-material-","-material-","-material-","-materialcombination-","-materialcombination-", "-materialcombination-", "-materialcombination-", "-materialcombination-", "-materialcombination-", "-materialcombination-"]
|
|
random.shuffle(materialreplacementlist)
|
|
|
|
# Convert completeprompt to a list to allow character-wise manipulation
|
|
completeprompt_list = list(completeprompt)
|
|
# Iterate over the characters in completeprompt_list
|
|
for i in range(len(completeprompt_list) - len("-material-") + 1):
|
|
if "".join(completeprompt_list[i:i+len("-material-")]) == "-material-":
|
|
# Replace -heshe- with a value from the shuffled list
|
|
replacement = materialreplacementlist.pop()
|
|
completeprompt_list[i:i+len("-material-")] = replacement
|
|
|
|
# Convert the list back to a string
|
|
completeprompt = "".join(completeprompt_list)
|
|
|
|
|
|
# print(completeprompt)
|
|
|
|
# lol, this needs a rewrite :D
|
|
while (
|
|
"-color-" in completeprompt or
|
|
"-material-" in completeprompt or
|
|
"-animal-" in completeprompt or
|
|
"-object-" in completeprompt or
|
|
"-fictional-" in completeprompt or
|
|
"-nonfictional-" in completeprompt or
|
|
"-conceptsuffix-" in completeprompt or
|
|
"-building-" in completeprompt or
|
|
"-vehicle-" in completeprompt or
|
|
"-outfit-" in completeprompt or
|
|
"-location-" in completeprompt or
|
|
"-conceptprefix-" in completeprompt or
|
|
"-descriptor-" in completeprompt or
|
|
"-food-" in completeprompt or
|
|
"-haircolor-" in completeprompt or
|
|
"-hairstyle-" in completeprompt or
|
|
"-job-" in completeprompt or
|
|
"-culture-" in completeprompt or
|
|
"-accessory-" in completeprompt or
|
|
"-humanoid-" in completeprompt or
|
|
"-manwoman-" in completeprompt or
|
|
"-human-" in completeprompt or
|
|
"-colorscheme-" in completeprompt or
|
|
"-mood-" in completeprompt or
|
|
"-genderdescription-" in completeprompt or
|
|
"-artmovement-" in completeprompt or
|
|
"-malefemale-" in completeprompt or
|
|
"-objecttotal-" in completeprompt or
|
|
"-outfitprinttotal-" in completeprompt or
|
|
"-bodytype-" in completeprompt or
|
|
"-minilocation-" in completeprompt or
|
|
"-minilocationaddition-" in completeprompt or
|
|
"-pose-" in completeprompt or
|
|
"-season-" in completeprompt or
|
|
"-minioutfit-" in completeprompt or
|
|
"-elaborateoutfit-" in completeprompt or
|
|
"-minivomit-" in completeprompt or
|
|
"-vomit-" in completeprompt or
|
|
"-rpgclass-" in completeprompt or
|
|
"-subjectfromfile-" in completeprompt or
|
|
"-outfitfromfile-" in completeprompt or
|
|
"-brand-" in completeprompt or
|
|
"-space-" in completeprompt or
|
|
"-artist-" in completeprompt or
|
|
"-imagetype-" in completeprompt or
|
|
"-othertype-" in completeprompt or
|
|
"-quality-" in completeprompt or
|
|
"-lighting-" in completeprompt or
|
|
"-camera-" in completeprompt or
|
|
"-lens-" in completeprompt or
|
|
"-imagetypequality-" in completeprompt or
|
|
"-poemline-" in completeprompt or
|
|
"-songline-" in completeprompt or
|
|
"-greatwork-" in completeprompt or
|
|
"-fantasyartist-" in completeprompt or
|
|
"-popularartist-" in completeprompt or
|
|
"-romanticismartist-" in completeprompt or
|
|
"-photographyartist-" in completeprompt or
|
|
"-emoji-" in completeprompt or
|
|
"-timeperiod-" in completeprompt or
|
|
"-shotsize-" in completeprompt or
|
|
"-musicgenre-" in completeprompt or
|
|
"-animaladdition-" in completeprompt or
|
|
"-addontolocationinside-" in completeprompt or
|
|
"-addontolocation-" in completeprompt or
|
|
"-objectaddition-" in completeprompt or
|
|
"-humanaddition-" in completeprompt or
|
|
"-overalladdition-" in completeprompt or
|
|
"-focus-" in completeprompt or
|
|
"-direction-" in completeprompt or
|
|
"-styletilora-" in completeprompt or
|
|
"-manwomanrelation-" in completeprompt or
|
|
"-manwomanmultiple-" in completeprompt or
|
|
"-waterlocation-" in completeprompt or
|
|
"-container-" in completeprompt or
|
|
"-firstname-" in completeprompt or
|
|
"-flora-" in completeprompt or
|
|
"-print-" in completeprompt or
|
|
"-miniactivity-" in completeprompt or
|
|
"-pattern-" in completeprompt or
|
|
"-animalsuffixaddition-" in completeprompt or
|
|
"-chair-" in completeprompt or
|
|
"-cardname-" in completeprompt or
|
|
"-covering-" in completeprompt or
|
|
"-heshe-" in completeprompt or
|
|
"-hisher-" in completeprompt or
|
|
"-himher-" in completeprompt or
|
|
"-outfitdescriptor-" in completeprompt or
|
|
"-hairdescriptor-" in completeprompt or
|
|
"-hairvomit-" in completeprompt or
|
|
"-humandescriptor-" in completeprompt or
|
|
"-facepart-" in completeprompt or
|
|
"-buildfacepart-" in completeprompt or
|
|
"-outfitvomit-" in completeprompt or
|
|
"-locationdescriptor-" in completeprompt or
|
|
"-basicbitchdescriptor-" in completeprompt or
|
|
"-animaldescriptor-" in completeprompt or
|
|
"-humanexpression-" in completeprompt or
|
|
"-humanvomit-" in completeprompt or
|
|
"-eyecolor-" in completeprompt or
|
|
"-fashiondesigner-" in completeprompt or
|
|
"-colorcombination-" in completeprompt or
|
|
"-materialcombination-" in completeprompt or
|
|
"-oppositefictional-" in completeprompt or
|
|
"-oppositenonfictional-" in completeprompt or
|
|
"-photoaddition-" in completeprompt or
|
|
"-age-" in completeprompt or
|
|
"-agecalculator-" in completeprompt or
|
|
"-gregmode-" in completeprompt or
|
|
"-portraitartist-" in completeprompt or
|
|
"-characterartist-" in completeprompt or
|
|
"-landscapeartist-" in completeprompt or
|
|
"-scifiartist-" in completeprompt or
|
|
"-graphicdesignartist-" in completeprompt or
|
|
"-digitalartist-" in completeprompt or
|
|
"-architectartist-" in completeprompt or
|
|
"-cinemaartist-" in completeprompt or
|
|
"-element-" in completeprompt or
|
|
"-setting-" in completeprompt or
|
|
"-charactertype-" in completeprompt or
|
|
"-objectstohold-" in completeprompt or
|
|
"-episodetitle-" in completeprompt or
|
|
"-token-" in completeprompt or
|
|
"-allstylessuffix-" in completeprompt or
|
|
"-fluff-" in completeprompt or
|
|
"-event-" in completeprompt or
|
|
"-background-" in completeprompt or
|
|
"-occult-" in completeprompt or
|
|
"-locationfantasy-" in completeprompt or
|
|
"-locationscifi-" in completeprompt or
|
|
"-locationvideogame-" in completeprompt or
|
|
"-locationbiome-" in completeprompt or
|
|
"-locationcity-" in completeprompt or
|
|
"-bird-" in completeprompt or
|
|
"-cat-" in completeprompt or
|
|
"-dog-" in completeprompt or
|
|
"-insect-" in completeprompt or
|
|
"-pokemon-" in completeprompt or
|
|
"-pokemontype-" in completeprompt or
|
|
"-marinelife-" in completeprompt):
|
|
allwildcardslistnohybrid = [ "-color-","-object-", "-animal-", "-fictional-","-nonfictional-","-building-","-vehicle-","-location-","-conceptprefix-","-food-","-haircolor-","-hairstyle-","-job-", "-accessory-", "-humanoid-", "-manwoman-", "-human-", "-colorscheme-", "-mood-", "-genderdescription-", "-artmovement-", "-malefemale-", "-bodytype-", "-minilocation-", "-minilocationaddition-", "-pose-", "-season-", "-minioutfit-", "-elaborateoutfit-", "-minivomit-", "-vomit-", "-rpgclass-", "-subjectfromfile-","-outfitfromfile-", "-brand-", "-space-", "-artist-", "-imagetype-", "-othertype-", "-quality-", "-lighting-", "-camera-", "-lens-","-imagetypequality-", "-poemline-", "-songline-", "-greatwork-", "-fantasyartist-", "-popularartist-", "-romanticismartist-", "-photographyartist-", "-emoji-", "-timeperiod-", "-shotsize-", "-musicgenre-", "-animaladdition-", "-addontolocationinside-", "-addontolocation-", "-objectaddition-", "-humanaddition-", "-overalladdition-", "-focus-", "-direction-", "-styletilora-", "-manwomanrelation-", "-waterlocation-", "-container-", "-firstname-", "-flora-", "-print-", "-miniactivity-", "-pattern-", "-animalsuffixaddition-", "-chair-", "-cardname-", "-covering-", "-heshe-", "-hisher-", "-himher-", "-outfitdescriptor-", "-hairdescriptor-", "-hairvomit-", "-humandescriptor-", "-manwomanmultiple-", "-facepart-", "-buildfacepart-", "-outfitvomit-", "-locationdescriptor-", "-basicbitchdescriptor-", "-animaldescriptor-", "-humanexpression-", "-humanvomit-", "-eyecolor-", "-fashiondesigner-", "-colorcombination-", "-materialcombination-", "-oppositefictional-", "-oppositenonfictional-", "-photoaddition-", "-age-", "-agecalculator-", "-gregmode-"
|
|
,"-portraitartist-", "-characterartist-" , "-landscapeartist-", "-scifiartist-", "-graphicdesignartist-", "-digitalartist-", "-architectartist-", "-cinemaartist-", "-setting-", "-charactertype-", "-objectstohold-", "-episodetitle-", "-token-", "-allstylessuffix-", "-fluff-", "-event-", "-background-"
|
|
, "-occult-", "-locationfantasy-", "-locationscifi-", "-locationvideogame-", "-locationbiome-", "-locationcity-", "-bird-", "-cat-", "-dog-", "-insect-", "-pokemon-", "-pokemontype-", "-marinelife-"]
|
|
allwildcardslistnohybridlists = [colorlist, objectlist, animallist, fictionallist, nonfictionallist, buildinglist, vehiclelist, locationlist,conceptprefixlist,foodlist,haircolorlist, hairstylelist,joblist, accessorielist, humanoidlist, manwomanlist, humanlist, colorschemelist, moodlist, genderdescriptionlist, artmovementlist, malefemalelist, bodytypelist, minilocationlist, minilocationadditionslist, poselist, seasonlist, minioutfitlist, elaborateoutfitlist, minivomitlist, vomitlist, rpgclasslist, customsubjectslist, customoutfitslist, brandlist, spacelist, artistlist, imagetypelist, othertypelist, qualitylist, lightinglist, cameralist, lenslist, imagetypequalitylist, poemlinelist, songlinelist, greatworklist, fantasyartistlist, popularartistlist, romanticismartistlist, photographyartistlist, emojilist, timeperiodlist, shotsizelist, musicgenrelist, animaladditionlist, addontolocationinsidelist, addontolocationlist, objectadditionslist, humanadditionlist, overalladditionlist, focuslist, directionlist, stylestiloralist, manwomanrelationlist, waterlocationlist, containerlist, firstnamelist, floralist, printlist, miniactivitylist, patternlist, animalsuffixadditionlist, chairlist, cardnamelist, coveringlist, heshelist, hisherlist, himherlist, outfitdescriptorlist, hairdescriptorlist, hairvomitlist, humandescriptorlist, manwomanmultiplelist, facepartlist, buildfacepartlist, outfitvomitlist, locationdescriptorlist, basicbitchdescriptorlist, animaldescriptorlist, humanexpressionlist, humanvomitlist, eyecolorlist, fashiondesignerlist, colorcombinationlist, materialcombinationlist, oppositefictionallist, oppositenonfictionallist, photoadditionlist, agelist, agecalculatorlist, gregmodelist
|
|
, portraitartistlist, characterartistlist, landscapeartistlist, scifiartistlist, graphicdesignartistlist, digitalartistlist, architectartistlist, cinemaartistlist, settinglist, charactertypelist, objectstoholdlist, episodetitlelist, tokenlist, allstylessuffixlist, flufferlist, eventlist, backgroundlist
|
|
, occultlist, locationfantasylist, locationscifilist, locationvideogamelist, locationbiomelist, locationcitylist, birdlist, catlist, doglist, insectlist, pokemonlist, pokemontypelist, marinelifelist]
|
|
|
|
allwildcardslistwithhybrid = ["-material-", "-descriptor-", "-outfit-", "-conceptsuffix-","-culture-", "-objecttotal-", "-outfitprinttotal-", "-element-"]
|
|
allwildcardslistwithhybridlists = [materiallist, descriptorlist,outfitlist,conceptsuffixlist,culturelist, objecttotallist, outfitprinttotallist, elementlist]
|
|
|
|
|
|
# keywordsinstring = any(word.lower() in givensubject.lower() for word in keywordslist)
|
|
for wildcard in allwildcardslistnohybrid:
|
|
attachedlist = allwildcardslistnohybridlists[allwildcardslistnohybrid.index(wildcard)]
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, wildcard, attachedlist,False, advancedprompting, artiststyleselector)
|
|
|
|
|
|
|
|
for wildcard in allwildcardslistwithhybrid:
|
|
attachedlist = allwildcardslistwithhybridlists[allwildcardslistwithhybrid.index(wildcard)]
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, wildcard, attachedlist,True, advancedprompting, artiststyleselector)
|
|
|
|
|
|
completeprompt = replace_user_wildcards(completeprompt)
|
|
# prompt strenght stuff
|
|
|
|
# if the given subject already is formed like this ( :1.x)
|
|
# then just ignore this
|
|
|
|
matches = []
|
|
if(givensubject != ""):
|
|
pattern = r'\(\w+:\d+\.\d+\)'
|
|
matches = re.findall(pattern, givensubject)
|
|
|
|
|
|
if(len(completeprompt) > 325 and matches == [] and remove_weights == False):
|
|
if(len(completeprompt) < 375):
|
|
strenght = "1.1"
|
|
elif(len(completeprompt) < 450):
|
|
strenght = "1.2"
|
|
else:
|
|
strenght = "1.3"
|
|
completeprompt = completeprompt.replace("-objectstrengthstart-","(")
|
|
completeprompt = completeprompt.replace("-objectstrengthend-",":" + strenght + ")")
|
|
else:
|
|
completeprompt = completeprompt.replace("-objectstrengthstart-","")
|
|
completeprompt = completeprompt.replace("-objectstrengthend-","")
|
|
|
|
|
|
# Now, we are going to parse any custom functions we have build in
|
|
# this is OR()
|
|
# OR()
|
|
|
|
# OR(foo;bar;bla) --> randomly take foo, bar or bla
|
|
# OR(foo;bar;bla;uncommon) --> Take foo, unless it hits uncommon roll. Then take bar or bla
|
|
# OR(;foo) --> empty or foo
|
|
# OR(;foo;uncommon) --> empty unless it hits uncommon roll. Then take foo
|
|
# OR(;foo;bar;uncommon) --> empty unless it hits uncommon roll. Then take foo or bar
|
|
|
|
|
|
completeprompt = parse_custom_functions(completeprompt, insanitylevel)
|
|
|
|
# prompt enhancer!
|
|
if(templatemode == False and specialmode == False and base_model != "Stable Cascade"):
|
|
# how insane do we want it?
|
|
|
|
maxamountofwords = max(0, -1 + random.randint(0,4),6 - insanitylevel)
|
|
amountofwords = random.randint(0,maxamountofwords)
|
|
|
|
if(amountofwords > 0):
|
|
enhance_positive_words = enhance_positive(completeprompt, amountofwords)
|
|
completeprompt = completeprompt.replace("-tempnewwords-", enhance_positive_words)
|
|
completeprompt = completeprompt.replace("-tempnewwords-", "")
|
|
|
|
# clean it up
|
|
completeprompt = cleanup(completeprompt, advancedprompting, insanitylevel)
|
|
|
|
# Split it up for support for prompt_g (subject) and prompt_l (style)
|
|
if("@@@" in completeprompt and prompt_g_and_l == True):
|
|
promptlist = completeprompt.split("@@@")
|
|
prompt_g = cleanup(promptlist[1], advancedprompting, insanitylevel)
|
|
prompt_l = cleanup((promptlist[0] + ", " + promptlist[2]).replace("of a",""), advancedprompting, insanitylevel)
|
|
if("@@@" in completeprompt and superprompter == True):
|
|
#load_models()
|
|
promptlist = completeprompt.split("@@@")
|
|
subjectprompt = cleanup(promptlist[1], advancedprompting, insanitylevel)
|
|
startprompt = cleanup(promptlist[0], advancedprompting, insanitylevel)
|
|
endprompt = cleanup(promptlist[2], advancedprompting, insanitylevel)
|
|
superpromptresult = one_button_superprompt(insanitylevel=insanitylevel, prompt=subjectprompt, seed=seed, override_subject=givensubject, override_outfit=overrideoutfit, chosensubject=subjectchooser, gender=gender, restofprompt = startprompt + endprompt)
|
|
completeprompt = startprompt + ", " + superpromptresult + ", " + endprompt
|
|
prompt_g = superpromptresult
|
|
prompt_l = startprompt + endprompt
|
|
elif(prompt_g_and_l == False):
|
|
prompt_g = completeprompt
|
|
prompt_l = completeprompt
|
|
|
|
completeprompt = completeprompt.replace(" @@@ ", " ")
|
|
completeprompt = completeprompt.replace("@@@ ", " ")
|
|
completeprompt = completeprompt.replace(" @@@", " ")
|
|
completeprompt = completeprompt.replace("@@@", " ")
|
|
completeprompt = cleanup(completeprompt, advancedprompting, insanitylevel)
|
|
|
|
#just for me, some fun with posting fake dev messages (ala old sim games)
|
|
if(random.randint(1, 50)==1):
|
|
print("")
|
|
print(random.choice(devmessagelist))
|
|
print("")
|
|
|
|
print(completeprompt) # keep this! :D
|
|
|
|
if(prompt_g_and_l == False):
|
|
return completeprompt
|
|
else:
|
|
return completeprompt, prompt_g, prompt_l
|
|
|
|
|
|
# function that takes an existing prompt and tries to create a variant out of it
|
|
def createpromptvariant(prompt = "", insanitylevel = 5, antivalues = "" , gender = "all", artists = "all", advancedprompting = True):
|
|
# first load the lists, all copied from above (can that be done better?)
|
|
# do we want to use the same settings or keep it open??
|
|
|
|
# strip the prompt, for EVO in ruinedfooocus:
|
|
prompt = prompt.strip()
|
|
|
|
# first build up a complete anti list. Those values are removing during list building
|
|
# this uses the antivalues string AND the antilist.csv
|
|
emptylist = []
|
|
antilist = csv_to_list("antilist",emptylist , "./userfiles/",1)
|
|
antivaluelist = antivalues.split(",")
|
|
|
|
antilist += antivaluelist
|
|
|
|
# build all lists here
|
|
|
|
colorlist = csv_to_list("colors",antilist)
|
|
animallist = csv_to_list("animals",antilist)
|
|
materiallist = csv_to_list("materials",antilist)
|
|
objectlist = csv_to_list("objects",antilist)
|
|
fictionallist = csv_to_list(csvfilename="fictional characters",antilist=antilist,skipheader=True,gender=gender)
|
|
nonfictionallist = csv_to_list(csvfilename="nonfictional characters",antilist=antilist,skipheader=True,gender=gender)
|
|
conceptsuffixlist = csv_to_list("concept_suffix",antilist)
|
|
buildinglist = csv_to_list("buildings",antilist)
|
|
vehiclelist = csv_to_list("vehicles",antilist)
|
|
outfitlist = csv_to_list("outfits",antilist)
|
|
locationlist = csv_to_list("locations",antilist)
|
|
backgroundlist = csv_to_list("backgrounds",antilist)
|
|
locationlist = locationlist + backgroundlist
|
|
|
|
accessorielist = csv_to_list("accessories",antilist,"./csvfiles/",0,"?")
|
|
artmovementlist = csv_to_list("artmovements",antilist)
|
|
bodytypelist = csv_to_list("body_types",antilist)
|
|
cameralist = csv_to_list("cameras",antilist)
|
|
colorschemelist = csv_to_list("colorscheme",antilist)
|
|
conceptprefixlist = csv_to_list("concept_prefix",antilist)
|
|
culturelist = csv_to_list("cultures",antilist)
|
|
descriptorlist = csv_to_list("descriptors",antilist)
|
|
devmessagelist = csv_to_list("devmessages",antilist)
|
|
directionlist = csv_to_list("directions",antilist)
|
|
emojilist = csv_to_list("emojis",antilist)
|
|
eventlist = csv_to_list("events",antilist)
|
|
focuslist = csv_to_list("focus",antilist)
|
|
greatworklist = csv_to_list("greatworks",antilist)
|
|
haircolorlist = csv_to_list("haircolors",antilist)
|
|
hairstylelist = csv_to_list("hairstyles",antilist)
|
|
hairvomitlist = csv_to_list("hairvomit",antilist,"./csvfiles/",0,"?",False,False)
|
|
humanactivitylist = csv_to_list("human_activities",antilist,"./csvfiles/",0,"?",False,False)
|
|
humanoidlist = csv_to_list("humanoids",antilist)
|
|
imagetypelist = csv_to_list("imagetypes",antilist)
|
|
joblist = joblist = csv_to_list(csvfilename="jobs",antilist=antilist,skipheader=True,gender=gender)
|
|
lenslist = csv_to_list("lenses",antilist)
|
|
lightinglist = csv_to_list("lighting",antilist)
|
|
malefemalelist = csv_to_list(csvfilename="malefemale",antilist=antilist,skipheader=True,gender=gender)
|
|
manwomanlist = csv_to_list(csvfilename="manwoman",antilist=antilist,skipheader=True,gender=gender)
|
|
moodlist = csv_to_list("moods",antilist)
|
|
othertypelist = csv_to_list("othertypes",antilist)
|
|
poselist = csv_to_list("poses",antilist)
|
|
qualitylist = csv_to_list("quality",antilist)
|
|
shotsizelist = csv_to_list("shotsizes",antilist)
|
|
timeperiodlist = csv_to_list("timeperiods",antilist)
|
|
vomitlist = csv_to_list("vomit",antilist)
|
|
foodlist = csv_to_list("foods", antilist)
|
|
genderdescriptionlist = csv_to_list(csvfilename="genderdescription",antilist=antilist,skipheader=True,gender=gender)
|
|
minilocationlist = csv_to_list("minilocations", antilist)
|
|
minioutfitlist = csv_to_list("minioutfits",antilist,"./csvfiles/",0,"?",False,False,gender)
|
|
seasonlist = csv_to_list("seasons", antilist)
|
|
elaborateoutfitlist = csv_to_list("elaborateoutfits", antilist)
|
|
minivomitlist = csv_to_list("minivomit", antilist)
|
|
imagetypequalitylist = csv_to_list("imagetypequality", antilist)
|
|
rpgclasslist = csv_to_list("rpgclasses", antilist)
|
|
brandlist = csv_to_list("brands", antilist)
|
|
spacelist = csv_to_list("space", antilist)
|
|
poemlinelist = csv_to_list("poemlines", antilist)
|
|
songlinelist = csv_to_list("songlines", antilist)
|
|
musicgenrelist = csv_to_list("musicgenres", antilist)
|
|
manwomanrelationlist = csv_to_list(csvfilename="manwomanrelations",antilist=antilist,skipheader=True,gender=gender)
|
|
manwomanmultiplelist = csv_to_list(csvfilename="manwomanmultiples",antilist=antilist,skipheader=True,gender=gender,delimiter="?")
|
|
waterlocationlist = csv_to_list("waterlocations", antilist)
|
|
containerlist = csv_to_list("containers", antilist)
|
|
firstnamelist = csv_to_list(csvfilename="firstnames",antilist=antilist,skipheader=True,gender=gender)
|
|
floralist = csv_to_list("flora", antilist)
|
|
printlist = csv_to_list("prints", antilist)
|
|
patternlist = csv_to_list("patterns", antilist)
|
|
chairlist = csv_to_list("chairs", antilist)
|
|
cardnamelist = csv_to_list("card_names", antilist)
|
|
coveringlist = csv_to_list("coverings", antilist)
|
|
facepartlist = csv_to_list("faceparts", antilist)
|
|
humanexpressionlist = csv_to_list(csvfilename="humanexpressions",antilist=antilist,delimiter="?")
|
|
humanvomitlist = csv_to_list("humanvomit", antilist)
|
|
eyecolorlist = csv_to_list("eyecolors", antilist)
|
|
fashiondesignerlist = csv_to_list("fashiondesigners", antilist)
|
|
colorcombinationlist = csv_to_list("colorcombinations", antilist)
|
|
materialcombinationlist = csv_to_list("materialcombinations", antilist)
|
|
agelist = csv_to_list("ages", antilist)
|
|
agecalculatorlist = csv_to_list("agecalculator", antilist)
|
|
elementlist = csv_to_list("elements", antilist)
|
|
settinglist = csv_to_list("settings", antilist)
|
|
charactertypelist = csv_to_list("charactertypes", antilist)
|
|
objectstoholdlist = csv_to_list("objectstohold", antilist)
|
|
episodetitlelist = csv_to_list(csvfilename="episodetitles",antilist=antilist,skipheader=True)
|
|
flufferlist = csv_to_list("fluff", antilist)
|
|
|
|
outfitdescriptorlist = csv_to_list("outfitdescriptors",antilist)
|
|
hairdescriptorlist = csv_to_list("hairdescriptors",antilist)
|
|
humandescriptorlist = csv_to_list("humandescriptors",antilist)
|
|
locationdescriptorlist = csv_to_list("locationdescriptors",antilist)
|
|
basicbitchdescriptorlist = csv_to_list("basicbitchdescriptors",antilist)
|
|
animaldescriptorlist = csv_to_list("animaldescriptors",antilist)
|
|
|
|
humanlist = fictionallist + nonfictionallist + humanoidlist + malefemalelist + manwomanlist + manwomanrelationlist + manwomanmultiplelist
|
|
objecttotallist = objectlist + buildinglist + vehiclelist + foodlist + spacelist + floralist + containerlist
|
|
outfitprinttotallist = objecttotallist + locationlist + colorlist + musicgenrelist + seasonlist + animallist + patternlist
|
|
|
|
styleslist = csv_to_list("styles", antilist,"./csvfiles/templates/",0,"?")
|
|
stylessuffix = [item.split('-subject-')[1] for item in styleslist]
|
|
breakstylessuffix = [item.split(',') for item in stylessuffix]
|
|
allstylessuffixlist = [value for sublist in breakstylessuffix for value in sublist]
|
|
allstylessuffixlist = list(set(allstylessuffixlist))
|
|
|
|
# build artists list
|
|
if artists == "wild":
|
|
artists = "all (wild)"
|
|
artistlist = []
|
|
# create artist list to use in the code, maybe based on category or personal lists
|
|
if(artists != "all" and artists != "none" and artists.startswith("personal_artists") == False and artists.startswith("personal artists") == False):
|
|
artistlist = artist_category_csv_to_list("artists_and_category",artists)
|
|
elif(artists.startswith("personal_artists") == True or artists.startswith("personal artists") == True):
|
|
artists = artists.replace(" ","_",-1) # add underscores back in
|
|
artistlist = csv_to_list(artists,antilist,"./userfiles/")
|
|
elif(artists != "none"):
|
|
artistlist = csv_to_list("artists",antilist)
|
|
|
|
# create special artists lists, used in templates
|
|
fantasyartistlist = artist_category_csv_to_list("artists_and_category","fantasy")
|
|
popularartistlist = artist_category_csv_to_list("artists_and_category","popular")
|
|
romanticismartistlist = artist_category_csv_to_list("artists_and_category","romanticism")
|
|
photographyartistlist = artist_category_csv_to_list("artists_and_category","photography")
|
|
portraitartistlist = artist_category_csv_to_list("artists_and_category","portrait")
|
|
characterartistlist = artist_category_csv_to_list("artists_and_category","character")
|
|
landscapeartistlist = artist_category_csv_to_list("artists_and_category","landscape")
|
|
scifiartistlist = artist_category_csv_to_list("artists_and_category","sci-fi")
|
|
graphicdesignartistlist = artist_category_csv_to_list("artists_and_category","graphic design")
|
|
digitalartistlist = artist_category_csv_to_list("artists_and_category","digital")
|
|
architectartistlist = artist_category_csv_to_list("artists_and_category","architecture")
|
|
cinemaartistlist = artist_category_csv_to_list("artists_and_category","cinema")
|
|
gregmodelist = csv_to_list("gregmode", antilist)
|
|
|
|
|
|
# New set of lists
|
|
locationfantasylist = csv_to_list("locationsfantasy", antilist)
|
|
locationscifilist = csv_to_list("locationsscifi", antilist)
|
|
locationvideogamelist = csv_to_list("locationsvideogame", antilist)
|
|
locationbiomelist = csv_to_list("locationsbiome", antilist)
|
|
locationcitylist = csv_to_list("locationscities", antilist)
|
|
birdlist = csv_to_list("birds", antilist)
|
|
catlist = csv_to_list("cats", antilist)
|
|
doglist = csv_to_list("dogs", antilist)
|
|
insectlist = csv_to_list("insects", antilist)
|
|
pokemonlist = csv_to_list("pokemon", antilist)
|
|
pokemontypelist = csv_to_list("pokemontypes", antilist)
|
|
occultlist = csv_to_list("occult", antilist)
|
|
marinelifelist = csv_to_list("marinelife", antilist)
|
|
|
|
# add any other custom lists
|
|
stylestiloralist = csv_to_list("styles_ti_lora",antilist,"./userfiles/")
|
|
generatestyle = bool(stylestiloralist) # True of not empty
|
|
|
|
custominputprefixlist = csv_to_list("custom_input_prefix",antilist,"./userfiles/")
|
|
generatecustominputprefix = bool(custominputprefixlist) # True of not empty
|
|
|
|
custominputmidlist = csv_to_list("custom_input_mid",antilist,"./userfiles/")
|
|
generatecustominputmid = bool(custominputmidlist) # True of not empty
|
|
|
|
custominputsuffixlist = csv_to_list("custom_input_suffix",antilist,"./userfiles/")
|
|
generatecustominputsuffix = bool(custominputsuffixlist) # True of not empty
|
|
|
|
customsubjectslist = csv_to_list("custom_subjects",antilist,"./userfiles/")
|
|
customoutfitslist = csv_to_list("custom_outfits",antilist,"./userfiles/")
|
|
|
|
# special lists
|
|
backgroundtypelist = csv_to_list("backgroundtypes", antilist,"./csvfiles/special_lists/",0,"?")
|
|
insideshotlist = csv_to_list("insideshots", antilist,"./csvfiles/special_lists/",0,"?")
|
|
photoadditionlist = csv_to_list("photoadditions", antilist,"./csvfiles/special_lists/",0,"?")
|
|
buildhairlist = csv_to_list("buildhair", antilist,"./csvfiles/special_lists/",0,"?")
|
|
buildoutfitlist = csv_to_list("buildoutfit", antilist,"./csvfiles/special_lists/",0,"?")
|
|
objectadditionslist = csv_to_list("objectadditions", antilist,"./csvfiles/special_lists/",0,"?")
|
|
humanadditionlist = csv_to_list("humanadditions", antilist,"./csvfiles/special_lists/",0,"?")
|
|
animaladditionlist = csv_to_list("animaladditions", antilist,"./csvfiles/special_lists/",0,"?")
|
|
buildaccessorielist = csv_to_list("buildaccessorie", antilist,"./csvfiles/special_lists/",0,"?")
|
|
minilocationadditionslist = csv_to_list("minilocationadditions", antilist,"./csvfiles/special_lists/",0,"?")
|
|
overalladditionlist = csv_to_list("overalladditions", antilist,"./csvfiles/special_lists/",0,"?")
|
|
imagetypemodelist = csv_to_list("imagetypemodes", antilist,"./csvfiles/special_lists/",0,"?")
|
|
miniactivitylist = csv_to_list("miniactivity", antilist,"./csvfiles/special_lists/",0,"?")
|
|
|
|
|
|
prompt = prompt.replace(",", " , ")
|
|
prompt = prompt.replace("(", " ( ")
|
|
prompt = prompt.replace(")", " ) ")
|
|
prompt = prompt.replace("[", " [ ")
|
|
prompt = prompt.replace("]", " ] ")
|
|
prompt = prompt.replace("|", " | ")
|
|
prompt = prompt.replace(":", " : ")
|
|
|
|
prompt = " " + prompt
|
|
# store the (sort of) original prompt
|
|
originalprompt = prompt
|
|
originaloriginalprompt = prompt
|
|
|
|
basicenhance = ", OR(-vomit-;-imagetype-;-basicbitchdescriptor-;-mood-;-lighting-;-descriptor-), "
|
|
|
|
### Get all combinations of 1 to 4 consecutive words
|
|
|
|
|
|
words = prompt.split()
|
|
num_words = len(words)
|
|
if(num_words < 15 and common_dist(insanitylevel)):
|
|
# add some random words maybe?
|
|
if(common_dist(insanitylevel)):
|
|
|
|
if(random.randint(0,1)== 0):
|
|
prompt += basicenhance
|
|
else:
|
|
prompt = basicenhance + prompt
|
|
if(common_dist(insanitylevel)):
|
|
prompt += basicenhance
|
|
prompt = parse_custom_functions(prompt, insanitylevel)
|
|
|
|
# then add some enhanced words
|
|
amountofwords = random.randint(0,3)
|
|
if(amountofwords > 0):
|
|
enhance_positive_words = enhance_positive(prompt, amountofwords)
|
|
prompt += enhance_positive_words
|
|
|
|
|
|
originalprompt = prompt
|
|
|
|
combinations_list = []
|
|
|
|
for length in range(1, 5): # Generate combinations of length 1 to 4
|
|
for start_idx in range(num_words - length + 1):
|
|
end_idx = start_idx + length
|
|
combination = ' '.join(words[start_idx:end_idx])
|
|
combinations_list.append(combination)
|
|
|
|
maxamountofruns = 4
|
|
runs = 0
|
|
|
|
if(insanitylevel != 0):
|
|
print("")
|
|
print("Creating a prompt variation")
|
|
print("")
|
|
while(originalprompt == prompt and runs != maxamountofruns):
|
|
for combination in combinations_list:
|
|
lowercase_combination = combination.lower()
|
|
combination = " " + combination + " "
|
|
|
|
# some rare changes if needed
|
|
if lowercase_combination in [x.lower() for x in humanlist] and chance_roll(insanitylevel, "rare"):
|
|
prompt = prompt.replace(combination," -human- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in objecttotallist] and chance_roll(insanitylevel, "rare"):
|
|
prompt = prompt.replace(combination," -objecttotal- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in artistlist] and chance_roll(insanitylevel, "rare"):
|
|
prompt = prompt.replace(combination," -artist- ")
|
|
|
|
|
|
if lowercase_combination in [x.lower() for x in colorlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -color- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in animallist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -animal- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in objectlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -object- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in fictionallist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -fictional- ")
|
|
|
|
|
|
if lowercase_combination in [x.lower() for x in nonfictionallist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -nonfictional- ")
|
|
|
|
|
|
#if lowercase_combination in [x.lower() for x in conceptsuffixlist] and chance_roll(insanitylevel, "uncommon"):
|
|
# prompt = prompt.replace(combination," -conceptsuffix- ")
|
|
|
|
|
|
if lowercase_combination in [x.lower() for x in buildinglist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -building- ")
|
|
|
|
|
|
if lowercase_combination in [x.lower() for x in vehiclelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -vehicle- ")
|
|
|
|
|
|
if lowercase_combination in [x.lower() for x in outfitlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -outfit- ")
|
|
|
|
|
|
if lowercase_combination in [x.lower() for x in locationlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -location- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in backgroundlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -background- ")
|
|
|
|
|
|
if lowercase_combination in [x.lower() for x in accessorielist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -accessory- ")
|
|
|
|
|
|
if lowercase_combination in [x.lower() for x in artmovementlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -artmovement- ")
|
|
|
|
|
|
if lowercase_combination in [x.lower() for x in bodytypelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -bodytype- ")
|
|
|
|
|
|
if lowercase_combination in [x.lower() for x in cameralist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -camera- ")
|
|
|
|
|
|
if lowercase_combination in [x.lower() for x in colorschemelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -colorscheme- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in eyecolorlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -eyecolor- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in fashiondesignerlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -fashiondesigner- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in colorcombinationlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -colorcombination- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in materialcombinationlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -materialcombination- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in photoadditionlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -photoaddition- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in agelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -age- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in agecalculatorlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -agecalculator- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in gregmodelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -gregmode- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in elementlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -element- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in settinglist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -setting- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in charactertypelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -charactertype- ")
|
|
if lowercase_combination in [x.lower() for x in objectstoholdlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -objectstohold- ")
|
|
if lowercase_combination in [x.lower() for x in episodetitlelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -episodetitle- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in flufferlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -fluff- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in occultlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -occult- ")
|
|
if lowercase_combination in [x.lower() for x in locationfantasylist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -locationfantasy- ")
|
|
if lowercase_combination in [x.lower() for x in locationscifilist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -locationscifi- ")
|
|
if lowercase_combination in [x.lower() for x in locationvideogamelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -locationvideogame- ")
|
|
if lowercase_combination in [x.lower() for x in locationbiomelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -locationbiome- ")
|
|
if lowercase_combination in [x.lower() for x in locationcitylist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -locationcity- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in birdlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -bird- ")
|
|
if lowercase_combination in [x.lower() for x in catlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -cat- ")
|
|
if lowercase_combination in [x.lower() for x in doglist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -dog- ")
|
|
if lowercase_combination in [x.lower() for x in insectlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -insect- ")
|
|
if lowercase_combination in [x.lower() for x in pokemonlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -pokemon- ")
|
|
if lowercase_combination in [x.lower() for x in marinelifelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -marinelife- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in pokemontypelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -pokemontype- ")
|
|
|
|
#if lowercase_combination in [x.lower() for x in conceptprefixlist] and chance_roll(insanitylevel, "uncommon"):
|
|
# prompt = prompt.replace(combination," -conceptprefix- ")
|
|
|
|
|
|
if lowercase_combination in [x.lower() for x in culturelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -culture- ")
|
|
|
|
|
|
if lowercase_combination in [x.lower() for x in descriptorlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -descriptor- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in outfitdescriptorlist] and chance_roll(insanitylevel, "rare"):
|
|
prompt = prompt.replace(combination," -outfitdescriptor- ")
|
|
if lowercase_combination in [x.lower() for x in hairdescriptorlist] and chance_roll(insanitylevel, "rare"):
|
|
prompt = prompt.replace(combination," -hairdescriptor- ")
|
|
if lowercase_combination in [x.lower() for x in hairvomitlist] and chance_roll(insanitylevel, "rare"):
|
|
prompt = prompt.replace(combination," -hairvomit- ")
|
|
if lowercase_combination in [x.lower() for x in humandescriptorlist] and chance_roll(insanitylevel, "rare"):
|
|
prompt = prompt.replace(combination," -humandescriptor- ")
|
|
if lowercase_combination in [x.lower() for x in locationdescriptorlist] and chance_roll(insanitylevel, "rare"):
|
|
prompt = prompt.replace(combination," -locationdescriptor- ")
|
|
if lowercase_combination in [x.lower() for x in basicbitchdescriptorlist] and chance_roll(insanitylevel, "rare"):
|
|
prompt = prompt.replace(combination," -basicbitchdescriptor- ")
|
|
if lowercase_combination in [x.lower() for x in animaldescriptorlist] and chance_roll(insanitylevel, "rare"):
|
|
prompt = prompt.replace(combination," -animaldescriptor- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in directionlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -direction- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in emojilist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -emoji- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in humanexpressionlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -humanexpression- ")
|
|
if lowercase_combination in [x.lower() for x in humanvomitlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -humanvomit- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in eventlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -event- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in focuslist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -focus- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in greatworklist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -greatwork- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in haircolorlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -haircolor- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in hairstylelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -hairstyle- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in directionlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -direction- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in humanoidlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -humanoid- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in joblist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -job- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in lenslist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -lens- ")
|
|
if lowercase_combination in [x.lower() for x in lightinglist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -lighting- ")
|
|
if lowercase_combination in [x.lower() for x in malefemalelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -malefemale- ")
|
|
if lowercase_combination in [x.lower() for x in manwomanlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -manwoman- ")
|
|
if lowercase_combination in [x.lower() for x in moodlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -mood- ")
|
|
if lowercase_combination in [x.lower() for x in othertypelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -othertype- ")
|
|
if lowercase_combination in [x.lower() for x in poselist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -pose- ")
|
|
if lowercase_combination in [x.lower() for x in qualitylist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -quality- ")
|
|
if lowercase_combination in [x.lower() for x in shotsizelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -shotsize- ")
|
|
if lowercase_combination in [x.lower() for x in timeperiodlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -timeperiod- ")
|
|
if lowercase_combination in [x.lower() for x in vomitlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -vomit- ")
|
|
if lowercase_combination in [x.lower() for x in foodlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -food- ")
|
|
if lowercase_combination in [x.lower() for x in genderdescriptionlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -genderdescription- ")
|
|
if lowercase_combination in [x.lower() for x in minilocationlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -minilocation- ")
|
|
if lowercase_combination in [x.lower() for x in minioutfitlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -minioutfit- ")
|
|
if lowercase_combination in [x.lower() for x in lenslist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -lens- ")
|
|
if lowercase_combination in [x.lower() for x in seasonlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -season- ")
|
|
if lowercase_combination in [x.lower() for x in imagetypequalitylist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -imagetypequality- ")
|
|
if lowercase_combination in [x.lower() for x in rpgclasslist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -rpgclass- ")
|
|
if lowercase_combination in [x.lower() for x in brandlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -brand- ")
|
|
if lowercase_combination in [x.lower() for x in spacelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -space- ")
|
|
if lowercase_combination in [x.lower() for x in poemlinelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -poemline- ")
|
|
if lowercase_combination in [x.lower() for x in songlinelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -songline- ")
|
|
if lowercase_combination in [x.lower() for x in musicgenrelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -musicgenre- ")
|
|
if lowercase_combination in [x.lower() for x in manwomanrelationlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -manwomanrelation- ")
|
|
if lowercase_combination in [x.lower() for x in manwomanmultiplelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -manwomanmultiple- ")
|
|
if lowercase_combination in [x.lower() for x in waterlocationlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -waterlocation- ")
|
|
if lowercase_combination in [x.lower() for x in containerlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -container- ")
|
|
if lowercase_combination in [x.lower() for x in firstnamelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -firstname- ")
|
|
if lowercase_combination in [x.lower() for x in floralist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -flora- ")
|
|
if lowercase_combination in [x.lower() for x in printlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -print- ")
|
|
if lowercase_combination in [x.lower() for x in miniactivitylist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -miniactivity- ")
|
|
if lowercase_combination in [x.lower() for x in patternlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -pattern- ")
|
|
if lowercase_combination in [x.lower() for x in chairlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -chair- ")
|
|
if lowercase_combination in [x.lower() for x in cardnamelist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -cardname- ")
|
|
if lowercase_combination in [x.lower() for x in coveringlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -covering- ")
|
|
if lowercase_combination in [x.lower() for x in facepartlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -facepart- ")
|
|
|
|
|
|
if lowercase_combination in [x.lower() for x in fantasyartistlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -fantasyartist- ")
|
|
if lowercase_combination in [x.lower() for x in popularartistlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -popularartist- ")
|
|
if lowercase_combination in [x.lower() for x in romanticismartistlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -romanticismartist- ")
|
|
if lowercase_combination in [x.lower() for x in photographyartistlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -photographyartist- ")
|
|
if lowercase_combination in [x.lower() for x in portraitartistlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -portraitartist- ")
|
|
if lowercase_combination in [x.lower() for x in characterartistlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -characterartist- ")
|
|
if lowercase_combination in [x.lower() for x in landscapeartistlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -landscapeartist- ")
|
|
if lowercase_combination in [x.lower() for x in scifiartistlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -scifiartist- ")
|
|
if lowercase_combination in [x.lower() for x in graphicdesignartistlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -graphicdesignartist- ")
|
|
if lowercase_combination in [x.lower() for x in architectartistlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -architectartist- ")
|
|
if lowercase_combination in [x.lower() for x in cinemaartistlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -cinemaartist- ")
|
|
|
|
|
|
if lowercase_combination in [x.lower() for x in stylestiloralist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -styletilora- ")
|
|
if lowercase_combination in [x.lower() for x in waterlocationlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -waterlocation- ")
|
|
|
|
if lowercase_combination in [x.lower() for x in allstylessuffixlist] and chance_roll(insanitylevel, "uncommon"):
|
|
prompt = prompt.replace(combination," -allstylessuffix- ")
|
|
|
|
runs += 1
|
|
|
|
# If nothing changed... Lets do at least something
|
|
if(prompt.lower().strip() == originaloriginalprompt.lower().strip()):
|
|
if(random.randint(0,1)==0):
|
|
prompt += basicenhance
|
|
else:
|
|
prompt = basicenhance + ", " + prompt
|
|
|
|
if(chance_roll(insanitylevel, "common")):
|
|
prompt += basicenhance
|
|
|
|
if(chance_roll(insanitylevel, "common")):
|
|
enhance_positive_words = enhance_positive(prompt, 1)
|
|
prompt += enhance_positive_words
|
|
|
|
prompt = parse_custom_functions(prompt, insanitylevel)
|
|
|
|
|
|
prompt = prompt.replace(" :", ":")
|
|
prompt = prompt.replace(": ", ":")
|
|
|
|
completeprompt = prompt
|
|
|
|
|
|
while (
|
|
"-color-" in completeprompt or
|
|
"-material-" in completeprompt or
|
|
"-animal-" in completeprompt or
|
|
"-object-" in completeprompt or
|
|
"-fictional-" in completeprompt or
|
|
"-nonfictional-" in completeprompt or
|
|
"-conceptsuffix-" in completeprompt or
|
|
"-building-" in completeprompt or
|
|
"-vehicle-" in completeprompt or
|
|
"-outfit-" in completeprompt or
|
|
"-location-" in completeprompt or
|
|
"-conceptprefix-" in completeprompt or
|
|
"-descriptor-" in completeprompt or
|
|
"-food-" in completeprompt or
|
|
"-haircolor-" in completeprompt or
|
|
"-hairstyle-" in completeprompt or
|
|
"-job-" in completeprompt or
|
|
"-culture-" in completeprompt or
|
|
"-accessory-" in completeprompt or
|
|
"-humanoid-" in completeprompt or
|
|
"-manwoman-" in completeprompt or
|
|
"-human-" in completeprompt or
|
|
"-colorscheme-" in completeprompt or
|
|
"-mood-" in completeprompt or
|
|
"-genderdescription-" in completeprompt or
|
|
"-artmovement-" in completeprompt or
|
|
"-malefemale-" in completeprompt or
|
|
"-objecttotal-" in completeprompt or
|
|
"-outfitprinttotal-" in completeprompt or
|
|
"-bodytype-" in completeprompt or
|
|
"-minilocation-" in completeprompt or
|
|
"-minilocationaddition-" in completeprompt or
|
|
"-pose-" in completeprompt or
|
|
"-season-" in completeprompt or
|
|
"-minioutfit-" in completeprompt or
|
|
"-elaborateoutfit-" in completeprompt or
|
|
"-minivomit-" in completeprompt or
|
|
"-vomit-" in completeprompt or
|
|
"-rpgclass-" in completeprompt or
|
|
"-subjectfromfile-" in completeprompt or
|
|
"-outfitfromfile-" in completeprompt or
|
|
"-brand-" in completeprompt or
|
|
"-space-" in completeprompt or
|
|
"-artist-" in completeprompt or
|
|
"-imagetype-" in completeprompt or
|
|
"-othertype-" in completeprompt or
|
|
"-quality-" in completeprompt or
|
|
"-lighting-" in completeprompt or
|
|
"-camera-" in completeprompt or
|
|
"-lens-" in completeprompt or
|
|
"-imagetypequality-" in completeprompt or
|
|
"-poemline-" in completeprompt or
|
|
"-songline-" in completeprompt or
|
|
"-greatwork-" in completeprompt or
|
|
"-fantasyartist-" in completeprompt or
|
|
"-popularartist-" in completeprompt or
|
|
"-romanticismartist-" in completeprompt or
|
|
"-photographyartist-" in completeprompt or
|
|
"-emoji-" in completeprompt or
|
|
"-timeperiod-" in completeprompt or
|
|
"-shotsize-" in completeprompt or
|
|
"-musicgenre-" in completeprompt or
|
|
"-animaladdition-" in completeprompt or
|
|
"-objectaddition-" in completeprompt or
|
|
"-humanaddition-" in completeprompt or
|
|
"-overalladdition-" in completeprompt or
|
|
"-focus-" in completeprompt or
|
|
"-direction-" in completeprompt or
|
|
"-styletilora-" in completeprompt or
|
|
"-manwomanrelation-" in completeprompt or
|
|
"-manwomanmultiple-" in completeprompt or
|
|
"-waterlocation-" in completeprompt or
|
|
"-container-" in completeprompt or
|
|
"-firstname-" in completeprompt or
|
|
"-flora-" in completeprompt or
|
|
"-print-" in completeprompt or
|
|
"-miniactivity-" in completeprompt or
|
|
"-pattern-" in completeprompt or
|
|
"-chair-" in completeprompt or
|
|
"-cardname-" in completeprompt or
|
|
"-covering-" in completeprompt or
|
|
"-outfitdescriptor-" in completeprompt or
|
|
"-hairdescriptor-" in completeprompt or
|
|
"-hairvomit-" in completeprompt or
|
|
"-humandescriptor-" in completeprompt or
|
|
"-facepart-" in completeprompt or
|
|
"-locationdescriptor-" in completeprompt or
|
|
"-basicbitchdescriptor-" in completeprompt or
|
|
"-animaldescriptor-" in completeprompt or
|
|
"-humanexpression-" in completeprompt or
|
|
"-humanvomit-" in completeprompt or
|
|
"-eyecolor-" in completeprompt or
|
|
"-fashiondesigner-" in completeprompt or
|
|
"-colorcombination-" in completeprompt or
|
|
"-materialcombination-" in completeprompt or
|
|
"-photoaddition-" in completeprompt or
|
|
"-age-" in completeprompt or
|
|
"-agecalculator-" in completeprompt or
|
|
"-gregmode-" in completeprompt or
|
|
"-portraitartist-" in completeprompt or
|
|
"-characterartist-" in completeprompt or
|
|
"-landscapeartist-" in completeprompt or
|
|
"-scifiartist-" in completeprompt or
|
|
"-graphicdesignartist-" in completeprompt or
|
|
"-digitalartist-" in completeprompt or
|
|
"-architectartist-" in completeprompt or
|
|
"-cinemaartist-" in completeprompt or
|
|
"-element-" in completeprompt or
|
|
"-setting-" in completeprompt or
|
|
"-charactertype-" in completeprompt or
|
|
"-objectstohold-" in completeprompt or
|
|
"-episodetitle-" in completeprompt or
|
|
"-allstylessuffix-" in completeprompt or
|
|
"-fluff-" in completeprompt or
|
|
"-event-" in completeprompt or
|
|
"-background-" in completeprompt or
|
|
"-occult-" in completeprompt or
|
|
"-locationfantasy-" in completeprompt or
|
|
"-locationscifi-" in completeprompt or
|
|
"-locationvideogame-" in completeprompt or
|
|
"-locationbiome-" in completeprompt or
|
|
"-locationcity-" in completeprompt or
|
|
"-bird-" in completeprompt or
|
|
"-cat-" in completeprompt or
|
|
"-dog-" in completeprompt or
|
|
"-insect-" in completeprompt or
|
|
"-pokemon-" in completeprompt or
|
|
"-pokemontype-" in completeprompt or
|
|
"-marinelife-" in completeprompt
|
|
):
|
|
allwildcardslistnohybrid = [ "-color-","-object-", "-animal-", "-fictional-","-nonfictional-","-building-","-vehicle-","-location-","-conceptprefix-","-food-","-haircolor-","-hairstyle-","-job-", "-accessory-", "-humanoid-", "-manwoman-", "-human-", "-colorscheme-", "-mood-", "-genderdescription-", "-artmovement-", "-malefemale-", "-bodytype-", "-minilocation-", "-minilocationaddition-", "-pose-", "-season-", "-minioutfit-", "-elaborateoutfit-", "-minivomit-", "-vomit-", "-rpgclass-", "-subjectfromfile-", "-outfitfromfile-", "-brand-", "-space-", "-artist-", "-imagetype-", "-othertype-", "-quality-", "-lighting-", "-camera-", "-lens-","-imagetypequality-", "-poemline-", "-songline-", "-greatwork-", "-fantasyartist-", "-popularartist-", "-romanticismartist-", "-photographyartist-", "-emoji-", "-timeperiod-", "-shotsize-", "-musicgenre-", "-animaladdition-", "-objectaddition-", "-humanaddition-", "-overalladdition-", "-focus-", "-direction-", "-styletilora-", "-manwomanrelation-", "-waterlocation-", "-container-", "-firstname-", "-flora-", "-print-", "-miniactivity-", "-pattern-", "-chair-", "-cardname-", "-covering-", "-outfitdescriptor-", "-hairdescriptor-", "-hairvomit-", "-humandescriptor-", "-manwomanmultiple-", "-facepart-", "-locationdescriptor-", "-basicbitchdescriptor-", "-animaldescriptor-", "-humanexpression-", "-humanvomit-", "-eyecolor-", "-fashiondesigner-", "-colorcombination-", "-materialcombination-", "-photoaddition-", "-age-", "-agecalculator-", "-gregmode-"
|
|
,"-portraitartist-", "-characterartist-" , "-landscapeartist-", "-scifiartist-", "-graphicdesignartist-", "-digitalartist-", "-architectartist-", "-cinemaartist-", "-setting-", "-charactertype-", "-objectstohold-", "-episodetitle-", "-allstylessuffix-", "-fluff-", "-event-", "-background-"
|
|
, "-occult-", "-locationfantasy-", "-locationscifi-", "-locationvideogame-", "-locationbiome-", "-locationcity-", "-bird-", "-cat-", "-dog-", "-insect-", "-pokemon-", "-pokemontype-", "-marinelife-"]
|
|
allwildcardslistnohybridlists = [colorlist, objectlist, animallist, fictionallist, nonfictionallist, buildinglist, vehiclelist, locationlist,conceptprefixlist,foodlist,haircolorlist, hairstylelist,joblist, accessorielist, humanoidlist, manwomanlist, humanlist, colorschemelist, moodlist, genderdescriptionlist, artmovementlist, malefemalelist, bodytypelist, minilocationlist, minilocationadditionslist, poselist, seasonlist, minioutfitlist, elaborateoutfitlist, minivomitlist, vomitlist, rpgclasslist, customsubjectslist, customoutfitslist, brandlist, spacelist, artistlist, imagetypelist, othertypelist, qualitylist, lightinglist, cameralist, lenslist, imagetypequalitylist, poemlinelist, songlinelist, greatworklist, fantasyartistlist, popularartistlist, romanticismartistlist, photographyartistlist, emojilist, timeperiodlist, shotsizelist, musicgenrelist, animaladditionlist, objectadditionslist, humanadditionlist, overalladditionlist, focuslist, directionlist, stylestiloralist, manwomanrelationlist, waterlocationlist, containerlist, firstnamelist, floralist, printlist, miniactivitylist, patternlist, chairlist, cardnamelist, coveringlist, outfitdescriptorlist, hairdescriptorlist, hairvomitlist, humandescriptorlist, manwomanmultiplelist, facepartlist, locationdescriptorlist, basicbitchdescriptorlist, animaldescriptorlist, humanexpressionlist, humanvomitlist, eyecolorlist, fashiondesignerlist, colorcombinationlist, materialcombinationlist, photoadditionlist, agelist, agecalculatorlist, gregmodelist
|
|
, portraitartistlist, characterartistlist, landscapeartistlist, scifiartistlist, graphicdesignartistlist, digitalartistlist, architectartistlist, cinemaartistlist, settinglist, charactertypelist, objectstoholdlist, episodetitlelist, allstylessuffixlist, flufferlist, eventlist, backgroundlist
|
|
, occultlist, locationfantasylist, locationscifilist, locationvideogamelist, locationbiomelist, locationcitylist, birdlist, catlist, doglist, insectlist, pokemonlist, pokemontypelist, marinelifelist]
|
|
|
|
allwildcardslistwithhybrid = ["-material-", "-descriptor-", "-outfit-", "-conceptsuffix-","-culture-", "-objecttotal-", "-outfitprinttotal-", "-element-"]
|
|
allwildcardslistwithhybridlists = [materiallist, descriptorlist,outfitlist,conceptsuffixlist,culturelist, objecttotallist, outfitprinttotallist, elementlist]
|
|
|
|
|
|
# keywordsinstring = any(word.lower() in givensubject.lower() for word in keywordslist)
|
|
for wildcard in allwildcardslistnohybrid:
|
|
attachedlist = allwildcardslistnohybridlists[allwildcardslistnohybrid.index(wildcard)]
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, wildcard, attachedlist,False, advancedprompting)
|
|
|
|
|
|
|
|
for wildcard in allwildcardslistwithhybrid:
|
|
attachedlist = allwildcardslistwithhybridlists[allwildcardslistwithhybrid.index(wildcard)]
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, wildcard, attachedlist,True, advancedprompting)
|
|
|
|
|
|
|
|
# clean it up
|
|
completeprompt = cleanup(completeprompt, advancedprompting, insanitylevel)
|
|
|
|
|
|
|
|
|
|
|
|
return completeprompt
|
|
|
|
# function
|
|
def replacewildcard(completeprompt, insanitylevel, wildcard,listname, activatehybridorswap, advancedprompting, artiststyleselector = ""):
|
|
|
|
if(len(listname) == 0):
|
|
# handling empty lists
|
|
completeprompt = completeprompt.replace(wildcard, "",1)
|
|
else:
|
|
|
|
while wildcard in completeprompt:
|
|
if(unique_dist(insanitylevel) and activatehybridorswap == True and len(listname)>2 and advancedprompting==True):
|
|
hybridorswaplist = ["hybrid", "swap"]
|
|
hybridorswap = random.choice(hybridorswaplist)
|
|
replacementvalue = random.choice(listname)
|
|
listname.remove(replacementvalue)
|
|
hybridorswapreplacementvalue = "[" + replacementvalue
|
|
|
|
if(hybridorswap == "hybrid"):
|
|
replacementvalue = random.choice(listname)
|
|
listname.remove(replacementvalue)
|
|
hybridorswapreplacementvalue += "|" + replacementvalue + "] "
|
|
if(hybridorswap == "swap"):
|
|
replacementvalue = random.choice(listname)
|
|
listname.remove(replacementvalue)
|
|
hybridorswapreplacementvalue += ":" + replacementvalue + ":" + str(random.randint(1,20)) + "] "
|
|
|
|
completeprompt = completeprompt.replace(wildcard, hybridorswapreplacementvalue,1)
|
|
|
|
#if list is not empty
|
|
if(bool(listname)):
|
|
replacementvalue = random.choice(listname)
|
|
if(wildcard not in ["-heshe-", "-himher-","-hisher-"]):
|
|
listname.remove(replacementvalue)
|
|
|
|
|
|
|
|
else:
|
|
replacementvalue = ""
|
|
|
|
# override for artist and artiststyle, only for first artist
|
|
if(wildcard == "-artist-" and ("-artiststyle-" in completeprompt or "-artistmedium-" in completeprompt or "-artistdescription-" in completeprompt)):
|
|
artiststyles = []
|
|
artiststyle = []
|
|
chosenartiststyle = ""
|
|
artistscomplete = artist_category_by_category_csv_to_list("artists_and_category",replacementvalue)
|
|
artiststyles = artistscomplete[0]
|
|
artistmediums = artistscomplete[1]
|
|
artistdescriptions = artistscomplete[2]
|
|
artiststyle = [x.strip() for x in artiststyles[0].split(",")]
|
|
|
|
artiststyle = list(filter(lambda x: len(x) > 0, artiststyle)) # remove empty values
|
|
|
|
if(artiststyleselector in artiststyle):
|
|
artiststyle.remove(artiststyleselector)
|
|
|
|
# Sorry folks, this only works when you directly select it as a style
|
|
if("nudity" in artiststyle):
|
|
artiststyle.remove("nudity")
|
|
|
|
# keep on looping until we have no more wildcards or no more styles to choose from
|
|
# leftovers will be removed in the cleaning step
|
|
while bool(artiststyle) and "-artiststyle-" in completeprompt:
|
|
|
|
chosenartiststyle = random.choice(artiststyle)
|
|
completeprompt = completeprompt.replace("-artiststyle-",chosenartiststyle ,1)
|
|
artiststyle.remove(chosenartiststyle)
|
|
|
|
if("-artistmedium-" in completeprompt):
|
|
if(artistmediums[0].lower() not in completeprompt.lower()):
|
|
completeprompt = completeprompt.replace("-artistmedium-",artistmediums[0] ,1)
|
|
|
|
if("-artistdescription-" in completeprompt):
|
|
completeprompt = completeprompt.replace("-artistdescription-",artistdescriptions[0] ,1)
|
|
|
|
while bool(artiststyle) and "-artiststyle-" in completeprompt:
|
|
|
|
chosenartiststyle = random.choice(artiststyle)
|
|
completeprompt = completeprompt.replace("-artiststyle-",chosenartiststyle ,1)
|
|
artiststyle.remove(chosenartiststyle)
|
|
|
|
|
|
|
|
# Sneaky overrides for "same" wildcards
|
|
# Are overwritten with their first parent
|
|
if(wildcard == "-outfit-" or wildcard == "-minioutfit-"):
|
|
completeprompt = completeprompt.replace("-sameoutfit-", replacementvalue,1)
|
|
|
|
# Why do it in this detail?? Because we can:
|
|
# Check if "from" exists in the string. For example Chun Li from Streetfighter, becomes Chun li
|
|
if "from" in replacementvalue:
|
|
# Find the index of "from" in the string
|
|
from_index = replacementvalue.find("from")
|
|
|
|
# Remove everything from and including "from"
|
|
replacementvalueforoverrides = replacementvalue[:from_index].strip()
|
|
else:
|
|
replacementvalueforoverrides = replacementvalue
|
|
|
|
if(wildcard in ["-human-"
|
|
,"-humanoid-"
|
|
, "-manwoman-"
|
|
, "-manwomanrelation-"
|
|
, "-manwomanmultiple-"]
|
|
and "-samehumansubject-" in completeprompt):
|
|
if(completeprompt.index(wildcard) < completeprompt.index("-samehumansubject-")):
|
|
completeprompt = completeprompt.replace("-samehumansubject-", "the " + replacementvalueforoverrides)
|
|
|
|
if(wildcard in ["-fictional-"
|
|
, "-nonfictional-"
|
|
, "-firstname-"
|
|
, "-oppositefictional-"
|
|
, "-oppositenonfictional-"]
|
|
and "-samehumansubject-" in completeprompt):
|
|
if(completeprompt.index(wildcard) < completeprompt.index("-samehumansubject-")):
|
|
completeprompt = completeprompt.replace("-samehumansubject-", replacementvalueforoverrides)
|
|
|
|
# job is here, to prevent issue with a job outfit being replace. So doing it later solves that issue
|
|
if(wildcard in ["-job-"]
|
|
and "-samehumansubject-" in completeprompt):
|
|
if(completeprompt.index(wildcard) < completeprompt.index("-samehumansubject-")):
|
|
completeprompt = completeprompt.replace("-samehumansubject-", "the " + replacementvalueforoverrides)
|
|
|
|
|
|
# This one last, since then it is the only subject we have left
|
|
if(wildcard in ["-malefemale-"]
|
|
and "-samehumansubject-" in completeprompt):
|
|
if(completeprompt.index(wildcard) < completeprompt.index("-samehumansubject-")):
|
|
completeprompt = completeprompt.replace("-samehumansubject-", "the " + replacementvalueforoverrides)
|
|
|
|
if(wildcard in ["-animal-"
|
|
, "-object-"
|
|
, "-vehicle-"
|
|
, "-food-"
|
|
, "-objecttotal-"
|
|
, "-space-"
|
|
, "-flora-"
|
|
, "-location-"
|
|
, "-building-"]
|
|
and "-sameothersubject-" in completeprompt):
|
|
if(completeprompt.index(wildcard) < completeprompt.index("-sameothersubject-")):
|
|
completeprompt = completeprompt.replace("-sameothersubject-", "the " + replacementvalueforoverrides)
|
|
|
|
|
|
|
|
completeprompt = completeprompt.replace(wildcard, replacementvalue,1)
|
|
|
|
|
|
|
|
|
|
return completeprompt
|
|
|
|
def build_dynamic_negative(positive_prompt = "", insanitylevel = 0, enhance = False, existing_negative_prompt = "", base_model="SD1.5"):
|
|
|
|
|
|
negative_primer = []
|
|
negative_result = []
|
|
all_negative_words_list = []
|
|
remove_weights = False
|
|
|
|
# Base model options, used to change things in prompt generation. Might be able to extend to different forms like animatediff as well?
|
|
base_model_options = ["SD1.5", "SDXL", "Stable Cascade"]
|
|
if base_model not in base_model_options:
|
|
base_model = "SD1.5" # Just in case there is no option here.
|
|
# "SD1.5" -- Standard, future: More original style prompting
|
|
# "SDXL" -- Standard (for now), future: More natural language
|
|
# "Stable Cascade" -- Remove weights
|
|
if base_model == "Stable Cascade":
|
|
remove_weights = True
|
|
|
|
# negavite_primer, all words that should trigger a negative result
|
|
# the negative words to put in the negative prompt
|
|
negative_primer, negative_result = load_negative_list()
|
|
|
|
# do a trick for artists, replace with their tags instead
|
|
artistlist, categorylist = load_all_artist_and_category()
|
|
# lower them
|
|
artist_names = [artist.strip().lower() for artist in artistlist]
|
|
|
|
# note, should we find a trick for some shorthands of artists??
|
|
artistshorthands = csv_to_list(csvfilename="artistshorthands",directory="./csvfiles/special_lists/",delimiter="?")
|
|
for shorthand in artistshorthands:
|
|
parts = shorthand.split(';')
|
|
if parts[0] in positive_prompt:
|
|
positive_prompt = positive_prompt.lower().replace(parts[0].lower(), parts[1].lower())
|
|
|
|
|
|
for artist_name, category in zip(artist_names, categorylist):
|
|
positive_prompt = positive_prompt.lower().replace(artist_name, category)
|
|
|
|
|
|
allwords = split_prompt_to_words(positive_prompt)
|
|
|
|
|
|
#lower all!
|
|
|
|
for word in allwords:
|
|
if(word.lower() in negative_primer):
|
|
index_of_word = negative_primer.index(word.lower())
|
|
all_negative_words_list.append(negative_result[index_of_word])
|
|
|
|
all_negative_words = ", ".join(all_negative_words_list)
|
|
all_negative_words_list = all_negative_words.split(",")
|
|
all_negative_words_list = [elem.strip().lower() for elem in all_negative_words_list]
|
|
|
|
|
|
|
|
|
|
|
|
if enhance == True:
|
|
enhancelist = ["worst quality", "low quality", "normal quality", "lowres", "low details", "oversaturated", "undersaturated", "overexposed", "underexposed", "grayscale", "bw", "bad photo", "bad photography", "bad art", "watermark", "signature", "text font", "username", "error", "logo", "words", "letters", "digits", "autograph", "trademark", "name", "blur", "blurry", "grainy", "ugly", "asymmetrical", "poorly lit", "bad shadow", "draft", "cropped", "out of frame", "cut off", "censored", "jpeg artifacts", "out of focus", "glitch", "duplicate"]
|
|
all_negative_words_list += enhancelist
|
|
|
|
|
|
# new lets remove some based on the reverse insanitylevel
|
|
removalchance = int((insanitylevel) * 10)
|
|
|
|
for i in range(len(all_negative_words_list)):
|
|
if(random.randint(1, 100)<removalchance):
|
|
all_negative_words_list.pop(random.randint(0, len(all_negative_words_list)-1))
|
|
|
|
# remove anything that is in the prompt itself, so no conflict of words!
|
|
|
|
all_negative_words_list = [word for word in all_negative_words_list if word not in allwords]
|
|
|
|
# Now compound it, and use the (word:1.3) type syntax:
|
|
# Use a dictionary to count occurrences
|
|
word_count = {}
|
|
for word in all_negative_words_list:
|
|
if word in word_count:
|
|
word_count[word] += 1
|
|
else:
|
|
word_count[word] = 1
|
|
|
|
# Convert the list to unique values or (word:count) format
|
|
unique_words = []
|
|
for word, count in word_count.items():
|
|
if(count > 2 and remove_weights == False):
|
|
#counttotal = int(count/2)
|
|
counttotal = count
|
|
if(counttotal > 3):
|
|
counttotal = 3
|
|
unique_words.append(f"({word}:1.{counttotal})")
|
|
else:
|
|
unique_words.append(word)
|
|
|
|
negative_result = ", ".join(unique_words)
|
|
|
|
negative_result += ", " + existing_negative_prompt
|
|
|
|
return negative_result
|
|
|
|
def enhance_positive(positive_prompt = "", amountofwords = 3):
|
|
|
|
|
|
wordcombilist = csv_to_list(csvfilename="wordcombis", directory="./csvfiles/special_lists/",delimiter="?")
|
|
|
|
# do a trick for artists, replace with their tags instead
|
|
artistlist, categorylist = load_all_artist_and_category()
|
|
# lower them
|
|
artist_names = [artist.strip().lower() for artist in artistlist]
|
|
|
|
# note, should we find a trick for some shorthands of artists??
|
|
artistshorthands = csv_to_list(csvfilename="artistshorthands",directory="./csvfiles/special_lists/",delimiter="?")
|
|
for shorthand in artistshorthands:
|
|
parts = shorthand.split(';')
|
|
if parts[0] in positive_prompt:
|
|
positive_prompt = positive_prompt.lower().replace(parts[0].lower(), parts[1].lower())
|
|
|
|
|
|
for artist_name, category in zip(artist_names, categorylist):
|
|
positive_prompt = positive_prompt.lower().replace(artist_name, category)
|
|
|
|
allwords = split_prompt_to_words(positive_prompt)
|
|
allwords = [elem.strip().lower() for elem in allwords] # lower them
|
|
|
|
newwordlist = []
|
|
addwords = ""
|
|
wordsfound = 0
|
|
|
|
#lower all!
|
|
|
|
for combiset in wordcombilist:
|
|
|
|
combiwords = set(combiset.split(', '))
|
|
for combiword in combiwords:
|
|
for word in allwords:
|
|
if(word.lower() == combiword.lower()):
|
|
|
|
wordsfound += 1
|
|
combiwords2 = set(combiset.split(', '))
|
|
# remove and only take one
|
|
combiwords2 = [word for word in combiwords2 if word not in allwords]
|
|
#for combiword2 in combiwords2:
|
|
if(combiwords2):
|
|
newwordlist.append(random.choice(combiwords2))
|
|
|
|
|
|
|
|
newwordlist = [word for word in newwordlist if word not in allwords]
|
|
newwordlist = list(set(newwordlist)) # make unique
|
|
|
|
|
|
for i in range(0,amountofwords):
|
|
if(len(newwordlist) > 0):
|
|
addwords += ", " + newwordlist.pop(random.randrange(len(newwordlist)))
|
|
#print(addwords)
|
|
|
|
|
|
return addwords
|
|
|
|
def artify_prompt(insanitylevel = 5, prompt = "", artists = "all", amountofartists = "1", mode="standard", seed = -1):
|
|
if(amountofartists=="random"):
|
|
intamountofartists = random.randint(1,int((insanitylevel/3) + 1.20))
|
|
else:
|
|
intamountofartists = int(amountofartists)
|
|
|
|
|
|
# set seed
|
|
# For use in ComfyUI (might bring to Automatic1111 as well)
|
|
# lets do it when its larger than 0
|
|
# Otherwise, just do nothing and it will keep on working based on an earlier set seed
|
|
if(seed > 0):
|
|
random.seed(seed)
|
|
|
|
|
|
# first build up a complete anti list. Those values are removing during list building
|
|
# this uses the antivalues string AND the antilist.csv
|
|
emptylist = []
|
|
antilist = csv_to_list("antilist",emptylist , "./userfiles/",1)
|
|
|
|
# clean up antivalue list:
|
|
antilist = [s.strip().lower() for s in antilist]
|
|
|
|
# build artists list
|
|
if artists == "wild":
|
|
artists = "all (wild)"
|
|
|
|
# we want to create more cohorence, so we are adding all (wild) mode for the old logic
|
|
|
|
artisttypes = ["popular", "3D", "abstract", "angular", "anime" ,"architecture", "art nouveau", "art deco", "baroque", "bauhaus", "cartoon", "character", "children's illustration", "cityscape", "cinema", "clean", "cloudscape", "collage", "colorful", "comics", "cubism", "dark", "detailed", "digital", "expressionism", "fantasy", "fashion", "fauvism", "figurativism", "graffiti", "graphic design", "high contrast", "horror", "impressionism", "installation", "landscape", "light", "line drawing", "low contrast", "luminism", "magical realism", "manga", "melanin", "messy", "monochromatic", "nature", "photography", "pop art", "portrait", "primitivism", "psychedelic", "realism", "renaissance", "romanticism", "scene", "sci-fi", "sculpture", "seascape", "space", "stained glass", "still life", "storybook realism", "street art", "streetscape", "surrealism", "symbolism", "textile", "ukiyo-e", "vibrant", "watercolor", "whimsical"]
|
|
artiststyleselector = ""
|
|
artiststyleselectormode = "normal"
|
|
artiststyleselector = random.choice(artisttypes)
|
|
|
|
artistlist = []
|
|
# create artist list to use in the code, maybe based on category or personal lists
|
|
if(artists != "all (wild)" and artists != "all" and artists != "none" and artists.startswith("personal_artists") == False and artists.startswith("personal artists") == False and artists in artisttypes):
|
|
artistlist = artist_category_csv_to_list("artists_and_category",artists)
|
|
elif(artists.startswith("personal_artists") == True or artists.startswith("personal artists") == True):
|
|
artists = artists.replace(" ","_",-1) # add underscores back in
|
|
artistlist = csv_to_list(artists,antilist,"./userfiles/")
|
|
elif(artists != "none"):
|
|
artistlist = csv_to_list("artists",antilist)
|
|
|
|
|
|
# load up the styles list for the other modes
|
|
styleslist = csv_to_list("styles", antilist,"./csvfiles/templates/",0,"?")
|
|
stylessuffix = [item.split('-subject-')[1] for item in styleslist]
|
|
breakstylessuffix = [item.split(',') for item in stylessuffix]
|
|
allstylessuffixlist = [value for sublist in breakstylessuffix for value in sublist]
|
|
allstylessuffixlist = list(set(allstylessuffixlist))
|
|
|
|
artistsuffix = artist_descriptions_csv_to_list("artists_and_category")
|
|
breakartiststylessuffix = [item.split(',') for item in artistsuffix]
|
|
artiststylessuffixlist = [value for sublist in breakartiststylessuffix for value in sublist]
|
|
artiststylessuffixlist = list(set(artiststylessuffixlist))
|
|
allstylessuffixlist += artiststylessuffixlist
|
|
|
|
completeprompt = ""
|
|
if(common_dist(insanitylevel)):
|
|
completeprompt += "-artiststyle- "
|
|
completeprompt += "art by "
|
|
#Lets go effing artify this MF'er
|
|
|
|
for i in range(0,intamountofartists):
|
|
if(intamountofartists > 1 and i == intamountofartists - 2):
|
|
completeprompt += "-artist- and "
|
|
else:
|
|
completeprompt += "-artist-, "
|
|
|
|
if(uncommon_dist(insanitylevel)):
|
|
completeprompt += "-artistmedium-, "
|
|
|
|
# now add the prompt in
|
|
completeprompt += prompt
|
|
|
|
if(mode.lower() == "remix"):
|
|
for i in range(0,intamountofartists):
|
|
completeprompt += ", " + artistsuffix.pop(artistsuffix.index(random.choice(artistsuffix)))
|
|
|
|
elif(mode.lower() == "super remix turbo"):
|
|
for i in range(0,intamountofartists*4):
|
|
completeprompt += ", " + allstylessuffixlist.pop(allstylessuffixlist.index(random.choice(allstylessuffixlist)))
|
|
|
|
else:
|
|
# else just go standard
|
|
for i in range(0,intamountofartists):
|
|
completeprompt += ", -artistdescription-"
|
|
|
|
|
|
|
|
|
|
while ("-artist-" in completeprompt):
|
|
|
|
completeprompt = replacewildcard(completeprompt,5,"-artist-", artistlist,"","",artiststyleselector)
|
|
|
|
|
|
return completeprompt
|
|
|
|
|
|
def flufferizer(prompt = "", amountoffluff = "dynamic", seed = -1, reverse_polarity = False):
|
|
if(amountoffluff == "none"):
|
|
return prompt
|
|
|
|
# set seed
|
|
# For use in ComfyUI (might bring to Automatic1111 as well)
|
|
# lets do it when its larger than 0
|
|
# Otherwise, just do nothing and it will keep on working based on an earlier set seed
|
|
if(seed > 0):
|
|
random.seed(seed)
|
|
|
|
if(reverse_polarity):
|
|
flufferlist = csv_to_list("antifluff") # all negative words
|
|
else:
|
|
flufferlist = csv_to_list("fluff")
|
|
|
|
# dynamic = based on prompt length + insanitylevel
|
|
minfluff = 4
|
|
maxfluff = 6
|
|
# short = 4-6
|
|
# medium = 5-8
|
|
# long = 8-12
|
|
if(amountoffluff == "dynamic"):
|
|
|
|
if(len(prompt) < 150):
|
|
amountoffluff = "long"
|
|
elif(len(prompt) < 250):
|
|
amountoffluff = "medium"
|
|
else:
|
|
amountoffluff = "short"
|
|
|
|
if(amountoffluff == "long"):
|
|
minfluff = 8
|
|
maxfluff = 12
|
|
if(amountoffluff == "medium"):
|
|
minfluff = 5
|
|
maxfluff = 8
|
|
|
|
for i in range(0,random.randint(minfluff, maxfluff)):
|
|
prompt += ", " + flufferlist.pop(flufferlist.index(random.choice(flufferlist)))
|
|
|
|
return prompt
|
|
|
|
|
|
|
|
|
|
def replace_match(match):
|
|
# Extract the first word from the match
|
|
words = match.group(0)[1:-1].split('|')
|
|
return words[0]
|
|
|
|
def cleanup(completeprompt, advancedprompting, insanitylevel = 5):
|
|
|
|
# This part is turned off, will bring it back later as an option
|
|
|
|
# first, move LoRA's to the back dynamically
|
|
|
|
# Find all occurrences of text between < and > using regex
|
|
# allLoRA = re.findall(r"<[^>]+>", completeprompt)
|
|
|
|
# Remove the extracted matches from completeprompt
|
|
# completeprompt = re.sub(r"<[^>]+>", "", completeprompt)
|
|
|
|
|
|
# if we are not using advanced prompting, remove any hybrid stuff:
|
|
if(advancedprompting==False):
|
|
hybridpattern = r'\[\w+\|\w+\]'
|
|
# Replace the matched pattern with the first word in the group
|
|
completeprompt = re.sub(hybridpattern, replace_match, completeprompt)
|
|
|
|
# Doesnt work if there are multiple words, so then just get rid of things as is :D
|
|
completeprompt = completeprompt.replace("[", " ")
|
|
completeprompt = completeprompt.replace("]", " ")
|
|
completeprompt = completeprompt.replace("|", " ")
|
|
|
|
# sometimes if there are not enough artist, we get left we things formed as (:1.2)
|
|
completeprompt = re.sub(r'\(\:\d+\.\d+\)', '', completeprompt)
|
|
|
|
# lets also remove some wierd stuff on lower insanitylevels
|
|
if(insanitylevel < 7):
|
|
completeprompt = completeprompt.replace("DayGlo", " ")
|
|
completeprompt = completeprompt.replace("fluorescent", " ")
|
|
|
|
# all cleanup steps moved here
|
|
completeprompt = re.sub(r'\[ ', '[', completeprompt)
|
|
completeprompt = re.sub(r'\[,', '[', completeprompt)
|
|
completeprompt = re.sub(r' \]', ']', completeprompt)
|
|
completeprompt = re.sub(r' \|', '|', completeprompt)
|
|
#completeprompt = re.sub(r' \"', '\"', completeprompt)
|
|
#completeprompt = re.sub(r'\" ', '\"', completeprompt)
|
|
completeprompt = re.sub(r'\( ', '(', completeprompt)
|
|
completeprompt = re.sub(r' \(', '(', completeprompt)
|
|
completeprompt = re.sub(r'\) ', ')', completeprompt)
|
|
completeprompt = re.sub(r' \)', ')', completeprompt)
|
|
|
|
completeprompt = re.sub(' :', ':', completeprompt)
|
|
completeprompt = re.sub(',::', '::', completeprompt)
|
|
completeprompt = re.sub(',:', ':', completeprompt)
|
|
|
|
completeprompt = re.sub(',,', ', ', completeprompt)
|
|
completeprompt = re.sub(',,', ', ', completeprompt)
|
|
completeprompt = re.sub(',,,', ', ', completeprompt)
|
|
completeprompt = re.sub(', ,', ',', completeprompt)
|
|
completeprompt = re.sub(' , ', ', ', completeprompt)
|
|
completeprompt = re.sub(' ,', ',', completeprompt)
|
|
completeprompt = re.sub(' ,', ',', completeprompt)
|
|
completeprompt = re.sub(' ,', ',', completeprompt)
|
|
completeprompt = re.sub(r',\(', ', (', completeprompt)
|
|
|
|
|
|
|
|
while " " in completeprompt:
|
|
completeprompt = re.sub(' ', ' ', completeprompt)
|
|
completeprompt = re.sub('a The', 'The', completeprompt)
|
|
completeprompt = re.sub('the the', 'the', completeprompt)
|
|
completeprompt = re.sub(', ,', ',', completeprompt)
|
|
completeprompt = re.sub(',,', ',', completeprompt)
|
|
|
|
completeprompt = re.sub(', of a', ' of a', completeprompt)
|
|
completeprompt = re.sub('of a,', 'of a', completeprompt)
|
|
completeprompt = re.sub('of a of a', 'of a', completeprompt)
|
|
completeprompt = re.sub(' a a ', ' a ', completeprompt)
|
|
|
|
# a / an
|
|
completeprompt = re.sub(' a a', ' an a', completeprompt)
|
|
completeprompt = re.sub(' a e', ' an e', completeprompt)
|
|
completeprompt = re.sub(' a i', ' an i', completeprompt)
|
|
completeprompt = re.sub(' a u', ' an u', completeprompt)
|
|
completeprompt = re.sub(' a o', ' an o', completeprompt)
|
|
|
|
|
|
completeprompt = re.sub('art art', 'art', completeprompt)
|
|
completeprompt = re.sub('Art art', 'art', completeprompt)
|
|
completeprompt = re.sub('lighting lighting', 'lighting', completeprompt)
|
|
completeprompt = re.sub('Lighting lighting', 'lighting', completeprompt)
|
|
completeprompt = re.sub('light lighting', 'light', completeprompt)
|
|
completeprompt = re.sub('-artiststyle- art,', '', completeprompt)
|
|
completeprompt = re.sub('-artiststyle- art', '', completeprompt)
|
|
completeprompt = re.sub('-artiststyle-', '', completeprompt)
|
|
completeprompt = re.sub('-artistmedium-', '', completeprompt)
|
|
completeprompt = re.sub('-artistdescription-', '', completeprompt)
|
|
completeprompt = re.sub('- art ', '', completeprompt)
|
|
|
|
completeprompt = re.sub('anime anime', 'anime', completeprompt)
|
|
completeprompt = re.sub('anime, anime', 'anime', completeprompt)
|
|
|
|
completeprompt = re.sub('shot shot', 'shot', completeprompt)
|
|
|
|
|
|
completeprompt = re.sub('a his', 'his', completeprompt)
|
|
completeprompt = re.sub('a her', 'her', completeprompt)
|
|
completeprompt = re.sub('they is', 'they are', completeprompt)
|
|
completeprompt = re.sub('they has', 'they have', completeprompt)
|
|
|
|
# some space tricks
|
|
completeprompt = re.sub('- shaped', '-shaped', completeprompt)
|
|
completeprompt = re.sub('echa- ', 'echa-', completeprompt)
|
|
completeprompt = re.sub('style -', 'style-', completeprompt)
|
|
completeprompt = re.sub(', as a', ' as a', completeprompt)
|
|
|
|
|
|
#small fix for multisubject thing
|
|
completeprompt = re.sub('a 2', '2', completeprompt)
|
|
completeprompt = re.sub('a 3', '3', completeprompt)
|
|
completeprompt = re.sub('a 4', '4', completeprompt)
|
|
completeprompt = re.sub('a 5', '5', completeprompt)
|
|
|
|
|
|
# clean up some hacky multiples with adding a s to the end
|
|
completeprompt = re.sub('fs ', 'ves ', completeprompt)
|
|
completeprompt = re.sub('fs,', 'ves,', completeprompt)
|
|
completeprompt = re.sub('sss ', 'ss ', completeprompt)
|
|
completeprompt = re.sub('sss,', 'ss,', completeprompt)
|
|
completeprompt = re.sub(' Mans', ' Men,', completeprompt)
|
|
completeprompt = re.sub(' mans', ' men', completeprompt)
|
|
completeprompt = re.sub(' Womans,', ' Women', completeprompt)
|
|
completeprompt = re.sub(' womans,', ' women,', completeprompt)
|
|
completeprompt = re.sub(r'\(Mans', '(Men,', completeprompt)
|
|
completeprompt = re.sub(r'\(mans', '(men', completeprompt)
|
|
completeprompt = re.sub(r'\(Womans', '(Women', completeprompt)
|
|
completeprompt = re.sub(r'\(womans', '(women', completeprompt)
|
|
|
|
completeprompt = re.sub('-sameothersubject-', 'it', completeprompt)
|
|
completeprompt = re.sub('-samehumansubject-', 'the person', completeprompt)
|
|
|
|
|
|
completeprompt = re.sub(r'(?<!\()\s?\(', ' (', completeprompt)
|
|
completeprompt = re.sub(r'\)(?![\s)])', ') ', completeprompt)
|
|
|
|
# Move the extracted LoRA's to the end of completeprompt
|
|
#completeprompt += " " + " ".join(allLoRA)
|
|
|
|
completeprompt = completeprompt.replace(' . ', '. ')
|
|
completeprompt = completeprompt.replace(', . ', '. ')
|
|
completeprompt = completeprompt.replace(',. ', '. ')
|
|
completeprompt = completeprompt.replace('., ', '. ')
|
|
completeprompt = completeprompt.replace('. . ', '. ')
|
|
|
|
completeprompt = completeprompt.strip(", ")
|
|
|
|
return completeprompt
|
|
|
|
def custom_or(values, insanitylevel = 5):
|
|
# Check if the last element is one of the specific values
|
|
last_element = values[-1]
|
|
first_element = values[0]
|
|
|
|
|
|
if last_element in ['always', 'common', 'normal','uncommon', 'rare', 'legendary','unique', 'extraordinary', 'novel', 'never']:
|
|
# If we do not hit the change roll, then take the first element.
|
|
if not(chance_roll(insanitylevel, last_element)):
|
|
return first_element
|
|
# Else anything but the first or last element
|
|
else:
|
|
values.remove(first_element)
|
|
values.remove(last_element)
|
|
selected_value = random.choice(values)
|
|
return selected_value
|
|
|
|
|
|
else:
|
|
# Randomly select one element from the list
|
|
selected_value = random.choice(values)
|
|
return selected_value
|
|
|
|
def parse_custom_functions(completeprompt, insanitylevel = 5):
|
|
#print(completeprompt)
|
|
|
|
# Regular expression pattern to match 'or()' function calls and their arguments
|
|
ORpattern = r'OR\((.*?)\)'
|
|
ORbasesearch = 'OR('
|
|
|
|
|
|
|
|
while re.findall(ORpattern, completeprompt):
|
|
|
|
# basically start from right to left to start replacing, so we can do nesting
|
|
# probably not very stable, but seems to work :)
|
|
startofOR = completeprompt.rfind(ORbasesearch)
|
|
|
|
lastpartofcompleteprompt = completeprompt[startofOR:]
|
|
|
|
# Find all 'or()' function calls and their arguments in the text
|
|
matches = re.findall(ORpattern, lastpartofcompleteprompt)
|
|
|
|
# Sort the matches based on the length of the OR expressions
|
|
matches.sort(key=len)
|
|
|
|
|
|
match = matches[0] # get the first value, so smallest goes first!
|
|
|
|
or_replacement = ""
|
|
|
|
|
|
# Split the arguments by ';'
|
|
arguments = [arg.strip() for arg in match.split(';')]
|
|
|
|
# Evaluate the 'or()' function and append the result to the results list
|
|
|
|
# For debugging, enable these lines
|
|
#print(completeprompt)
|
|
#print(arguments)
|
|
or_replacement = custom_or(arguments, insanitylevel)
|
|
completematch = 'OR(' + match + ')'
|
|
completeprompt = completeprompt.replace(completematch, or_replacement)
|
|
|
|
|
|
|
|
return completeprompt
|
|
|
|
def split_prompt_to_words(text):
|
|
# first get all the words
|
|
|
|
# Use a regular expression to replace non-alphabetic characters with spaces
|
|
text = re.sub(r'[^a-zA-Z,-]', ' ', text)
|
|
|
|
# Split the string by commas and spaces
|
|
words = re.split(r'[,\s]+', text)
|
|
# Remove leading/trailing whitespaces from each word
|
|
words = [word.strip() for word in words]
|
|
|
|
# Filter out empty words
|
|
words = [word for word in words if word]
|
|
|
|
# Convert the list to a set to remove duplicates, then convert it back to a list
|
|
listsinglewords = list(set(words))
|
|
|
|
# now get all words clumped together by commas
|
|
if ',' in text:
|
|
allwords = text.split(',')
|
|
else:
|
|
allwords = [text]
|
|
# Remove leading/trailing whitespaces from each word and convert to lowercase
|
|
words = [word.strip().lower() for word in allwords]
|
|
|
|
# Filter out empty words and duplicates
|
|
listwords = list(set(filter(None, words)))
|
|
|
|
totallist = listsinglewords + listwords
|
|
|
|
totallist = list(set(filter(None, totallist)))
|
|
|
|
return totallist
|
|
|
|
def one_button_superprompt(insanitylevel = 5, prompt = "", seed = -1, override_subject = "" , override_outfit = "", chosensubject ="", gender = "", restofprompt = "", superpromptstyle = "", setnewtokens = 0, remove_bias = True):
|
|
|
|
if(seed <= 0):
|
|
seed = random.randint(1,1000000)
|
|
|
|
done = False
|
|
load_models()
|
|
|
|
superprompterstyleslist = csv_to_list("superprompter_styles")
|
|
descriptorlist = csv_to_list("descriptors")
|
|
devmessagessuperpromptlist = csv_to_list("devmessages_superprompt")
|
|
|
|
usestyle = False
|
|
if(superpromptstyle != "" and superpromptstyle != "all"):
|
|
usestyle = True
|
|
|
|
restofprompt = restofprompt.lower()
|
|
question = ""
|
|
|
|
# first, move LoRA's to the back dynamically
|
|
|
|
# Find all occurrences of text between < and > using regex
|
|
allLoRA = re.findall(r"<[^>]+>", prompt)
|
|
|
|
# Remove the extracted matches from completeprompt
|
|
prompt = re.sub(r"<[^>]+>", "", prompt)
|
|
override_subject = re.sub(r"<[^>]+>", "", override_subject)
|
|
|
|
temperature_lookup = {
|
|
1: 0.01,
|
|
2: 0.1,
|
|
3: 0.3,
|
|
4: 0.5,
|
|
5: 0.6,
|
|
6: 0.7,
|
|
7: 1.0,
|
|
8: 2.5,
|
|
9: 5.0,
|
|
10: 10.0
|
|
}
|
|
|
|
max_new_tokens_lookup = {
|
|
1: 45,
|
|
2: 45,
|
|
3: 50,
|
|
4: 55,
|
|
5: 60,
|
|
6: 70,
|
|
7: 90,
|
|
8: 100,
|
|
9: 150,
|
|
10: 255
|
|
}
|
|
|
|
top_p_lookup = {
|
|
1: 0.1,
|
|
2: 1.0,
|
|
3: 1.3,
|
|
4: 1.5,
|
|
5: 1.6,
|
|
6: 1.75,
|
|
7: 2.0,
|
|
8: 3.0,
|
|
9: 5.0,
|
|
10: 15.0
|
|
}
|
|
|
|
chosensubject_lookup = {
|
|
"humanoid": "fantasy character",
|
|
"manwomanrelation": "person",
|
|
"manwomanmultiple": "people",
|
|
"firstname": "",
|
|
"job": "person",
|
|
"fictional": "fictional character",
|
|
"non fictional": "person",
|
|
"human": "person",
|
|
"animal": "animal",
|
|
"animal as human": "human creature",
|
|
"landscape": "landscape",
|
|
"concept": "concept",
|
|
"event": "concept",
|
|
"concept": "concept",
|
|
"poemline": "concept",
|
|
"songline": "concept",
|
|
"cardname": "concept",
|
|
"episodetitle": "concept",
|
|
"generic objects": "object",
|
|
"vehicles": "vehicle",
|
|
"food": "food",
|
|
"building": "building",
|
|
"space": "space",
|
|
"flora": "nature",
|
|
}
|
|
# for insanitylevel in range(1,11):
|
|
j = 0
|
|
temperature = temperature_lookup.get(insanitylevel, 0.5)
|
|
if(setnewtokens < 1):
|
|
max_new_tokens = max_new_tokens_lookup.get(insanitylevel, 70)
|
|
else:
|
|
max_new_tokens = setnewtokens
|
|
top_p = top_p_lookup.get(insanitylevel, 1.6)
|
|
subject_to_generate = chosensubject_lookup.get(chosensubject, "")
|
|
|
|
translation_table_remove_stuff = str.maketrans('', '', '.,:()<>|[]"" ')
|
|
translation_table_remove_numbers = str.maketrans('', '', '0123456789:()<>|[]""')
|
|
|
|
# check if its matching all words from the override:
|
|
possible_words_to_check = override_subject.lower().split() + override_outfit.lower().split()
|
|
#print(possible_words_to_check)
|
|
words_to_check = []
|
|
words_to_remove = ['subject', 'solo', '1girl', '1boy']
|
|
for word in possible_words_to_check:
|
|
word = word.translate(translation_table_remove_stuff)
|
|
#print(word)
|
|
if word not in words_to_remove:
|
|
if (not word.startswith("-") and not word.endswith("-")) and (not word.startswith("_") and not word.endswith("_")) :
|
|
words_to_check.append(word)
|
|
|
|
#print(words_to_check)
|
|
if chosensubject not in ("humanoid","firstname","job","fictional","non fictional","human"):
|
|
gender = ""
|
|
if(superpromptstyle == "" or superpromptstyle == "all"):
|
|
if "fantasy" in restofprompt or "d&d" in restofprompt or "dungeons and dragons" in restofprompt or "dungeons and dragons" in restofprompt:
|
|
superpromptstyle = "fantasy style"
|
|
elif "sci-fi" in restofprompt or "scifi" in restofprompt or "science fiction" in restofprompt:
|
|
superpromptstyle = random.choice(["sci-fi style","futuristic"])
|
|
elif "cyberpunk" in restofprompt:
|
|
superpromptstyle = "cyberpunk"
|
|
elif "horror" in restofprompt:
|
|
superpromptstyle = "horror themed"
|
|
elif "evil" in restofprompt:
|
|
superpromptstyle = "evil"
|
|
elif "cinestill" in restofprompt or "movie still" in restofprompt or "cinematic" in restofprompt or "epic" in restofprompt:
|
|
superpromptstyle = random.choice(["cinematic","epic"])
|
|
elif "fashion" in restofprompt:
|
|
superpromptstyle = random.choice(["elegant","glamourous"])
|
|
elif "cute" in restofprompt or "adorable" in restofprompt or "kawaii" in restofprompt:
|
|
superpromptstyle = random.choice(["cute","adorable", "kawaii"])
|
|
|
|
else:
|
|
superpromptstyle = random.choice(superprompterstyleslist)
|
|
|
|
if(words_to_check):
|
|
question += "Make sure the subject is used: " + ', '.join(words_to_check) + " \n"
|
|
|
|
imagetype = ""
|
|
if "portrait" in restofprompt:
|
|
imagetype = "a portrait"
|
|
elif "painting" in restofprompt:
|
|
imagetype = "a painting"
|
|
elif "digital art" in restofprompt:
|
|
imagetype = "a digital artwork"
|
|
elif "concept" in restofprompt:
|
|
imagetype = "concept art"
|
|
elif "pixel" in restofprompt:
|
|
imagetype = "pixel art"
|
|
elif "game" in restofprompt:
|
|
imagetype = "video game artwork"
|
|
|
|
if imagetype != "" and (normal_dist(insanitylevel) or usestyle == True):
|
|
question += "Expand the following " + gender + " " + subject_to_generate + " prompt to describe " + superpromptstyle + " " + imagetype + ": "
|
|
elif imagetype != "":
|
|
question += "Expand the following " + gender + " " + subject_to_generate + " prompt to describe " + imagetype + ": "
|
|
elif(normal_dist(insanitylevel) or usestyle == True):
|
|
question += "Expand the following " + gender + " " + subject_to_generate + " prompt to make it more " + superpromptstyle
|
|
else:
|
|
question += "Expand the following " + gender + " " + subject_to_generate + " prompt to add more detail: "
|
|
|
|
|
|
|
|
prompt = prompt.translate(translation_table_remove_numbers)
|
|
|
|
while done == False:
|
|
#print(seed)
|
|
#print(temperature)
|
|
#print(top_p)
|
|
#print(question)
|
|
#print("chosen subject: " + chosensubject)
|
|
|
|
|
|
superpromptresult = answer(input_text=question + prompt, max_new_tokens=max_new_tokens, repetition_penalty=2.0, temperature=temperature, top_p=top_p, top_k=10, seed=seed)
|
|
|
|
#print("orignal: " + prompt)
|
|
#print("insanitylevel: " + str(insanitylevel))
|
|
#print("")
|
|
#print("complete superprompt: " + superpromptresult)
|
|
#print("")
|
|
|
|
# Find the indices of the nearest period and comma
|
|
period_index = superpromptresult.rfind('.')
|
|
comma_index = superpromptresult.rfind(',')
|
|
|
|
# Determine the index to cut off the string
|
|
cut_off_index = max(period_index, comma_index)
|
|
|
|
# Cut off the string at the determined index
|
|
if cut_off_index != -1: # If either period or comma exists
|
|
superpromptresult = superpromptresult[:cut_off_index + 1] # Include the period or comma
|
|
else:
|
|
superpromptresult = superpromptresult # If neither period nor comma exists, keep the entire text
|
|
|
|
# piercing green eyes problem
|
|
# basically, the model has some biasses, lets get rid of it, OBP style!
|
|
if(common_dist(insanitylevel) and remove_bias): # but not always
|
|
superpromptresult = remove_superprompt_bias(superpromptresult=superpromptresult, insanitylevel=insanitylevel, override_outfit=override_outfit)
|
|
|
|
|
|
#print(words_to_check)
|
|
# Iterate through each word and check if it exists in the other string
|
|
i = 0
|
|
for word in words_to_check:
|
|
if word not in superpromptresult.lower() and word != "subject":
|
|
i += 1
|
|
|
|
|
|
if(i==0 or j == 20 or insanitylevel >= 9):
|
|
done = True
|
|
# slowly converge and change
|
|
else:
|
|
seed += 100
|
|
j += 1
|
|
if(temperature < 0.5):
|
|
temperature += 0.05 + round((1/random.randint(15,25)),2)
|
|
else:
|
|
temperature -= 0.1
|
|
|
|
if(top_p < 1.0):
|
|
top_p += 0.2 + round((1/random.randint(25,35)),2)
|
|
else:
|
|
top_p -= 0.3
|
|
max_new_tokens += 3
|
|
print("")
|
|
print(random.choice(devmessagessuperpromptlist) + "... Retrying...")
|
|
print("")
|
|
|
|
|
|
|
|
superpromptresult += " " + " ".join(allLoRA)
|
|
|
|
return superpromptresult
|
|
|
|
def remove_superprompt_bias(superpromptresult = "", insanitylevel = 5, override_outfit = ""):
|
|
|
|
if(" green eye" in superpromptresult):
|
|
eyecolorslist = csv_to_list("eyecolors")
|
|
eyecolorslist = [x for x in eyecolorslist if not x.startswith('-')]
|
|
neweyecolor = " " + random.choice(eyecolorslist).lower() + " eye"
|
|
#print(neweyecolor)
|
|
superpromptresult = superpromptresult.replace(" green eye", neweyecolor)
|
|
# white gown or white dress
|
|
if(" white gown" in superpromptresult
|
|
or " white dress" in superpromptresult
|
|
or " black suit" in superpromptresult):
|
|
colorcombinationslist = csv_to_list("colorcombinations")
|
|
colorcombinationslist = [x for x in colorcombinationslist if not x.startswith('-')]
|
|
colorslist = csv_to_list("colors")
|
|
colorslist = [x for x in colorslist if not x.startswith('-')]
|
|
if(normal_dist(insanitylevel)):
|
|
newcolordress = " " + random.choice(colorcombinationslist).lower() + " dress"
|
|
newcolorgown = " " + random.choice(colorcombinationslist).lower() + " gown"
|
|
newcolorsuit = " " + random.choice(colorcombinationslist).lower() + " suit"
|
|
else:
|
|
newcolordress = " " + random.choice(colorslist).lower() + " dress"
|
|
newcolorgown = " " + random.choice(colorslist).lower() + " gown"
|
|
newcolorsuit = " " + random.choice(colorcombinationslist).lower() + " suit"
|
|
#print(newcolordress)
|
|
#print(newcolorgown)
|
|
#print(newcolorsuit)
|
|
superpromptresult = superpromptresult.replace(" white dress", newcolordress)
|
|
superpromptresult = superpromptresult.replace(" white gown", newcolorgown)
|
|
superpromptresult = superpromptresult.replace(" black suit", newcolorsuit)
|
|
if(" gown" in superpromptresult
|
|
or " dress" in superpromptresult
|
|
or " suit" in superpromptresult
|
|
and not "gown" in override_outfit
|
|
and not "dress" in override_outfit
|
|
and not "suit " in override_outfit
|
|
and not " dressed" in superpromptresult
|
|
and not " suited" in superpromptresult):
|
|
if(override_outfit == ""):
|
|
outfitslist = csv_to_list("outfits")
|
|
outfitslist = [x for x in outfitslist if not x.startswith('-')]
|
|
newoutfit = " " + random.choice(outfitslist).lower()
|
|
else:
|
|
newoutfit = " " + override_outfit
|
|
superpromptresult = superpromptresult.replace(" dress", newoutfit)
|
|
superpromptresult = superpromptresult.replace(" gown", newoutfit)
|
|
superpromptresult = superpromptresult.replace(" suit", newoutfit)
|
|
if(" sleek " in superpromptresult):
|
|
|
|
descriptorslist = csv_to_list("descriptors")
|
|
descriptorslist = [x for x in descriptorslist if not x.startswith('-')]
|
|
newdescriptor = " " + random.choice(descriptorslist).lower() + " "
|
|
#print(newdescriptor)
|
|
|
|
superpromptresult = superpromptresult.replace(" sleek ", newdescriptor)
|
|
## lush green (meadow), sun shines down
|
|
# A graceful woman with long, flowing hair stands on a lush green lawn, her arms spread wide as she kneels gently in the breeze. The sun shines down on her
|
|
if("lush green meadow" in superpromptresult):
|
|
|
|
backgroundlist = csv_to_list("backgrounds")
|
|
backgroundlist = [x for x in backgroundlist if not x.startswith('-')]
|
|
newbackground = random.choice(backgroundlist).lower()
|
|
#print(newbackground)
|
|
|
|
superpromptresult = superpromptresult.replace("lush green meadow", newbackground)
|
|
|
|
if("long, flowing hair" in superpromptresult):
|
|
|
|
hairstylelist = csv_to_list("hairstyles2")
|
|
hairstylelist = [x for x in hairstylelist if not x.startswith('-')]
|
|
newhairstyle = random.choice(hairstylelist).lower()
|
|
#print(newhairstyle)
|
|
|
|
superpromptresult = superpromptresult.replace("long, flowing hair", newhairstyle)
|
|
|
|
return superpromptresult
|
|
|
|
def replace_user_wildcards(completeprompt):
|
|
for i in range(0,10):
|
|
user_wildcards_list = re.findall(r'-[\w_]*-', completeprompt)
|
|
for user_wildcard in user_wildcards_list:
|
|
user_wildcard_clean = user_wildcard.strip("-")
|
|
wordlist = csv_to_list(csvfilename=user_wildcard_clean, directory="./userfiles/wildcards/")
|
|
if(wordlist):
|
|
completeprompt = completeprompt.replace(user_wildcard, random.choice(wordlist),1)
|
|
|
|
return completeprompt
|
|
|
|
def translate_main_subject(main_subject=""):
|
|
subjecttype_lookup = {
|
|
"all": ["all", "all"],
|
|
"random": ["all", "all"],
|
|
"--- all": ["all", "all"],
|
|
"------all": ["all", "all"],
|
|
"------ all": ["all", "all"],
|
|
|
|
"object - all": ["object", "all"],
|
|
"--- object - all": ["object", "all"],
|
|
"object": ["object", "all"],
|
|
"object - generic": ["object", "all"],
|
|
"generic object": ["object", "generic objects"],
|
|
"generic objects": ["object", "generic objects"],
|
|
"genericobject": ["object", "generic objects"],
|
|
"genericobjects": ["object", "generic objects"],
|
|
"object - vehicle": ["object", "vehicles"],
|
|
"vehicle": ["object", "vehicles"],
|
|
"vehicles": ["object", "vehicles"],
|
|
"object - food": ["object", "food"],
|
|
"food": ["object", "food"],
|
|
"object - building": ["object", "buildings"],
|
|
"building": ["object", "buildings"],
|
|
"buildings": ["object", "buildings"],
|
|
"object - space": ["object", "space"],
|
|
"space": ["object", "space"],
|
|
"object - flora": ["object", "flora"],
|
|
"flora": ["object", "flora"],
|
|
"nature": ["object", "flora"],
|
|
|
|
"animal - all": ["animal", "all"],
|
|
"--- animal - all": ["animal", "all"],
|
|
"animal": ["animal", "all"],
|
|
"animals": ["animal", "all"],
|
|
"animal - generic": ["animal", "generic animal"],
|
|
"generic animal": ["animal", "generic animal"],
|
|
"generic animals": ["animal", "generic animal"],
|
|
"genericanimal": ["animal", "generic animal"],
|
|
"genericanimals": ["animal", "generic animal"],
|
|
"animal - cat": ["animal", "cat"],
|
|
"cat": ["animal", "cat"],
|
|
"cats": ["animal", "cat"],
|
|
"animal - dog": ["animal", "dog"],
|
|
"dog": ["animal", "dog"],
|
|
"dogs": ["animal", "dog"],
|
|
"animal - bird": ["animal", "bird"],
|
|
"bird": ["animal", "bird"],
|
|
"birds": ["animal", "bird"],
|
|
"animal - insect": ["animal", "insect"],
|
|
"insect": ["animal", "insect"],
|
|
"insects": ["animal", "insect"],
|
|
"animal - pokémon": ["animal", "pokemon"],
|
|
"animal - pokemon": ["animal", "pokemon"],
|
|
"pokemon": ["animal", "pokemon"],
|
|
"pokemons": ["animal", "pokemon"],
|
|
"pokémon": ["animal", "pokemon"],
|
|
"pokémons": ["animal", "pokemon"],
|
|
"animal - marine life": ["animal", "marine life"],
|
|
"marine life": ["animal", "marine life"],
|
|
"marinelife": ["animal", "marine life"],
|
|
"ocean gang": ["animal", "marine life"],
|
|
"oceangang": ["animal", "marine life"],
|
|
"marine": ["animal", "marine life"],
|
|
|
|
"human - all": ["humanoid", "all"],
|
|
"--- human - all": ["humanoid", "all"],
|
|
"human": ["humanoid", "all"],
|
|
"humans": ["humanoid", "all"],
|
|
"person": ["humanoid", "all"],
|
|
"persons": ["humanoid", "all"],
|
|
"people": ["humanoid", "all"],
|
|
"man": ["humanoid", "all"],
|
|
"woman": ["humanoid", "all"],
|
|
"male": ["humanoid", "all"],
|
|
"female": ["humanoid", "all"],
|
|
"guy": ["humanoid", "all"],
|
|
"girl": ["humanoid", "all"],
|
|
"human - generic": ["humanoid", "human"],
|
|
"generic human": ["humanoid", "human"],
|
|
"generic humans": ["humanoid", "human"],
|
|
"generichuman": ["humanoid", "human"],
|
|
"generichumans": ["humanoid", "human"],
|
|
"human - relations": ["humanoid","manwomanrelation"],
|
|
"relations": ["humanoid","manwomanrelation"],
|
|
"human relations": ["humanoid","manwomanrelation"],
|
|
"humanrelations": ["humanoid","manwomanrelation"],
|
|
"human - celebrity": ["humanoid","non fictional"],
|
|
"celebrities": ["humanoid","non fictional"],
|
|
"celebrity": ["humanoid","non fictional"],
|
|
"human - fictional": ["humanoid","fictional"],
|
|
"fictional characters": ["humanoid","fictional"],
|
|
"fictional character": ["humanoid","fictional"],
|
|
"fictionalcharacters": ["humanoid","fictional"],
|
|
"fictionalcharacter": ["humanoid","fictional"],
|
|
"fictional": ["humanoid","fictional"],
|
|
"human - humanoids": ["humanoid","humanoid"],
|
|
"humanoid": ["humanoid","humanoid"],
|
|
"humanoids": ["humanoid","humanoid"],
|
|
"human - job/title": ["humanoid","job"],
|
|
"job": ["humanoid","job"],
|
|
"jobs": ["humanoid","job"],
|
|
"title": ["humanoid","job"],
|
|
"titles": ["humanoid","job"],
|
|
"human - first name": ["humanoid","firstname"],
|
|
"first name": ["humanoid","firstname"],
|
|
"firstname": ["humanoid","firstname"],
|
|
"human - multiple": ["humanoid","manwomanmultiple"],
|
|
"multiplehumans": ["humanoid","manwomanmultiple"],
|
|
"multiple": ["humanoid","manwomanmultiple"],
|
|
|
|
"landscape - all": ["landscape","all"],
|
|
"--- landscape - all": ["landscape","all"],
|
|
"landscape": ["landscape","all"],
|
|
"landscapes": ["landscape","all"],
|
|
"landscape - generic": ["landscape","location"],
|
|
"landscape generic": ["landscape","location"],
|
|
"landscapes generic": ["landscape","location"],
|
|
"landscapegeneric": ["landscape","location"],
|
|
"landscapesgeneric": ["landscape","location"],
|
|
"genericlandscape": ["landscape","location"],
|
|
"generic landscape": ["landscape","location"],
|
|
"genericlandscapes": ["landscape","location"],
|
|
"generic landscapes": ["landscape","location"],
|
|
"landscape - fantasy": ["landscape","fantasy location"],
|
|
"landscape fantasy": ["landscape","fantasy location"],
|
|
"landscapefantasy": ["landscape","fantasy location"],
|
|
"fantasylandscape": ["landscape","fantasy location"],
|
|
"fantasy landscape": ["landscape","fantasy location"],
|
|
"landscape - videogame": ["landscape","videogame location"],
|
|
"landscape videogame": ["landscape","videogame location"],
|
|
"landscapevideogame": ["landscape","videogame location"],
|
|
"videogamelandscape": ["landscape","videogame location"],
|
|
"videogame landscape": ["landscape","videogame location"],
|
|
"landscape - sci-fi": ["landscape","sci-fi location"],
|
|
"landscape sci-fi": ["landscape","sci-fi location"],
|
|
"landscapesci-fi": ["landscape","sci-fi location"],
|
|
"sci-filandscape": ["landscape","sci-fi location"],
|
|
"sci-fi landscape": ["landscape","sci-fi location"],
|
|
"landscape - scifi": ["landscape","sci-fi location"],
|
|
"landscape scifi": ["landscape","sci-fi location"],
|
|
"landscapescifi": ["landscape","sci-fi location"],
|
|
"scifilandscape": ["landscape","sci-fi location"],
|
|
"scifi landscape": ["landscape","sci-fi location"],
|
|
"landscape - biome": ["landscape","biome"],
|
|
"landscape biome": ["landscape","biome"],
|
|
"landscapebiome": ["landscape","biome"],
|
|
"biomelandscape": ["landscape","biome"],
|
|
"biome landscape": ["landscape","biome"],
|
|
"biome": ["landscape","biome"],
|
|
"biomes": ["landscape","biome"],
|
|
"landscape - city": ["landscape","city"],
|
|
"landscape city": ["landscape","city"],
|
|
"landscapecity": ["landscape","city"],
|
|
"citylandscape": ["landscape","city"],
|
|
"city landscape": ["landscape","city"],
|
|
"city": ["landscape","city"],
|
|
"cities": ["landscape","city"],
|
|
|
|
"concept - all": ["concept", "all"],
|
|
"--- concept - all": ["concept", "all"],
|
|
"concept": ["concept", "all"],
|
|
"concepts": ["concept", "all"],
|
|
"concept - event": ["concept", "event"],
|
|
"event": ["concept", "event"],
|
|
"events": ["concept", "event"],
|
|
"concept - the x of y": ["concept", "concept"],
|
|
"xofy": ["concept", "concept"],
|
|
"thexofy": ["concept", "concept"],
|
|
"concept - poem lines": ["concept", "poemline"],
|
|
"poem": ["concept", "poemline"],
|
|
"poems": ["concept", "poemline"],
|
|
"poemline": ["concept", "poemline"],
|
|
"poemlines": ["concept", "poemline"],
|
|
"concept - song lines": ["concept", "songline"],
|
|
"song": ["concept", "songline"],
|
|
"songs": ["concept", "songline"],
|
|
"songline": ["concept", "songline"],
|
|
"songlines": ["concept", "songline"],
|
|
"concept - card names": ["concept", "cardname"],
|
|
"cards": ["concept", "cardname"],
|
|
"card": ["concept", "cardname"],
|
|
"cardgame": ["concept", "cardname"],
|
|
"cardgames": ["concept", "cardname"],
|
|
"cardname": ["concept", "cardname"],
|
|
"cardnames": ["concept", "cardname"],
|
|
"concept - episode titles": ["concept", "episodetitle"],
|
|
"episode": ["concept", "episodetitle"],
|
|
"episodes": ["concept", "episodetitle"],
|
|
"episodetitle": ["concept", "episodetitle"],
|
|
"episodetitles": ["concept", "episodetitle"],
|
|
"tv": ["concept", "episodetitle"],
|
|
"tv shows": ["concept", "episodetitle"],
|
|
"tvshows": ["concept", "episodetitle"],
|
|
"concept - mixer": ["concept", "conceptmixer"],
|
|
"concept mixer": ["concept", "conceptmixer"],
|
|
"conceptmixer": ["concept", "conceptmixer"],
|
|
"mixer": ["concept", "conceptmixer"],
|
|
}
|
|
|
|
subjecttype = subjecttype_lookup.get(main_subject, ["all", "all"])
|
|
|
|
return subjecttype |