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('(?