1946 lines
88 KiB
Python
1946 lines
88 KiB
Python
import random
|
|
import re
|
|
from csv_reader import *
|
|
from random_functions import *
|
|
|
|
|
|
|
|
|
|
#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):
|
|
|
|
|
|
# load the config file
|
|
config = load_config_csv()
|
|
|
|
|
|
|
|
# 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("fictional characters",antilist)
|
|
nonfictionallist = csv_to_list("nonfictional characters",antilist)
|
|
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)
|
|
|
|
accessorielist = csv_to_list("accessories",antilist)
|
|
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)
|
|
humanactivitylist = csv_to_list("human_activities",antilist)
|
|
humanoidlist = csv_to_list("humanoids",antilist)
|
|
imagetypelist = csv_to_list("imagetypes",antilist)
|
|
joblist = csv_to_list("jobs",antilist)
|
|
lenslist = csv_to_list("lenses",antilist)
|
|
lightinglist = csv_to_list("lighting",antilist)
|
|
malefemalelist = csv_to_list("malefemale",antilist)
|
|
manwomanlist = csv_to_list("manwoman",antilist)
|
|
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("genderdescription", antilist)
|
|
minilocationlist = csv_to_list("minilocations", antilist)
|
|
minioutfitlist = csv_to_list("minioutfits", antilist)
|
|
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("manwomanrelations", antilist)
|
|
waterlocationlist = csv_to_list("waterlocations", antilist)
|
|
containerlist = csv_to_list("containers", antilist)
|
|
|
|
humanlist = fictionallist + nonfictionallist + humanoidlist
|
|
objecttotallist = objectlist + buildinglist + vehiclelist + foodlist + spacelist
|
|
|
|
# build artists list
|
|
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")
|
|
|
|
|
|
# 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/")
|
|
|
|
# special lists
|
|
backgroundtypelist = csv_to_list("backgroundtypes", antilist,"./csvfiles/special_lists/")
|
|
insideshotlist = csv_to_list("insideshots", antilist,"./csvfiles/special_lists/")
|
|
photoadditionlist = csv_to_list("photoadditions", antilist,"./csvfiles/special_lists/")
|
|
buildhairlist = csv_to_list("buildhair", antilist,"./csvfiles/special_lists/")
|
|
buildoutfitlist = csv_to_list("buildoutfit", antilist,"./csvfiles/special_lists/")
|
|
objectadditionslist = csv_to_list("objectadditions", antilist,"./csvfiles/special_lists/")
|
|
humanadditionlist = csv_to_list("humanadditions", antilist,"./csvfiles/special_lists/")
|
|
animaladditionlist = csv_to_list("animaladditions", antilist,"./csvfiles/special_lists/")
|
|
buildaccessorielist = csv_to_list("buildaccessorie", antilist,"./csvfiles/special_lists/")
|
|
minilocationadditionslist = csv_to_list("minilocationadditions", antilist,"./csvfiles/special_lists/")
|
|
overalladditionlist = csv_to_list("overalladditions", antilist,"./csvfiles/special_lists/")
|
|
imagetypemodelist = csv_to_list("imagetypemodes", antilist,"./csvfiles/special_lists/")
|
|
|
|
|
|
# subjects
|
|
mainchooserlist = []
|
|
objectwildcardlist = []
|
|
hybridlist = []
|
|
hybridhumanlist = []
|
|
humanoidsubjectchooserlist = []
|
|
eventsubjectchooserlist = []
|
|
addontolocationinsidelist = []
|
|
addontolocationlist = []
|
|
|
|
# load subjects stuff from config
|
|
generatevehicle = True
|
|
generateobject = True
|
|
generatefood = True
|
|
generatebuilding = True
|
|
generatespace = True
|
|
generateanimal = True
|
|
generatemanwoman = True
|
|
generatemanwomanrelation = True
|
|
generatefictionalcharacter = True
|
|
generatenonfictionalcharacter = True
|
|
generatehumanoids = True
|
|
generatejob = True
|
|
generatelandscape = True
|
|
generateevent = True
|
|
generateconcepts = True
|
|
generatepoemline = True
|
|
generatesongline = 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'
|
|
|
|
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'
|
|
|
|
|
|
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
|
|
# animals
|
|
if item[0] == 'subject_animal' and item[1] != 'on':
|
|
generateanimal = 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_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
|
|
# landscape
|
|
if item[0] == 'subject_landscape' and item[1] != 'on':
|
|
generatelandscape = 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] == 'poemline' and item[1] != 'on':
|
|
generatepoemline = False
|
|
if item[0] == 'songline' and item[1] != 'on':
|
|
generatesongline = 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] == '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]
|
|
|
|
|
|
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
|
|
generateobject = generatevehicle or generateobject or generatefood or generatebuilding or generatespace
|
|
|
|
|
|
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(generateobject):
|
|
mainchooserlist.append("object")
|
|
|
|
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
|
|
generatejob = bool(joblist) and generatejob
|
|
generatehumanoid = generatefictionalcharacter or generatenonfictionalcharacter or generatehumanoids or generatemanwoman or generatejob or generatemanwomanrelation
|
|
|
|
|
|
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(generatejob):
|
|
humanoidsubjectchooserlist.append("job")
|
|
|
|
if(generatehumanoid):
|
|
mainchooserlist.append("humanoid")
|
|
|
|
|
|
generateanimal = bool(animallist) and generateanimal
|
|
|
|
if(generateanimal):
|
|
mainchooserlist.append("animal")
|
|
hybridlist.append("-animal-")
|
|
|
|
generatelandscape = bool(locationlist) and generatelandscape
|
|
|
|
if(generatelandscape):
|
|
mainchooserlist.append("landscape")
|
|
addontolocationlist.append("-location-")
|
|
addontolocationinsidelist.append("-location-")
|
|
|
|
generateevent = bool(eventlist) and generateevent
|
|
generateconcepts = bool(conceptprefixlist) and bool(conceptsuffixlist) and generateconcepts
|
|
generatepoemline = bool(poemlinelist) and generatepoemline
|
|
generatesongline = bool(songlinelist) and generatesongline
|
|
|
|
|
|
|
|
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(generateconcept):
|
|
mainchooserlist.append("concept")
|
|
|
|
# determine wether we have a special mode or not
|
|
if(random.randint(1,int(imagemodechance)) == 1 and imagetype == "all" and giventypeofimage == ""):
|
|
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
|
|
# 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
|
|
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")
|
|
|
|
|
|
# main stuff
|
|
generatetype = not specialmode
|
|
generatesubject = not templatemode
|
|
|
|
# normals
|
|
generateartist = bool(artistlist) and not specialmode
|
|
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
|
|
generatequality = bool(qualitylist) and not specialmode
|
|
generateshot = bool(shotsizelist) and not specialmode
|
|
generatetimeperiod = bool(timeperiodlist) and not specialmode
|
|
generateemoji = bool(emojilist) and not templatemode
|
|
|
|
# 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
|
|
|
|
generateminilocationaddition = bool(minilocationadditionslist) and not specialmode
|
|
generateminivomit = bool(minivomitlist) and not specialmode
|
|
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
|
|
if(givensubject != "" and smartsubject == True):
|
|
|
|
# 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
|
|
|
|
# first get all the words
|
|
|
|
# Split the string by commas and spaces
|
|
words = re.split(r'[,\s]+', givensubject)
|
|
# 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
|
|
givensubjectlistsinglewords = list(set(words))
|
|
|
|
# now get all words clumped together by commas
|
|
if ',' in givensubject:
|
|
allwords = givensubject.split(',')
|
|
else:
|
|
allwords = [givensubject]
|
|
# 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
|
|
givensubjectlistwords = list(set(filter(None, words)))
|
|
|
|
givensubjectlist = givensubjectlistsinglewords + givensubjectlistwords
|
|
|
|
|
|
# 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"]
|
|
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"]
|
|
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"]
|
|
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
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
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] )
|
|
else:
|
|
completeprompt += chosentemplate.replace("-subject-",givensubject )
|
|
|
|
|
|
# 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"]
|
|
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"):
|
|
# sometimes interpret the animal as a human
|
|
if(random.randint(0,5) < 5):
|
|
subjectchooser = "animal"
|
|
else:
|
|
subjectchooser = "animal as human"
|
|
if(mainchooser == "humanoid"):
|
|
#humanoidsubjectchooserlist = ["human", "job", "fictional", "non fictional", "humanoid", "manwomanrelation"]
|
|
subjectchooser = random.choice(humanoidsubjectchooserlist)
|
|
if(mainchooser == "landscape"):
|
|
subjectchooser = "landscape"
|
|
if(mainchooser == "concept"):
|
|
#eventsubjectchooserlist = ["event", "concept"]
|
|
subjectchooser = random.choice(eventsubjectchooserlist)
|
|
|
|
|
|
|
|
# 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-, "
|
|
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-, "
|
|
|
|
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(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-, "
|
|
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 += "-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
|
|
completeprompt += " ("
|
|
|
|
|
|
|
|
# start artist part
|
|
|
|
artistsplacement = "front"
|
|
if(uncommon_dist(insanitylevel) and onlyartists == False):
|
|
artistsplacement = "back"
|
|
|
|
if(artists != "none" and artistsplacement == "front" and generateartist == True):
|
|
# take 1-3 artists, weighted to 1-2
|
|
step = random.randint(0, 1)
|
|
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 (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)):
|
|
isweighted = 1
|
|
|
|
if isweighted == 1:
|
|
completeprompt += " ("
|
|
|
|
#completeprompt = add_from_csv(completeprompt, "artists", 0, "art by ","")
|
|
completeprompt += "-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 += "] "
|
|
|
|
|
|
if(onlyartists == True):
|
|
|
|
# clean it up
|
|
completeprompt = cleanup(completeprompt)
|
|
|
|
print("only generated these artists:" + completeprompt)
|
|
return completeprompt
|
|
|
|
|
|
completeprompt += ", "
|
|
|
|
|
|
|
|
if artistmode in ["enhancing"]:
|
|
completeprompt += " ["
|
|
|
|
# start image type
|
|
|
|
if(giventypeofimage=="" and generatetype == True):
|
|
if(imagetype != "all" and imagetype != "all - force multiple" and imagetype != "only other types"):
|
|
|
|
completeprompt += " " + imagetype + ", "
|
|
elif(imagetype == "all - force multiple" or unique_dist(insanitylevel)):
|
|
amountofimagetypes = random.randint(2,3)
|
|
elif(imagetype == "only other types"):
|
|
othertype = 1
|
|
completeprompt += random.choice(othertypelist)
|
|
|
|
if(imagetype == "all" and chance_roll(insanitylevel, imagetypechance) and amountofimagetypes <= 1):
|
|
amountofimagetypes = 1
|
|
|
|
|
|
|
|
for i in range(amountofimagetypes):
|
|
# one in 6 images is a complex/other type
|
|
if(chance_roll(insanitylevel, imagetypequalitychance) and generateimagetypequality):
|
|
completeprompt += "-imagetypequality- "
|
|
if(random.randint(0,5) < 5):
|
|
completeprompt += " -imagetype-, "
|
|
else:
|
|
othertype = 1
|
|
completeprompt += " -othertype-, "
|
|
|
|
if(othertype==1):
|
|
completeprompt += " of a "
|
|
else:
|
|
completeprompt += ", "
|
|
elif(generatetype == True):
|
|
othertype = 1
|
|
completeprompt += giventypeofimage + " of a "
|
|
|
|
|
|
|
|
### 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):
|
|
completeprompt += " ,close up of a "
|
|
elif(mainchooser in ["landscape"] and generateshot == True):
|
|
completeprompt += " landscape of a "
|
|
elif(generateshot == True):
|
|
completeprompt += ", "
|
|
|
|
|
|
# start subject building
|
|
if(generatesubject == True):
|
|
# start with descriptive qualities
|
|
|
|
# Common to have 1 description, uncommon to have 2
|
|
if(chance_roll(insanitylevel, subjectdescriptor1chance) and generatedescriptors == True):
|
|
completeprompt += "-descriptor- "
|
|
|
|
if(chance_roll(insanitylevel, subjectdescriptor2chance) and generatedescriptors == True):
|
|
completeprompt += "-descriptor- "
|
|
|
|
if(subjectchooser in ["animal as human,","human", "job", "fictional", "non fictional", "humanoid", "manwomanrelation"] and chance_roll(insanitylevel, subjectbodytypechance) and generatebodytype == True):
|
|
completeprompt += "-bodytype- "
|
|
|
|
if(subjectchooser in ["object","animal as human,","human", "job", "fictional", "non fictional", "humanoid", "manwomanrelation"] and chance_roll(insanitylevel, subjectculturechance) and generatedescriptors == True):
|
|
completeprompt += "-culture- "
|
|
|
|
if(mainchooser == "object"):
|
|
objectwildcardlist = ["-object-", "-building-","-vehicle-","-food-", "-space-"] # using wildcards for replacements
|
|
|
|
# if we have a given subject, we should skip making an actual subject
|
|
if(givensubject == ""):
|
|
|
|
if rare_dist(insanitylevel):
|
|
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"):
|
|
|
|
# if we have a given subject, we should skip making an actual subject
|
|
if(givensubject == ""):
|
|
|
|
if rare_dist(insanitylevel):
|
|
hybridorswaplist = ["hybrid", "swap"]
|
|
hybridorswap = random.choice(hybridorswaplist)
|
|
completeprompt += "["
|
|
|
|
if(unique_dist(insanitylevel) and generateanimaladdition == True):
|
|
animaladdedsomething = 1
|
|
completeprompt += "-animaladdition- -animal- "
|
|
if(animaladdedsomething != 1):
|
|
completeprompt += "-animal- "
|
|
|
|
if(hybridorswap == "hybrid"):
|
|
if(uncommon_dist(insanitylevel)):
|
|
completeprompt += "|" + random.choice(hybridlist) + "] "
|
|
else:
|
|
completeprompt += "| -animal- ] "
|
|
if(hybridorswap == "swap"):
|
|
if(uncommon_dist(insanitylevel)):
|
|
completeprompt += ":" + random.choice(hybridlist) + ":" + str(random.randint(1,5)) + "] "
|
|
else:
|
|
completeprompt += ":-animal-:" + str(random.randint(1,5)) + "] "
|
|
else:
|
|
completeprompt += " " + givensubject + " "
|
|
|
|
hybridorswap = ""
|
|
|
|
# if we have a given subject, we should skip making an actual subject
|
|
if(mainchooser == "humanoid"):
|
|
if(givensubject==""):
|
|
|
|
if(subjectchooser == "human"):
|
|
completeprompt += "-manwoman- "
|
|
|
|
if(subjectchooser == "manwomanrelation"):
|
|
completeprompt += "-manwomanrelation- "
|
|
|
|
if(subjectchooser == "job"):
|
|
completeprompt += "-malefemale- "
|
|
completeprompt += "-job- "
|
|
|
|
if(subjectchooser == "fictional"):
|
|
if rare_dist(insanitylevel):
|
|
hybridorswaplist = ["hybrid", "swap"]
|
|
hybridorswap = random.choice(hybridorswaplist)
|
|
completeprompt += "["
|
|
|
|
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):
|
|
hybridorswaplist = ["hybrid", "swap"]
|
|
hybridorswap = random.choice(hybridorswaplist)
|
|
completeprompt += "["
|
|
|
|
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 rare_dist(insanitylevel):
|
|
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 = ""
|
|
|
|
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(subjectchooser == "landscape"):
|
|
|
|
# if we have a given subject, we should skip making an actual subject
|
|
if(givensubject == ""):
|
|
if rare_dist(insanitylevel):
|
|
hybridorswaplist = ["hybrid", "swap"]
|
|
hybridorswap = random.choice(hybridorswaplist)
|
|
completeprompt += "["
|
|
|
|
completeprompt += "-location- "
|
|
|
|
if(hybridorswap == "hybrid"):
|
|
completeprompt += "|" + "-location-" + "] "
|
|
if(hybridorswap == "swap"):
|
|
completeprompt += ":" + "-location-" + ":" + str(random.randint(1,5)) + "] "
|
|
else:
|
|
completeprompt += " " + givensubject + " "
|
|
|
|
hybridorswap = ""
|
|
|
|
# shots from inside can create cool effects in landscapes
|
|
if(chanceroll(insanitylevel, subjectlandscapeaddonlocationchance)):
|
|
insideshot = 1
|
|
completeprompt += " from inside of a -addontolocationinside- "
|
|
|
|
if(chance_roll(insanitylevel, subjectlandscapeaddonlocationchance) and insideshot == 0):
|
|
completeprompt += " and "
|
|
if(chance_roll(insanitylevel, subjectlandscapeaddonlocationdescriptorchance)):
|
|
completeprompt += "-descriptor- "
|
|
if(chance_roll(insanitylevel, subjectlandscapeaddonlocationculturechance)):
|
|
completeprompt += "-culture- "
|
|
|
|
#addontolocation = [locationlist,buildinglist, vehiclelist]
|
|
completeprompt += "-addontolocation- "
|
|
|
|
|
|
if(mainchooser == "concept"):
|
|
if(givensubject == ""):
|
|
if(subjectchooser == "event"):
|
|
completeprompt += " \"" + random.choice(eventlist) + "\" "
|
|
|
|
if(subjectchooser == "concept"):
|
|
completeprompt += " \" The -conceptprefix- of -conceptsuffix- \" "
|
|
|
|
if(subjectchooser == "poemline"):
|
|
completeprompt += " \" -poemline- \" "
|
|
|
|
if(subjectchooser == "songline"):
|
|
completeprompt += " \" -songline- \" "
|
|
else:
|
|
completeprompt += " " + givensubject + " "
|
|
|
|
|
|
|
|
# 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(subjectchooser in ["animal as human,","human","fictional", "non fictional", "humanoid", "manwomanrelation"] 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(subjectchooser in ["animal as human,","human","fictional", "non fictional", "humanoid", "manwomanrelation"] and legendary_dist(insanitylevel) and generateemoji== True):
|
|
completeprompt += "-emoji-, "
|
|
|
|
|
|
# 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(subjectchooser in ["animal as human","human","fictional", "non fictional", "humanoid", "manwomanrelation"] and normal_dist(insanitylevel) and humanspecial != 1 and generatesubject == True):
|
|
joboractivitylist = [joblist,humanactivitylist]
|
|
completeprompt += random.choice(random.choice(joboractivitylist)) + ", "
|
|
|
|
|
|
# if(subjectchooser in ["animal as human","human","job", "fictional", "non fictional", "humanoid"] and legendary_dist(insanitylevel)):
|
|
# skintypelist = ["-color-", "-material-"]
|
|
# completeprompt += ", with " + random.choice(skintypelist) + " skin, "
|
|
|
|
# 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(subjectchooser in ["animal as human","human","fictional", "non fictional", "humanoid", "manwomanrelation"] and chance_roll(insanitylevel, outfitchance) and generateoutfit == True and humanspecial != 1):
|
|
completeprompt += ", wearing " + random.choice(buildoutfitlist) + ", "
|
|
|
|
if(subjectchooser in ["animal as human","human","fictional", "non fictional", "humanoid", "manwomanrelation"] 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"] and chance_roll(insanitylevel, hairchance) and generatehairstyle == True):
|
|
completeprompt += random.choice(buildhairlist) + ", "
|
|
|
|
if(subjectchooser in ["animal as human,","human","fictional", "non fictional", "humanoid", "manwomanrelation"] 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-, "
|
|
|
|
|
|
|
|
# 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-, "
|
|
|
|
|
|
|
|
# others
|
|
if(chance_roll(insanitylevel, 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-, "
|
|
|
|
#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) and generatequality == True):
|
|
completeprompt += "-quality-, "
|
|
if(chance_roll(insanitylevel, quality2chance)):
|
|
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 += ":1.3), "
|
|
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
|
|
|
|
# custom style list
|
|
if(uncommon_dist(insanitylevel) and generatestyle == True):
|
|
completeprompt += "-styletilora-, "
|
|
if(uncommon_dist(insanitylevel)):
|
|
completeprompt += "-styletilora-, "
|
|
|
|
|
|
# custom suffix list
|
|
if(uncommon_dist(insanitylevel) and generatecustominputsuffix == True):
|
|
completeprompt += random.choice(custominputsuffixlist) + ", "
|
|
if(uncommon_dist(insanitylevel)):
|
|
completeprompt += random.choice(custominputsuffixlist) + ", "
|
|
|
|
|
|
|
|
if artistmode in ["enhancing"]:
|
|
completeprompt += "::" + str(random.randint(1,17)) + "] "
|
|
|
|
|
|
|
|
if(artists != "none" and artistsplacement == "back" and generateartist == True):
|
|
completeprompt += ", "
|
|
# take 1-3 artists, weighted to 1-2
|
|
step = random.randint(0, 1)
|
|
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 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)):
|
|
isweighted = 1
|
|
|
|
if isweighted == 1:
|
|
completeprompt += " ("
|
|
|
|
#completeprompt = add_from_csv(completeprompt, "artists", 0, "art by ","")
|
|
completeprompt += "-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
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
# 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)
|
|
|
|
|
|
|
|
|
|
# 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
|
|
"-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
|
|
"-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
|
|
"-artistfantasy-" in completeprompt or
|
|
"-artistpopular-" in completeprompt or
|
|
"-artistromanticism-" in completeprompt or
|
|
"-artistphotography-" 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
|
|
"-waterlocation-" in completeprompt or
|
|
"-container-" 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-", "-brand-", "-space-", "-artist-", "-imagetype-", "-othertype-", "-quality-", "-lighting-", "-camera-", "-lens-","-imagetypequality-", "-poemline-", "-songline-", "-greatwork-", "-artistfantasy-", "-artistpopular-", "-artistromanticism-", "-artistphotography-", "-emoji-", "-timeperiod-", "-shotsize-", "-musicgenre-", "-animaladdition-", "-addontolocationinside-", "-addontolocation-", "-objectaddition-", "-humanaddition-", "-overalladdition-", "-focus-", "-direction-", "-styletilora-", "-manwomanrelation-", "-waterlocation-", "-container-"]
|
|
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, 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]
|
|
|
|
allwildcardslistwithhybrid = ["-material-", "-descriptor-", "-outfit-", "-conceptsuffix-","-culture-", "-objecttotal-"]
|
|
allwildcardslistwithhybridlists = [materiallist, descriptorlist,outfitlist,conceptsuffixlist,culturelist, objecttotallist]
|
|
|
|
|
|
# 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)
|
|
|
|
|
|
|
|
for wildcard in allwildcardslistwithhybrid:
|
|
attachedlist = allwildcardslistwithhybridlists[allwildcardslistwithhybrid.index(wildcard)]
|
|
completeprompt = replacewildcard(completeprompt, insanitylevel, wildcard, attachedlist,True)
|
|
|
|
|
|
|
|
|
|
# clean it up
|
|
completeprompt = cleanup(completeprompt)
|
|
|
|
#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)
|
|
return completeprompt
|
|
|
|
|
|
# function
|
|
def replacewildcard(completeprompt, insanitylevel, wildcard,listname, activatehybridorswap):
|
|
|
|
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):
|
|
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)
|
|
listname.remove(replacementvalue)
|
|
if(wildcard == "-artist-"):
|
|
replacementvalue = "art by " + replacementvalue
|
|
|
|
else:
|
|
replacementvalue = ""
|
|
|
|
completeprompt = completeprompt.replace(wildcard, replacementvalue,1)
|
|
|
|
|
|
return completeprompt
|
|
|
|
def cleanup(completeprompt):
|
|
|
|
# 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)
|
|
|
|
|
|
|
|
# sometimes if there are not enough artist, we get left we things formed as (:1.2)
|
|
completeprompt = re.sub('\(\:\d+\.\d+\)', '', completeprompt)
|
|
|
|
# all cleanup steps moved here
|
|
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(',::', '::', 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)
|
|
|
|
while " " in completeprompt:
|
|
completeprompt = re.sub(' ', ' ', completeprompt)
|
|
completeprompt = re.sub('a 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('(?<!\()\s?\(', ' (', completeprompt)
|
|
completeprompt = re.sub('\)(?![\s)])', ') ', completeprompt)
|
|
|
|
# Move the extracted LoRA's to the end of completeprompt
|
|
completeprompt += " " + " ".join(allLoRA)
|
|
|
|
completeprompt = completeprompt.strip(", ")
|
|
|
|
return completeprompt |