Merge pull request #83 from AIrjen/csv_to_control_generation

Csv to control generation
This commit is contained in:
AIrjen
2023-07-09 09:23:15 +02:00
committed by GitHub
31 changed files with 4497 additions and 1850 deletions
+1
View File
@@ -1,3 +1,4 @@
*.pyc
userfiles/antilist.csv
userfiles/config.csv
+1
View File
@@ -25,6 +25,7 @@ A simple user guide for first time use and settings is available [here](https://
- Use __wildcards__, or __combine with Dynamic Prompts__ extension ==> [guide to using wildcards and Dynamic Prompts](https://github.com/AIrjen/OneButtonPrompt/blob/main/user_guides/wildcards_and_dynamic_prompts_extension.md)
- Has a set of __template prompts__ from various sources, __fully wildcarded__ and usable with Subject Override ==> [guide to prompt templates](https://github.com/AIrjen/OneButtonPrompt/blob/main/user_guides/templates.md)
- Has multiple __prompt generation modes__ to choose from ==> [guide to prompt generation modes](https://github.com/AIrjen/OneButtonPrompt/blob/main/user_guides/prompt_generation_modes.md)
- Stay in control, and fine-tune One Button Prompt with a __config__ file ==> [config file](https://github.com/AIrjen/OneButtonPrompt/blob/main/user_guides/config_file.md)
## How to use in automatic1111
In TXT2IMG or IMG2IMG, select the script "One Button Prompt".
+441 -96
View File
@@ -10,9 +10,14 @@ from random_functions import *
# 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):
def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all", imagetype = "all", onlyartists = False, antivalues = "", prefixprompt = "", suffixprompt ="",promptcompounderlevel ="1", seperator = "comma", givensubject="",smartsubject = True,giventypeofimage="", imagemodechance = 20, gender = "all", subtypeobject="all", subtypehumanoid="all", subtypeconcept="all"):
# 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 = []
@@ -27,8 +32,8 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
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)
fictionallist = csv_to_list(csvfilename="fictional characters",antilist=antilist,skipheader=True,gender=gender)
nonfictionallist = csv_to_list(csvfilename="nonfictional characters",antilist=antilist,skipheader=True,gender=gender)
conceptsuffixlist = csv_to_list("concept_suffix",antilist)
buildinglist = csv_to_list("buildings",antilist)
vehiclelist = csv_to_list("vehicles",antilist)
@@ -57,8 +62,8 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
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)
malefemalelist = csv_to_list(csvfilename="malefemale",antilist=antilist,skipheader=True,gender=gender)
manwomanlist = csv_to_list(csvfilename="manwoman",antilist=antilist,skipheader=True,gender=gender)
moodlist = csv_to_list("moods",antilist)
othertypelist = csv_to_list("othertypes",antilist)
poselist = csv_to_list("poses",antilist)
@@ -67,7 +72,7 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
timeperiodlist = csv_to_list("timeperiods",antilist)
vomitlist = csv_to_list("vomit",antilist)
foodlist = csv_to_list("foods", antilist)
genderdescriptionlist = csv_to_list("genderdescription", antilist)
genderdescriptionlist = csv_to_list(csvfilename="genderdescription",antilist=antilist,skipheader=True,gender=gender)
minilocationlist = csv_to_list("minilocations", antilist)
minioutfitlist = csv_to_list("minioutfits", antilist)
seasonlist = csv_to_list("seasons", antilist)
@@ -80,12 +85,14 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
poemlinelist = csv_to_list("poemlines", antilist)
songlinelist = csv_to_list("songlines", antilist)
musicgenrelist = csv_to_list("musicgenres", antilist)
manwomanrelationlist = csv_to_list("manwomanrelations", antilist)
manwomanrelationlist = csv_to_list(csvfilename="manwomanrelations",antilist=antilist,skipheader=True,gender=gender)
waterlocationlist = csv_to_list("waterlocations", antilist)
containerlist = csv_to_list("containers", antilist)
firstnamelist = csv_to_list(csvfilename="firstnames",antilist=antilist,skipheader=True,gender=gender)
floralist = csv_to_list("flora", antilist)
humanlist = fictionallist + nonfictionallist + humanoidlist
objecttotallist = objectlist + buildinglist + vehiclelist + foodlist + spacelist
objecttotallist = objectlist + buildinglist + vehiclelist + foodlist + spacelist + floralist
# build artists list
artistlist = []
@@ -145,12 +152,287 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
addontolocationinsidelist = []
addontolocationlist = []
generatevehicle = bool(vehiclelist)
generateobject = bool(objectlist)
generatefood = bool(foodlist)
generatebuilding = bool(buildinglist)
generatespace = bool(spacelist)
generateobject = generatevehicle + generateobject + generatefood + generatebuilding + generatespace
# load subjects stuff from config
generatevehicle = True
generateobject = True
generatefood = True
generatebuilding = True
generatespace = True
generateflora = True
generateanimal = True
generatemanwoman = True
generatemanwomanrelation = True
generatefictionalcharacter = True
generatenonfictionalcharacter = True
generatehumanoids = True
generatejob = True
generatefirstnames = 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'
emojichance = 'legendary'
joboractivitychance = 'normal'
custominputmidrepeats = 2
custominputmidchance = 'uncommon'
minivomitmidchance = 'unique'
outfitchance = 'normal'
posechance = 'uncommon'
hairchance = 'normal'
accessorychance = 'normal'
humanoidinsideshotchance = 'legendary'
humanoidbackgroundchance = 'uncommon'
landscapeminilocationchance = 'uncommon'
generalminilocationchance = 'rare'
timperiodchance = 'normal'
focuschance = 'normal'
directionchance = 'normal'
moodchance = 'normal'
minivomitsuffixchance = 'unique'
artmovementchance = 'normal'
lightingchance = 'normal'
photoadditionchance = 'common'
lenschance = 'normal'
colorschemechance = 'normal'
vomit1chance = 'uncommon'
vomit2chance= 'uncommon'
greatworkchance = 'novel'
poemlinechance = 'novel'
songlinechance = 'novel'
quality1chance = 'uncommon'
quality2chance = 'uncommon'
customstyle1chance = 'uncommon'
customstyle2chance = 'uncommon'
custominputsuffixrepeats = 2
custominputsuffixchance = 'uncommon'
artistsatbackchance = 'uncommon'
for item in config:
# objects
if item[0] == 'subject_vehicle' and item[1] != 'on':
generatevehicle = False
if item[0] == 'subject_object' and item[1] != 'on':
generateobject = False
if item[0] == 'subject_food' and item[1] != 'on':
generatefood = False
if item[0] == 'subject_building' and item[1] != 'on':
generatebuilding = False
if item[0] == 'subject_space' and item[1] != 'on':
generatespace = False
if item[0] == 'subject_flora' and item[1] != 'on':
generateflora = False
# 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
if item[0] == 'subject_firstnames' and item[1] != 'on':
generatefirstnames = 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] == 'emojichance':
emojichance = item[1]
if item[0] == 'joboractivitychance':
joboractivitychance = item[1]
if item[0] == 'custominputmidrepeats':
custominputmidrepeats = int(item[1])
if item[0] == 'custominputmidchance':
custominputmidchance = item[1]
if item[0] == 'minivomitmidchance':
minivomitmidchance = item[1]
if item[0] == 'outfitchance':
outfitchance = item[1]
if item[0] == 'posechance':
posechance = item[1]
if item[0] == 'hairchance':
hairchance = item[1]
if item[0] == 'accessorychance':
accessorychance = item[1]
if item[0] == 'humanoidinsideshotchance':
humanoidinsideshotchance = item[1]
if item[0] == 'humanoidbackgroundchance':
humanoidbackgroundchance = item[1]
if item[0] == 'landscapeminilocationchance':
landscapeminilocationchance = item[1]
if item[0] == 'generalminilocationchance':
generalminilocationchance = item[1]
if item[0] == 'timperiodchance':
timperiodchance = item[1]
if item[0] == 'focuschance':
focuschance = item[1]
if item[0] == 'directionchance':
directionchance = item[1]
if item[0] == 'moodchance':
moodchance = item[1]
if item[0] == 'minivomitsuffixchance':
minivomitsuffixchance = item[1]
if item[0] == 'artmovementchance':
artmovementchance = item[1]
if item[0] == 'lightingchance':
lightingchance = item[1]
if item[0] == 'photoadditionchance':
photoadditionchance = item[1]
if item[0] == 'lenschance':
lenschance = item[1]
if item[0] == 'colorschemechance':
colorschemechance = item[1]
if item[0] == 'vomit1chance':
vomit1chance = item[1]
if item[0] == 'vomit2chance':
vomit2chance = item[1]
if item[0] == 'greatworkchance':
greatworkchance = item[1]
if item[0] == 'poemlinechance':
poemlinechance = item[1]
if item[0] == 'songlinechance':
songlinechance = item[1]
if item[0] == 'quality1chance':
quality1chance = item[1]
if item[0] == 'quality2chance':
quality2chance = item[1]
if item[0] == 'customstyle1chance':
customstyle1chance = item[1]
if item[0] == 'customstyle2chance':
customstyle2chance = item[1]
if item[0] == 'custominputsuffixrepeats':
custominputsuffixrepeats = int(item[1])
if item[0] == 'custominputsuffixchance':
custominputsuffixchance = item[1]
if item[0] == 'artistsatbackchance':
artistsatbackchance = item[1]
generatevehicle = bool(vehiclelist) and generatevehicle
generateobject = bool(objectlist) and generateobject
generatefood = bool(foodlist) and generatefood
generatebuilding = bool(buildinglist) and generatebuilding
generatespace = bool(spacelist) and generatespace
generateflora = bool(floralist) and generateflora
generateobject = generatevehicle or generateobject or generatefood or generatebuilding or generatespace or generateflora
if(generatevehicle):
@@ -177,16 +459,22 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
addontolocationlist.append("-building-")
addontolocationinsidelist.append("-building-")
if(generateflora):
objectwildcardlist.append("-flora-")
hybridlist.append("-flora-")
addontolocationlist.append("-flora-")
if(generateobject):
mainchooserlist.append("object")
generatefictionalcharacter = bool(fictionallist)
generatenonfictionalcharacter = bool(nonfictionallist)
generatehumanoids = bool(humanoidlist)
generatemanwoman = bool(manwomanlist)
generatemanwomanrelation = bool(manwomanrelationlist)
generatejob = bool(joblist)
generatehumanoid = generatefictionalcharacter + generatenonfictionalcharacter + generatehumanoids + generatemanwoman + generatejob + generatemanwomanrelation
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
generatefirstnames = bool(firstnamelist) and generatefirstnames
generatehumanoid = generatefictionalcharacter or generatenonfictionalcharacter or generatehumanoids or generatemanwoman or generatejob or generatemanwomanrelation or generatefirstnames
if(generatefictionalcharacter):
@@ -215,25 +503,28 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
if(generatehumanoid):
mainchooserlist.append("humanoid")
if(generatefirstnames):
humanoidsubjectchooserlist.append("firstname")
generateanimal = bool(animallist)
generateanimal = bool(animallist) and generateanimal
if(generateanimal):
mainchooserlist.append("animal")
hybridlist.append("-animal-")
generatelandscape = bool(locationlist)
generatelandscape = bool(locationlist) and generatelandscape
if(generatelandscape):
mainchooserlist.append("landscape")
addontolocationlist.append("-location-")
addontolocationinsidelist.append("-location-")
generateevent = bool(eventlist)
generateconcepts = bool(conceptprefixlist) + bool(conceptsuffixlist)
generatepoemline = bool(poemlinelist)
generatesongline = bool(songlinelist)
generateevent = bool(eventlist) and generateevent
generateconcepts = bool(conceptprefixlist) and bool(conceptsuffixlist) and generateconcepts
generatepoemline = bool(poemlinelist) and generatepoemline
generatesongline = bool(songlinelist) and generatesongline
@@ -353,9 +644,9 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
generateminilocationaddition = bool(minilocationadditionslist) and not specialmode
generateminivomit = bool(minivomitlist) and not specialmode
generateimagetypequality = bool(imagetypequalitylist) and not specialmode
generateimagetypequality = bool(imagetypequalitylist) and not specialmode and generateimagetypequality
generateoveralladdition = bool(overalladditionlist) and not specialmode
generateimagetype = bool(imagetypelist) and not specialmode
generateimagetype = bool(imagetypelist) and not specialmode and generateimagetype
# Smart subject logic
@@ -569,8 +860,8 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
# custom prefix list
for i in range(2):
if(uncommon_dist(insanitylevel) and generatecustominputprefix == True):
for i in range(custominputprefixrepeats):
if(chance_roll(insanitylevel, custominputprefixchance) and generatecustominputprefix == True):
completeprompt += random.choice(custominputprefixlist) + ", "
@@ -579,7 +870,7 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
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))
# 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"]
@@ -597,13 +888,37 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
else:
subjectchooser = "animal as human"
if(mainchooser == "humanoid"):
#humanoidsubjectchooserlist = ["human", "job", "fictional", "non fictional", "humanoid", "manwomanrelation"]
#humanoidsubjectchooserlist = ["human", "job", "fictional", "non fictional", "humanoid", "manwomanrelation", "firstname"]
subjectchooser = random.choice(humanoidsubjectchooserlist)
if(subtypehumanoid != "all"):
if(subtypehumanoid == "generic humans"):
subjectchooser = "human"
if(subtypehumanoid == "generic human relations"):
subjectchooser = "manwomanrelation"
if(subtypehumanoid == "celebrities e.a."):
subjectchooser = "non fictional"
if(subtypehumanoid == "fictional characters"):
subjectchooser = "fictional"
if(subtypehumanoid == "humanoids"):
subjectchooser = "humanoid"
if(subtypehumanoid == "based on job or title"):
subjectchooser = "job"
if(subtypehumanoid == "based on first name"):
subjectchooser = "firstname"
if(mainchooser == "landscape"):
subjectchooser = "landscape"
if(mainchooser == "concept"):
#eventsubjectchooserlist = ["event", "concept"]
#eventsubjectchooserlist = ["event", "concept", "poemline", "songline"]
subjectchooser = random.choice(eventsubjectchooserlist)
if(subtypeconcept != "all"):
if(subtypeconcept == "event"):
subjectchooser = "event"
if(subtypeconcept == "the X of Y concepts"):
subjectchooser = "concept"
if(subtypeconcept == "lines from poems"):
subjectchooser = "poemline"
if(subtypeconcept == "lines from songs"):
subjectchooser = "songline"
@@ -744,7 +1059,7 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
# start artist part
artistsplacement = "front"
if(uncommon_dist(insanitylevel) and onlyartists == False):
if(chance_roll(insanitylevel, artistsatbackchance) and onlyartists == False):
artistsplacement = "back"
if(artists != "none" and artistsplacement == "front" and generateartist == True):
@@ -850,14 +1165,14 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
othertype = 1
completeprompt += random.choice(othertypelist)
if(imagetype == "all" and normal_dist(insanitylevel) and amountofimagetypes <= 1):
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(rare_dist(insanitylevel) and generateimagetypequality):
if(chance_roll(insanitylevel, imagetypequalitychance) and generateimagetypequality):
completeprompt += "-imagetypequality- "
if(random.randint(0,5) < 5):
completeprompt += " -imagetype-, "
@@ -876,22 +1191,22 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
### here we can do some other stuff to spice things up
if(unique_dist(insanitylevel) and generateminilocationaddition == True):
if(chance_roll(insanitylevel, minilocationadditionchance) and generateminilocationaddition == True):
completeprompt += " -minilocationaddition-, "
if(unique_dist(insanitylevel) and generateartmovement == True):
if(chance_roll(insanitylevel, artmovementprefixchance) and generateartmovement == True):
generateartmovement = False
completeprompt += " -artmovement-, "
if(rare_dist(insanitylevel) and generateminivomit == True):
if(chance_roll(insanitylevel, minivomitprefix1chance) and generateminivomit == True):
completeprompt += " -minivomit-, "
if(unique_dist(insanitylevel) and generateminivomit == True):
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 uncommon_dist(insanitylevel)):
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 "
@@ -906,20 +1221,33 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
# start with descriptive qualities
# Common to have 1 description, uncommon to have 2
if(common_dist(insanitylevel) and generatedescriptors == True):
if(chance_roll(insanitylevel, subjectdescriptor1chance) and generatedescriptors == True):
completeprompt += "-descriptor- "
if(uncommon_dist(insanitylevel) and generatedescriptors == True):
if(chance_roll(insanitylevel, subjectdescriptor2chance) and generatedescriptors == True):
completeprompt += "-descriptor- "
if(subjectchooser in ["animal as human,","human", "job", "fictional", "non fictional", "humanoid", "manwomanrelation"] and normal_dist(insanitylevel) and generatebodytype == True):
if(subjectchooser in ["animal as human,","human", "job", "fictional", "non fictional", "humanoid", "manwomanrelation","firstname"] 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 normal_dist(insanitylevel) and generatedescriptors == True):
if(subjectchooser in ["object","animal as human,","human", "job", "fictional", "non fictional", "humanoid", "manwomanrelation","firstname"] 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 an overwrite, then make sure we only take the override
if(subtypeobject != "all"):
if(subtypeobject == "generic objects"):
objectwildcardlist = ["-object-"]
if(subtypeobject == "vehicles"):
objectwildcardlist = ["-vehicle-"]
if(subtypeobject == "food"):
objectwildcardlist = ["-food-"]
if(subtypeobject == "buildings"):
objectwildcardlist = ["-building-"]
if(subtypeobject == "space"):
objectwildcardlist = ["-space-"]
if(subtypeobject == "flora"):
objectwildcardlist = ["-flora-"]
# if we have a given subject, we should skip making an actual subject
if(givensubject == ""):
@@ -1026,6 +1354,8 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
hybridorswap = ""
if(subjectchooser == "humanoid"):
if(gender != "all"):
completeprompt += "-malefemale- "
if rare_dist(insanitylevel):
hybridorswaplist = ["hybrid", "swap"]
hybridorswap = random.choice(hybridorswaplist)
@@ -1039,11 +1369,26 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
completeprompt += ":" + random.choice(hybridhumanlist) + ":" + str(random.randint(1,5)) + "] "
hybridorswap = ""
if(subjectchooser == "firstname"):
if rare_dist(insanitylevel):
hybridorswaplist = ["hybrid", "swap"]
hybridorswap = random.choice(hybridorswaplist)
completeprompt += "["
completeprompt += "-firstname- "
if(hybridorswap == "hybrid"):
completeprompt += "|" + "-firstname-" + "] "
if(hybridorswap == "swap"):
completeprompt += ":" + "-firstname-" + ":" + str(random.randint(1,5)) + "] "
hybridorswap = ""
else:
completeprompt += " " + givensubject + " "
# sometimes add a suffix for more fun!
if( (mainchooser == "humanoid" or mainchooser == "animal" or mainchooser == "object") and unique_dist(insanitylevel)):
if( (mainchooser == "humanoid" or mainchooser == "animal" or mainchooser == "object") and chance_roll(insanitylevel, subjectconceptsuffixchance)):
completeprompt += " of -conceptsuffix- "
if(subjectchooser == "landscape"):
@@ -1067,15 +1412,15 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
hybridorswap = ""
# shots from inside can create cool effects in landscapes
if(unique_dist(insanitylevel)):
if(chanceroll(insanitylevel, subjectlandscapeaddonlocationchance)):
insideshot = 1
completeprompt += " from inside of a -addontolocationinside- "
if(normal_dist(insanitylevel) and insideshot == 0):
if(chance_roll(insanitylevel, subjectlandscapeaddonlocationchance) and insideshot == 0):
completeprompt += " and "
if(rare_dist(insanitylevel)):
if(chance_roll(insanitylevel, subjectlandscapeaddonlocationdescriptorchance)):
completeprompt += "-descriptor- "
if(rare_dist(insanitylevel)):
if(chance_roll(insanitylevel, subjectlandscapeaddonlocationculturechance)):
completeprompt += "-culture- "
#addontolocation = [locationlist,buildinglist, vehiclelist]
@@ -1101,20 +1446,20 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
# object additions
for i in range(2):
if(mainchooser == "object" and uncommon_dist(insanitylevel) and generateobjectaddition == True):
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 rare_dist(insanitylevel) and generatehumanaddition == True):
if(subjectchooser in ["animal as human,","human","fictional", "non fictional", "humanoid", "manwomanrelation","firstname"] and chance_roll(insanitylevel, humanadditionchance) and generatehumanaddition == True):
humanspecial = 1
completeprompt += "-humanaddition- "
completeprompt += ", "
# unique additions for all types:
if(extraordinary_dist(insanitylevel) and generateoveralladdition == True):
if(chance_roll(insanitylevel, overalladditionchance) and generateoveralladdition == True):
completeprompt += "-overalladdition- "
@@ -1123,7 +1468,7 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
# 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):
if(subjectchooser in ["animal as human,","human","fictional", "non fictional", "humanoid", "manwomanrelation","firstname"] and chance_roll(insanitylevel, emojichance) and generateemoji== True):
completeprompt += "-emoji-, "
@@ -1134,7 +1479,7 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
# 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):
if(subjectchooser in ["animal as human","human","fictional", "non fictional", "humanoid", "manwomanrelation","firstname"] and chance_roll(insanitylevel, joboractivitychance) and humanspecial != 1 and generatesubject == True):
joboractivitylist = [joblist,humanactivitylist]
completeprompt += random.choice(random.choice(joboractivitylist)) + ", "
@@ -1144,110 +1489,109 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
# completeprompt += ", with " + random.choice(skintypelist) + " skin, "
# custom mid list
if(uncommon_dist(insanitylevel) and generatecustominputmid == True):
completeprompt += random.choice(custominputmidlist) + ", "
if(uncommon_dist(insanitylevel)):
for i in range(custominputmidrepeats):
if(chance_roll(insanitylevel, custominputmidchance) and generatecustominputmid == True):
completeprompt += random.choice(custominputmidlist) + ", "
# add in some more mini vomits
if(unique_dist(insanitylevel) and generateminivomit == True):
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 normal_dist(insanitylevel) and generateoutfit == True and humanspecial != 1):
if(subjectchooser in ["animal as human","human","fictional", "non fictional", "humanoid", "manwomanrelation", "firstname"] 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 uncommon_dist(insanitylevel) and humanspecial != 1 and generatepose == True):
if(subjectchooser in ["animal as human","human","fictional", "non fictional", "humanoid", "manwomanrelation", "firstname"] and chance_roll(insanitylevel, posechance) and humanspecial != 1 and generatepose == True):
completeprompt += random.choice(poselist) + ", "
if(subjectchooser in ["human","job","fictional", "non fictional", "humanoid", "manwomanrelation"] and normal_dist(insanitylevel) and generatehairstyle == True):
if(subjectchooser in ["human","job","fictional", "non fictional", "humanoid", "manwomanrelation", "firstname"] 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 normal_dist(insanitylevel) and generateaccessorie == True and generateaccessories == True):
if(subjectchooser in ["animal as human,","human","fictional", "non fictional", "humanoid", "manwomanrelation", "firstname"] and chance_roll(insanitylevel, accessorychance) and generateaccessorie == True and generateaccessories == True):
completeprompt += random.choice(buildaccessorielist) + ", "
if(legendary_dist(insanitylevel) and subjectchooser not in ["landscape", "concept"] and generateinsideshot == True):
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 uncommon_dist(insanitylevel) and generatebackground == True):
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 uncommon_dist(insanitylevel) and generateminilocationaddition == True):
if(subjectchooser in ["landscape"] and chance_roll(insanitylevel, landscapeminilocationchance) and generateminilocationaddition == True):
completeprompt += " -minilocationaddition-, "
if(rare_dist(insanitylevel) and generateminilocationaddition == True):
if(chance_roll(insanitylevel, generalminilocationchance) and generateminilocationaddition == True):
completeprompt += " -minilocationaddition-, "
# landscapes it is nice to always have a time period
if(normal_dist(insanitylevel) or subjectchooser=="landscape"):
if(chance_roll(insanitylevel, timperiodchance) or subjectchooser=="landscape"):
if(generatetimeperiod == True):
completeprompt += "-timeperiod-, "
if(mainchooser not in ["landscape"] and rare_dist(insanitylevel) and generatefocus == True):
if(mainchooser not in ["landscape"] and chance_roll(insanitylevel, focuschance) and generatefocus == True):
completeprompt += "-focus-, "
# others
if(normal_dist(insanitylevel) and generatedirection == True):
if(chance_roll(insanitylevel, directionchance) and generatedirection == True):
completeprompt += "-direction-, "
if(normal_dist(insanitylevel) and generatemood == True):
if(chance_roll(insanitylevel, moodchance) and generatemood == True):
completeprompt += "-mood-, "
# add in some more mini vomits
if(unique_dist(insanitylevel) and generateminivomit == True):
if(chance_roll(insanitylevel, minivomitsuffixchance) and generateminivomit == True):
completeprompt += " -minivomit-, "
if(normal_dist(insanitylevel) and generateartmovement == True):
if(chance_roll(insanitylevel, artmovementchance) and generateartmovement == True):
completeprompt += "-artmovement-, "
if(normal_dist(insanitylevel) and generatelighting == True):
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(common_dist(insanitylevel) and isphoto == 1 and generatephotoaddition == True):
if(chance_roll(insanitylevel, photoadditionchance) and isphoto == 1 and generatephotoaddition == True):
completeprompt += random.choice(photoadditionlist) + ", "
if(isphoto == 1 and generatecamera == True):
completeprompt += "-camera-, "
if(normal_dist(insanitylevel) or isphoto == 1):
if(chance_roll(insanitylevel, lenschance) or isphoto == 1):
if(generatelens == True):
completeprompt += "-lens-, "
if(normal_dist(insanitylevel) and generatecolorscheme == True):
completeprompt += random.choice(colorschemelist) + ", "
if(chance_roll(insanitylevel, colorschemechance) and generatecolorscheme == True):
completeprompt += "-colorscheme-, "
# vomit some cool/wierd things into the prompt
if(uncommon_dist(insanitylevel) and generatevomit == True):
if(chance_roll(insanitylevel, vomit1chance) and generatevomit == True):
completeprompt += "-vomit-, "
if(uncommon_dist(insanitylevel)):
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(novel_dist(insanitylevel) and generategreatwork == True):
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(novel_dist(insanitylevel) and generatepoemline == True):
if(chance_roll(insanitylevel, poemlinechance) and generatepoemline == True):
completeprompt += " \"-poemline-\", "
#adding a songline. But this should happen only very rarely.
if(novel_dist(insanitylevel) and generatesongline == True):
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(uncommon_dist(insanitylevel) and generatequality == True):
if(chance_roll(insanitylevel, quality1chance) and generatequality == True):
completeprompt += "-quality-, "
if(uncommon_dist(insanitylevel)):
if(chance_roll(insanitylevel, quality2chance)):
completeprompt += "-quality-, "
@@ -1381,16 +1725,15 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
step = step + 1
# custom style list
if(uncommon_dist(insanitylevel) and generatestyle == True):
if(chance_roll(insanitylevel, customstyle1chance) and generatestyle == True):
completeprompt += "-styletilora-, "
if(uncommon_dist(insanitylevel)):
if(chance_roll(insanitylevel, customstyle2chance)):
completeprompt += "-styletilora-, "
# custom suffix list
if(uncommon_dist(insanitylevel) and generatecustominputsuffix == True):
completeprompt += random.choice(custominputsuffixlist) + ", "
if(uncommon_dist(insanitylevel)):
for i in range(custominputsuffixrepeats):
if(chance_roll(insanitylevel, custominputsuffixchance) and generatecustominputsuffix == True):
completeprompt += random.choice(custominputsuffixlist) + ", "
@@ -1568,9 +1911,11 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all
"-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]
"-container-" in completeprompt or
"-firstname-" in completeprompt or
"-flora-" 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-", "-firstname-", "-flora-"]
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, firstnamelist, floralist]
allwildcardslistwithhybrid = ["-material-", "-descriptor-", "-outfit-", "-conceptsuffix-","-culture-", "-objecttotal-"]
allwildcardslistwithhybridlists = [materiallist, descriptorlist,outfitlist,conceptsuffixlist,culturelist, objecttotallist]
+42 -9
View File
@@ -1,6 +1,7 @@
import csv
import random
import os
import shutil
def random_read_from_csv(filename):
script_dir = os.path.dirname(os.path.abspath(__file__)) # Script directory
@@ -18,7 +19,7 @@ def add_from_csv(completeprompt, csvfilename, addcomma, prefix, suffix):
return ", ".join([completeprompt,addtoprompt])
return " ".join([completeprompt,addtoprompt])
def csv_to_list(csvfilename, antilist=[], directory="./csvfiles/", lowerandstrip=0, delimiter=";", listoflistmode = False):
def csv_to_list(csvfilename, antilist=[], directory="./csvfiles/", lowerandstrip=0, delimiter=";", listoflistmode = False, skipheader = False, gender = "all"):
userfilesdirectory = "./userfiles/"
userfileaddonname = csvfilename + "_addon.csv"
userfilereplacename = csvfilename + "_replace.csv"
@@ -39,30 +40,44 @@ def csv_to_list(csvfilename, antilist=[], directory="./csvfiles/", lowerandstrip
if(os.path.isfile(full_path + csvfilename + ".csv")):
with open(full_path + csvfilename + ".csv", "r", newline="",encoding="utf8") as file:
reader = csv.reader(file, delimiter=delimiter)
if(skipheader==True):
next(reader)
if(listoflistmode==True):
csvlist = list(reader)
else:
for row in reader:
value = row[0]
if(value.lower().strip() not in antilist):
if(lowerandstrip == 1):
csvlist.append(row[0].lower().strip())
csvlist.append(row[0])
if(
(gender != "all" and row[1] == gender)
or gender == "all"
):
if(value.lower().strip() not in antilist):
if(lowerandstrip == 1):
csvlist.append(row[0].lower().strip())
else:
csvlist.append(row[0])
# do the add ons!
if(directory=="./csvfiles/" or directory=="./csvfiles/special_lists/"):
if(os.path.isfile(userfilesfolder + csvfilename + "_addon" + ".csv")):
with open(userfilesfolder + csvfilename + "_addon" + ".csv", "r", newline="",encoding="utf8") as file:
reader = csv.reader(file, delimiter=",")
if(skipheader==True):
next(reader)
if(listoflistmode==True):
csvlist.append(list(reader))
else:
for row in reader:
value = row[0]
if(value.lower().strip() not in antilist):
if(lowerandstrip == 1):
csvlist.append(row[0].lower().strip())
csvlist.append(row[0])
if(
(gender != "all" and row[1] == gender)
or gender == "all"
):
if(value.lower().strip() not in antilist):
if(lowerandstrip == 1):
csvlist.append(row[0].lower().strip())
else:
csvlist.append(row[0])
# remove duplicates, but check only for lowercase stuff
@@ -92,3 +107,21 @@ def artist_category_csv_to_list(csvfilename,category):
def load_config_csv():
csvlist = []
script_dir = os.path.dirname(os.path.abspath(__file__))
full_path_config_file = os.path.join(script_dir, "./userfiles/" )
full_path_default_config_file = os.path.join(script_dir, "./csvfiles/config/" )
config_file = full_path_config_file + 'config.csv'
default_config_file = full_path_default_config_file + 'default_config.csv'
if not os.path.exists(config_file):
shutil.copy2(default_config_file, config_file)
print("Config file created.")
with open(config_file, "r", newline="",encoding="utf8") as file:
reader = csv.DictReader(file, delimiter=";")
csvlist = [list(row.values()) for row in reader if not any(value.startswith('#') for value in row.values())]
return csvlist
+1
View File
@@ -26,6 +26,7 @@ Anime Eyes
Hair Tie
Hair Clip
Hair Ribbons
Flower in hair
Barrette
Hat
Trucker hat
1 Beauty Marks
26 Hair Tie
27 Hair Clip
28 Hair Ribbons
29 Flower in hair
30 Barrette
31 Hat
32 Trucker hat
+105
View File
@@ -0,0 +1,105 @@
#this file controls the generation process;
#records starting with # are ignored;
#----;
# main subject generation options;
# these can either be on or off;
#----;
# objects;
subject_object;on
subject_vehicle;on
subject_food;on
subject_space;on
subject_building;on
subject_flora;on
# animals;
subject_animal;on
# humanoids;
subject_manwoman;on
subject_manwomanrelation;on
subject_fictional;on
subject_nonfictional;on
subject_humanoid;on
subject_job;on
subject_firstnames;on
# landscape;
subject_landscape;on
# concept;
subject_event;on
subject_concept;on
subject_poemline;on
subject_songline;on
#----;
# other main lists, in order of appearance;
# setting the random chance, for normal generation;
# these can be, in order of most appearing to least appearing;
# always, common, normal, uncommon, rare, legendary, unique, extraordinary, novel, never;
custominputprefixrepeats;2
custominputprefixchance;uncommon
imagetypechance;normal
imagetypequalitychance;rare
# some prefixes that happen rarely;
minilocationadditionchance;unique
artmovementprefixchance;unique
minivomitprefix1chance;rare
minivomitprefix2chance;unique
# shot size generation;
shotsizechance;uncommon
# subject specific stuff;
subjectdescriptor1chance;common
subjectdescriptor2chance;uncommon
subjectbodytypechance;normal
subjectculturechance;normal
subjectconceptsuffixchance;unique
# subjectlandscape specific stuff;
subjectlandscapeinsideshotchance;unique
subjectlandscapeaddonlocationchance;normal
subjectlandscapeaddonlocationdescriptorchance;rare
subjectlandscapeaddonlocationculturechance;rare
# all additions;
objectadditionsrepeats;2
objectadditionschance;uncommon
humanadditionchance;rare
overalladditionchance;extraordinary
# humanoid other stuff;
emojichance;legendary
joboractivitychance;normal
# things in the middle of the prompt;
custominputmidrepeats;2
custominputmidchance;uncommon
minivomitmidchance;unique
# humanoid main stuff;
outfitchance;normal
posechance;uncommon
hairchance;normal
accessorychance;normal
humanoidinsideshotchance;legendary
humanoidbackgroundchance;uncommon
# minilocation stuff;
landscapeminilocationchance;uncommon
generalminilocationchance;rare
# general stuff add the end of the prompt;
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
# custom style list (lora and tis);
customstyle1chance;uncommon
customstyle2chance;uncommon
# suffix custom list;
custominputsuffixrepeats;2
custominputsuffixchance;uncommon
# artists stuff;
artistsatbackchance;uncommon
1 #this file controls the generation process
2 #records starting with # are ignored
3 #----
4 # main subject generation options
5 # these can either be on or off
6 #----
7 # objects
8 subject_object on
9 subject_vehicle on
10 subject_food on
11 subject_space on
12 subject_building on
13 subject_flora on
14 # animals
15 subject_animal on
16 # humanoids
17 subject_manwoman on
18 subject_manwomanrelation on
19 subject_fictional on
20 subject_nonfictional on
21 subject_humanoid on
22 subject_job on
23 subject_firstnames on
24 # landscape
25 subject_landscape on
26 # concept
27 subject_event on
28 subject_concept on
29 subject_poemline on
30 subject_songline on
31 #----
32 # other main lists, in order of appearance
33 # setting the random chance, for normal generation
34 # these can be, in order of most appearing to least appearing
35 # always, common, normal, uncommon, rare, legendary, unique, extraordinary, novel, never
36 custominputprefixrepeats 2
37 custominputprefixchance uncommon
38 imagetypechance normal
39 imagetypequalitychance rare
40 # some prefixes that happen rarely
41 minilocationadditionchance unique
42 artmovementprefixchance unique
43 minivomitprefix1chance rare
44 minivomitprefix2chance unique
45 # shot size generation
46 shotsizechance uncommon
47 # subject specific stuff
48 subjectdescriptor1chance common
49 subjectdescriptor2chance uncommon
50 subjectbodytypechance normal
51 subjectculturechance normal
52 subjectconceptsuffixchance unique
53 # subjectlandscape specific stuff
54 subjectlandscapeinsideshotchance unique
55 subjectlandscapeaddonlocationchance normal
56 subjectlandscapeaddonlocationdescriptorchance rare
57 subjectlandscapeaddonlocationculturechance rare
58 # all additions
59 objectadditionsrepeats 2
60 objectadditionschance uncommon
61 humanadditionchance rare
62 overalladditionchance extraordinary
63 # humanoid other stuff
64 emojichance legendary
65 joboractivitychance normal
66 # things in the middle of the prompt
67 custominputmidrepeats 2
68 custominputmidchance uncommon
69 minivomitmidchance unique
70 # humanoid main stuff
71 outfitchance normal
72 posechance uncommon
73 hairchance normal
74 accessorychance normal
75 humanoidinsideshotchance legendary
76 humanoidbackgroundchance uncommon
77 # minilocation stuff
78 landscapeminilocationchance uncommon
79 generalminilocationchance rare
80 # general stuff add the end of the prompt
81 timperiodchance normal
82 focuschance normal
83 directionchance normal
84 moodchance normal
85 minivomitsuffixchance unique
86 artmovementchance normal
87 lightingchance normal
88 photoadditionchance common
89 lenschance normal
90 colorschemechance normal
91 vomit1chance uncommon
92 vomit2chance uncommon
93 greatworkchance novel
94 poemlinechance novel
95 songlinechance novel
96 quality1chance uncommon
97 quality2chance uncommon
98 # custom style list (lora and tis)
99 customstyle1chance uncommon
100 customstyle2chance uncommon
101 # suffix custom list
102 custominputsuffixrepeats 2
103 custominputsuffixchance uncommon
104 # artists stuff
105 artistsatbackchance uncommon
+3 -1
View File
@@ -23,4 +23,6 @@ Terrarium
Fishbowl
Paperweight
Glass canister
Machine
Machine
Glass case
Display case
1 Bottle
23 Fishbowl
24 Paperweight
25 Glass canister
26 Machine
27 Glass case
28 Display case
-1
View File
@@ -199,7 +199,6 @@ Papuan
Mennonite
Basque
Hmong
Basque
Catalan
Bavarian
Swiss
1 Japanese
199 Mennonite
200 Basque
201 Hmong
Basque
202 Catalan
203 Bavarian
204 Swiss
+2 -1
View File
@@ -33,4 +33,5 @@ prehistoric -minioutfit-, in a cave, cave paintings, unga bunga
cute cat ears, furry, kawaii, cutecore, happy, cattail, colorful
cute -animal- ears, furry hybrid, grin, animal- tail, colorful
F1 racer suit, at the pit stop, F1 car
Cargo Shorts, Tight Shirt and Vest, Adventuring Backpack Gear, Hiking Boots
Cargo Shorts, Tight Shirt and Vest, Adventuring Backpack Gear, Hiking Boots
-rgpclass-, -minioutfit-, shield, sword, medieval
1 wizard -minioutfit- and wizard hat, background is wizard tower, -minilocationaddition-
33 cute cat ears, furry, kawaii, cutecore, happy, cattail, colorful
34 cute -animal- ears, furry hybrid, grin, animal- tail, colorful
35 F1 racer suit, at the pit stop, F1 car
36 Cargo Shorts, Tight Shirt and Vest, Adventuring Backpack Gear, Hiking Boots
37 -rgpclass-, -minioutfit-, shield, sword, medieval
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+133
View File
@@ -0,0 +1,133 @@
Acacia
Acorn
Alder
Algae
Apple tree
Ash
Autumn leaf pile
Azalea
Bark
Bamboo
Bamboo shoot
Banyan
Baobab
Beech
Beehive
Birch
Birch tree
Black oak
Branch
Bouquet
Bush
Cactus
Cactus spines
Camellia
Carnation
Catalpa
Cedar
Cherry blossom tree
Chestnut
Chrysanthemum
Coral reef
Cypress
Daffodil
Daisies
Daisy
Dandelion
Dandelion fluff
Dogwood
Elm
Eucalyptus
Fern
Fir
Flora
Flower
Foliage
Forest
Fungus
Garden
Geranium
Ginkgo
Grass
Hazel
Herb garden
Hickory
Holly
Honeycomb
Hummingbird feeder
Hydrangea
Iris
Ironwood
Ivy
Jasmine
Juniper
Lavender
Leaf
Lichen
Lilac
Lily
Linden
Locust
Magnolia tree
Mahogany
Maple tree
Marigold
Marigolds
Meadow
Moss
Mossy rock
Mulberry
Mushroom
Nature
Oak tree
Olive
Orchard
Orchid
Palm tree
Pear
Pebble
Pecan
Peony
Petal
Petunia
Pine needle carpet
Pine tree
Pinecone
Poinsettia
Pond water lilies
Poplar
Poppies
Red oak
Redwood tree
River stone
Rose
Roses
Sagebrush
Sassafras
Seagrass
Seaweed
Seedling
Sequoia
Shrub
Spruce
Succulent
Sunflower
Sycamore
Tree
Tree stump
Tulip
Flower Bulb
Twig
Vine
Violet
Walnut
Water lily pad
Waterfall
White oak
Wild berry bush
Wild mushroom patch
Wilderness
Wildflower bouquet
Willow
Willow tree
Yew
1 Acacia
2 Acorn
3 Alder
4 Algae
5 Apple tree
6 Ash
7 Autumn leaf pile
8 Azalea
9 Bark
10 Bamboo
11 Bamboo shoot
12 Banyan
13 Baobab
14 Beech
15 Beehive
16 Birch
17 Birch tree
18 Black oak
19 Branch
20 Bouquet
21 Bush
22 Cactus
23 Cactus spines
24 Camellia
25 Carnation
26 Catalpa
27 Cedar
28 Cherry blossom tree
29 Chestnut
30 Chrysanthemum
31 Coral reef
32 Cypress
33 Daffodil
34 Daisies
35 Daisy
36 Dandelion
37 Dandelion fluff
38 Dogwood
39 Elm
40 Eucalyptus
41 Fern
42 Fir
43 Flora
44 Flower
45 Foliage
46 Forest
47 Fungus
48 Garden
49 Geranium
50 Ginkgo
51 Grass
52 Hazel
53 Herb garden
54 Hickory
55 Holly
56 Honeycomb
57 Hummingbird feeder
58 Hydrangea
59 Iris
60 Ironwood
61 Ivy
62 Jasmine
63 Juniper
64 Lavender
65 Leaf
66 Lichen
67 Lilac
68 Lily
69 Linden
70 Locust
71 Magnolia tree
72 Mahogany
73 Maple tree
74 Marigold
75 Marigolds
76 Meadow
77 Moss
78 Mossy rock
79 Mulberry
80 Mushroom
81 Nature
82 Oak tree
83 Olive
84 Orchard
85 Orchid
86 Palm tree
87 Pear
88 Pebble
89 Pecan
90 Peony
91 Petal
92 Petunia
93 Pine needle carpet
94 Pine tree
95 Pinecone
96 Poinsettia
97 Pond water lilies
98 Poplar
99 Poppies
100 Red oak
101 Redwood tree
102 River stone
103 Rose
104 Roses
105 Sagebrush
106 Sassafras
107 Seagrass
108 Seaweed
109 Seedling
110 Sequoia
111 Shrub
112 Spruce
113 Succulent
114 Sunflower
115 Sycamore
116 Tree
117 Tree stump
118 Tulip
119 Flower Bulb
120 Twig
121 Vine
122 Violet
123 Walnut
124 Water lily pad
125 Waterfall
126 White oak
127 Wild berry bush
128 Wild mushroom patch
129 Wilderness
130 Wildflower bouquet
131 Willow
132 Willow tree
133 Yew
+4 -3
View File
@@ -1,3 +1,4 @@
feminine
masculine
androgynous
description;gender
feminine;female
masculine;male
androgynous;undetermined
1 feminine description gender
2 masculine feminine female
3 androgynous masculine male
4 androgynous undetermined
+3 -1
View File
@@ -365,4 +365,6 @@ Cowgirl
Pop Singer
President
Construction worker
Idol
Idol
Nerd
Geek
1 Pirate
365 Pop Singer
366 President
367 Construction worker
368 Idol
369 Nerd
370 Geek
+3 -2
View File
@@ -1,2 +1,3 @@
Male
Female
malefemale;gender
Male;male
Female;female
1 Male malefemale gender
2 Female Male male
3 Female female
+7 -2
View File
@@ -1,2 +1,7 @@
Man
Woman
manwoman;gender
Man;male
Woman;female
Boy;male
Girl;female
Male;male
Female;female
1 Man manwoman gender
2 Woman Man male
3 Woman female
4 Boy male
5 Girl female
6 Male male
7 Female female
+15 -16
View File
@@ -1,16 +1,15 @@
Boy
Girl
Mother
Father
Grandma
Grandpa
Aunt
Uncle
Sister
Brother
Sibling
Parent
Wife
Husband
Girlfriend
Boyfriend
manwomanrelation;gender
Mother;female
Father;male
Grandma;female
Grandpa;male
Aunt;female
Uncle;male
Sister;female
Brother;male
Sibling;genderless
Parent;genderless
Wife;female
Husband;male
Girlfriend;female
Boyfriend;male
1 Boy manwomanrelation gender
2 Girl Mother female
3 Mother Father male
4 Father Grandma female
5 Grandma Grandpa male
6 Grandpa Aunt female
7 Aunt Uncle male
8 Uncle Sister female
9 Sister Brother male
10 Brother Sibling genderless
11 Sibling Parent genderless
12 Parent Wife female
13 Wife Husband male
14 Husband Girlfriend female
15 Girlfriend Boyfriend male
Boyfriend
File diff suppressed because it is too large Load Diff
-20
View File
@@ -281,26 +281,6 @@ Fractal
Pentagram
-conceptsuffix-potion
Roast beef
Oak tree
Maple tree
Pine tree
Apple tree
Cherry blossom tree
Redwood tree
Birch tree
Willow tree
Palm tree
Magnolia tree
Roses
Sunflowers
Daisies
Tulips
Orchids
Lilies
Poppies
Hydrangeas
Irises
Marigolds
-object- in a bottle
Faberge egg
Quilt
1 Pen
281 Pentagram
282 -conceptsuffix-potion
283 Roast beef
Oak tree
Maple tree
Pine tree
Apple tree
Cherry blossom tree
Redwood tree
Birch tree
Willow tree
Palm tree
Magnolia tree
Roses
Sunflowers
Daisies
Tulips
Orchids
Lilies
Poppies
Hydrangeas
Irises
Marigolds
284 -object- in a bottle
285 Faberge egg
286 Quilt
+2 -1
View File
@@ -23,4 +23,5 @@ simple -color- background
-descriptor- background
-descriptor- -color- background
-culture- background
-space- background
-space- background
-flora- in background
1 background is -location-
23 -descriptor- background
24 -descriptor- -color- background
25 -culture- background
26 -space- background
27 -flora- in background
@@ -5,6 +5,8 @@ visiting a -building-
visiting -location-
with a -animal-
surrounded by -object-s
surrounded by -flora-s
surrounded by -space-
eating -food-
and -human-
holding hands with -human-
1 riding a -animal-
5 visiting -location-
6 with a -animal-
7 surrounded by -object-s
8 surrounded by -flora-s
9 surrounded by -space-
10 eating -food-
11 and -human-
12 holding hands with -human-
@@ -6,4 +6,5 @@
-color- -minilocation-
lush -minilocation-
dense -minilocation-
-season- -minilocation-
-season- -minilocation-
-minilocation- with -flora-
1 -minilocation-
6 -color- -minilocation-
7 lush -minilocation-
8 dense -minilocation-
9 -season- -minilocation-
10 -minilocation- with -flora-
+2 -1
View File
@@ -10,4 +10,5 @@ detailed with -material- -descriptor- patterns
intricate details
smooth
designed by -brand-
made from -space-
made from -space-
made from -flora-
1 with a face
10 intricate details
11 smooth
12 designed by -brand-
13 made from -space-
14 made from -flora-
+3 -2
View File
@@ -6,7 +6,7 @@ flying
distant nuclear explosion
de dia los muertos
mechanical
lord of the rings scenery landscape
lord of the rings scenery landscape, -flora-
between the stars
surrounded by fire and ice
infused with ethereal color
@@ -41,4 +41,5 @@ clean, soap bubbles, iridescent
-color- light shining from within
and the genre is -musicgenre-
displayed in a rainbow pattern
inside a -container-
inside a -container-
-flora-, -flora-, -flora-, -flora-
1 floating in space
6 distant nuclear explosion
7 de dia los muertos
8 mechanical
9 lord of the rings scenery landscape lord of the rings scenery landscape, -flora-
10 between the stars
11 surrounded by fire and ice
12 infused with ethereal color
41 -color- light shining from within
42 and the genre is -musicgenre-
43 displayed in a rainbow pattern
44 inside a -container-
45 -flora-, -flora-, -flora-, -flora-
+4 -1
View File
@@ -24,4 +24,7 @@ Glacier
Underwater Cave
Onsen
Bath
Shower
Shower
Sauna
Spa
Thermal baths
1 River
24 Underwater Cave
25 Onsen
26 Bath
27 Shower
28 Sauna
29 Spa
30 Thermal baths
+2 -2
View File
@@ -12,7 +12,7 @@ from call_extras import *
from model_lists import *
def generateimages(amount = 1, size = "all",model = "currently selected model",samplingsteps = "40",cfg= "7",hiresfix = True,hiressteps ="0",denoisestrength="0.6",samplingmethod="DPM++ SDE Karras", upscaler="R-ESRGAN 4x+", hiresscale="2",apiurl="http://127.0.0.1:7860",qualitygate=False,quality="7.6",runs="5",insanitylevel="5",subject="all", artist="all", imagetype="all",silentmode=False, workprompt="", antistring="",prefixprompt="", suffixprompt="", negativeprompt="",promptcompounderlevel = "1", seperator="comma", img2imgbatch = "1", img2imgsamplingsteps = "20", img2imgcfg = "7", img2imgsamplingmethod = "DPM++ SDE Karras", img2imgupscaler = "R-ESRGAN 4x+", img2imgmodel = "currently selected model", img2imgactivate = False, img2imgscale = "2", img2imgpadding = "64",img2imgdenoisestrength="0.3",ultimatesdupscale=False,usdutilewidth = "512", usdutileheight = "0", usdumaskblur = "8", usduredraw ="Linear", usduSeamsfix = "None", usdusdenoise = "0.35", usduswidth = "64", usduspadding ="32", usdusmaskblur = "8",controlnetenabled=False, controlnetmodel="",img2imgdenoisestrengthmod="-0.05",enableextraupscale = False,controlnetblockymode = False,extrasupscaler1 = "all",extrasupscaler2 ="all",extrasupscaler2visiblity="0.5",extrasupscaler2gfpgan="0",extrasupscaler2codeformer="0.15",extrasupscaler2codeformerweight="0.1",extrasresize="2",onlyupscale="false",givensubject="",smartsubject=True,giventypeofimage="",imagemodechance=20):
def generateimages(amount = 1, size = "all",model = "currently selected model",samplingsteps = "40",cfg= "7",hiresfix = True,hiressteps ="0",denoisestrength="0.6",samplingmethod="DPM++ SDE Karras", upscaler="R-ESRGAN 4x+", hiresscale="2",apiurl="http://127.0.0.1:7860",qualitygate=False,quality="7.6",runs="5",insanitylevel="5",subject="all", artist="all", imagetype="all",silentmode=False, workprompt="", antistring="",prefixprompt="", suffixprompt="", negativeprompt="",promptcompounderlevel = "1", seperator="comma", img2imgbatch = "1", img2imgsamplingsteps = "20", img2imgcfg = "7", img2imgsamplingmethod = "DPM++ SDE Karras", img2imgupscaler = "R-ESRGAN 4x+", img2imgmodel = "currently selected model", img2imgactivate = False, img2imgscale = "2", img2imgpadding = "64",img2imgdenoisestrength="0.3",ultimatesdupscale=False,usdutilewidth = "512", usdutileheight = "0", usdumaskblur = "8", usduredraw ="Linear", usduSeamsfix = "None", usdusdenoise = "0.35", usduswidth = "64", usduspadding ="32", usdusmaskblur = "8",controlnetenabled=False, controlnetmodel="",img2imgdenoisestrengthmod="-0.05",enableextraupscale = False,controlnetblockymode = False,extrasupscaler1 = "all",extrasupscaler2 ="all",extrasupscaler2visiblity="0.5",extrasupscaler2gfpgan="0",extrasupscaler2codeformer="0.15",extrasupscaler2codeformerweight="0.1",extrasresize="2",onlyupscale="false",givensubject="",smartsubject=True,giventypeofimage="",imagemodechance=20, gender="all", chosensubjectsubtypeobject="all", chosensubjectsubtypehumanoid="all", chosensubjectsubtypeconcept="all"):
loops = int(amount) # amount of images to generate
steps = 0
upscalefilelist=[]
@@ -70,7 +70,7 @@ def generateimages(amount = 1, size = "all",model = "currently selected model",s
print(workprompt)
else:
randomprompt = build_dynamic_prompt(insanitylevel,subject,artist,imagetype, False,antistring,prefixprompt,suffixprompt,promptcompounderlevel, seperator,givensubject,smartsubject,giventypeofimage,imagemodechance)
randomprompt = build_dynamic_prompt(insanitylevel,subject,artist,imagetype, False,antistring,prefixprompt,suffixprompt,promptcompounderlevel, seperator,givensubject,smartsubject,giventypeofimage,imagemodechance, gender, chosensubjectsubtypeobject, chosensubjectsubtypehumanoid, chosensubjectsubtypeconcept)
# make the filename, from from a to the first comma
start_index = randomprompt.find("of a ") + len("of a ")
+3 -3
View File
@@ -10,7 +10,7 @@ from build_dynamic_prompt import *
def generateprompts(amount = 1,insanitylevel="5",subject="all", artist="all", imagetype="all",onlyartists=False, workprompt="", antistring="",prefixprompt="", suffixprompt="", negativeprompt="",promptcompounderlevel = "1", seperator="comma",givensubject="",smartsubject=True,giventypeofimage="",imagemodechance=20):
def generateprompts(amount = 1,insanitylevel="5",subject="all", artist="all", imagetype="all",onlyartists=False, workprompt="", antistring="",prefixprompt="", suffixprompt="", negativeprompt="",promptcompounderlevel = "1", seperator="comma",givensubject="",smartsubject=True,giventypeofimage="",imagemodechance=20, gender = "all", subtypeobject = "all", subtypehumanoid = "all", subtypeconcept = "all"):
loops = int(amount) # amount of images to generate
steps = 0
@@ -18,7 +18,7 @@ def generateprompts(amount = 1,insanitylevel="5",subject="all", artist="all", im
while steps < loops:
# build prompt
result = build_dynamic_prompt(insanitylevel,subject,artist,imagetype, onlyartists,antistring,prefixprompt,suffixprompt,promptcompounderlevel, seperator,givensubject,smartsubject,giventypeofimage,imagemodechance)
result = build_dynamic_prompt(insanitylevel,subject,artist,imagetype, onlyartists,antistring,prefixprompt,suffixprompt,promptcompounderlevel, seperator,givensubject,smartsubject,giventypeofimage,imagemodechance, gender, subtypeobject, subtypehumanoid, subtypeconcept)
print("")
print("loop " + str(steps))
@@ -46,4 +46,4 @@ def generateprompts(amount = 1,insanitylevel="5",subject="all", artist="all", im
print("")
print("All done!")
generateprompts(10,10,"humanoid","all","all",False,"","","PREFIXPROMPT" ,"SUFFIXPROMPT","",1,"","",True,"",100)
generateprompts(10,5,"humanoid","all","all",False,"","","PREFIXPROMPT" ,"SUFFIXPROMPT","",1,"","",True,"",100, "female", "all", "all", "all")
+33 -1
View File
@@ -36,4 +36,36 @@ def novel_dist(insanitylevel):
roll = (random.randint(1, 500)<insanitylevel)
if(roll):
print("Uh, something novel has been added to the prompt. Interesting.")
return roll
return roll
def chance_roll(insanitylevel, chance):
chance_mapping = {
'never': {'set_number': 0, 'message': ""},
'novel': {'set_number': 500, 'message': "Uh, something novel has been added to the prompt. Interesting."},
'extraordinary': {'set_number': 200, 'message': "Extraordinary! Something special has been added to the prompt"},
'unique': {'set_number': 75, 'message': "Critical hit! Something unique has been added to the prompt"},
'legendary': {'set_number': 50, 'message': "Nice! adding something legendary to the prompt"},
'rare': {'set_number': 30, 'message': "adding something rare to the prompt"},
'uncommon': {'set_number': 18, 'message': ""},
'normal': {'set_number': 10, 'message': ""},
'common': {'set_number': 5, 'message': ""},
'always': {'set_number': 1, 'message': ""},
}
if chance == 'never':
return False
if chance in chance_mapping:
properties = chance_mapping[chance]
set_number = properties['set_number']
message = properties['message']
# if we have insanity level of 10, then every under rare is alwas true
if (set_number <= 35 and insanitylevel >= 10):
if(message != ""):
print(message)
return True
roll = random.randint(1, set_number) < insanitylevel
if(message != "" and roll == True):
print(message)
return roll
else:
raise ValueError(f"Invalid chance value: {chance}")
+7 -2
View File
@@ -34,12 +34,17 @@ def one_button_prompt_api(_: gr.Blocks, app: FastAPI):
givensubject: str =Body('',title="givensubject"),
smartsubject:bool = Body(True,title='smart subject'),
giventypeofimage: str = Body('',title='given type of image'),
imagemodechance: int = Body(20,title='image mode chance')):
imagemodechance: int = Body(20,title='image mode chance'),
gender: str = Body('all',title='gender'),
subtypeobject: str = Body('all',title='subtypeobject'),
subtypehumanoid: str = Body('all', title='subtypehumanoid'),
subtypeconcept: str = Body('all', title='subtypeconcept')
):
keys = ['insanitylevel', 'forcesubject', 'artists', 'imagetype', 'onlyartists', 'antivalues', 'prefixprompt',
'suffixprompt', 'promptcompounderlevel', 'seperator', 'givensubject', 'smartsubject', 'giventypeofimage',
'imagemodechance']
'imagemodechance', 'gender', 'subtypeobject','subtypehumanoid','subtypeconcept']
payload = {}
for key in keys:
payload[key] = locals()[key]
+265 -14
View File
@@ -13,14 +13,21 @@ from modules.shared import opts, cmd_opts, state
from build_dynamic_prompt import *
from main import *
from model_lists import *
from csv_reader import *
subjects = ["all","object","animal","humanoid", "landscape", "concept"]
#subjects = ["all","object","animal","humanoid", "landscape", "concept"]
subjects =["all"]
subjectsubtypesobject = ["all"]
subjectsubtypeshumanoid = ["all"]
subjectsubtypesconcept = ["all"]
artists = ["all", "none", "popular", "greg mode", "3D", "abstract", "angular", "anime" ,"architecture", "art nouveau", "art deco", "baroque", "bauhaus", "cartoon", "character", "children's illustration", "cityscape", "clean", "cloudscape", "collage", "colorful", "comics", "cubism", "dark", "detailed", "digital", "expressionism", "fantasy", "fashion", "fauvism", "figurativism", "gore", "graffiti", "graphic design", "high contrast", "horror", "impressionism", "installation", "landscape", "light", "line drawing", "low contrast", "luminism", "magical realism", "manga", "melanin", "messy", "monochromatic", "nature", "nudity", "photography", "pop art", "portrait", "primitivism", "psychedelic", "realism", "renaissance", "romanticism", "scene", "sci-fi", "sculpture", "seascape", "space", "stained glass", "still life", "storybook realism", "street art", "streetscape", "surrealism", "symbolism", "textile", "ukiyo-e", "vibrant", "watercolor", "whimsical"]
imagetypes = ["all", "all - force multiple", "photograph", "octane render","digital art","concept art", "painting", "portrait", "anime key visual", "only other types", "only templates mode", "art blaster mode", "quality vomit mode", "color cannon mode", "unique art mode", "massive madness mode", "photo fantasy mode", "subject only mode"]
promptmode = ["at the back", "in the front"]
promptcompounder = ["1", "2", "3", "4", "5"]
ANDtogglemode = ["none", "automatic", "prefix AND prompt + suffix", "prefix + prefix + prompt + suffix"]
seperatorlist = ["comma", "AND", "BREAK"]
genders = ["all", "male", "female"]
#for autorun and upscale
sizelist = ["all", "portrait", "wide", "square", "ultrawide"]
@@ -64,7 +71,135 @@ for filename in os.listdir(userfilesfolder):
# directly insert into the artists list
artists.insert(2, name)
# on startup, check if we have a config file, or else create it
config = load_config_csv()
# load subjects stuff from config
generatevehicle = True
generateobject = True
generatefood = True
generatebuilding = True
generatespace = True
generateflora = True
generateanimal = True
generatemanwoman = True
generatemanwomanrelation = True
generatefictionalcharacter = True
generatenonfictionalcharacter = True
generatehumanoids = True
generatejob = True
generatefirstnames = True
generatelandscape = True
generateevent = True
generateconcepts = True
generatepoemline = True
generatesongline = True
for item in config:
# objects
if item[0] == 'subject_vehicle' and item[1] != 'on':
generatevehicle = False
if item[0] == 'subject_object' and item[1] != 'on':
generateobject = False
if item[0] == 'subject_food' and item[1] != 'on':
generatefood = False
if item[0] == 'subject_building' and item[1] != 'on':
generatebuilding = False
if item[0] == 'subject_space' and item[1] != 'on':
generatespace = False
if item[0] == 'subject_flora' and item[1] != 'on':
generateflora = False
# 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
if item[0] == 'subject_firstnames' and item[1] != 'on':
generatefirstnames = 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
# build up all subjects we can choose based on the loaded config file
if(generatevehicle or generateobject or generatefood or generatebuilding or generatespace):
subjects.append("object")
if(generateanimal):
subjects.append("animal")
if(generatemanwoman or generatemanwomanrelation or generatefictionalcharacter or generatenonfictionalcharacter or generatehumanoids or generatejob):
subjects.append("humanoid")
if(generatelandscape):
subjects.append("landscape")
if(generateevent or generateconcepts or generatepoemline or generatesongline):
subjects.append("concept")
# do the same for the subtype subjects
# subjectsubtypesobject = ["all"]
# subjectsubtypeshumanoid = ["all"]
# subjectsubtypesconcept = ["all"]
# objects first
if(generateobject):
subjectsubtypesobject.append("generic objects")
if(generatevehicle):
subjectsubtypesobject.append("vehicles")
if(generatefood):
subjectsubtypesobject.append("food")
if(generatebuilding):
subjectsubtypesobject.append("buildings")
if(generatespace):
subjectsubtypesobject.append("space")
if(generateflora):
subjectsubtypesobject.append("flora")
# humanoids (should I review descriptions??)
if(generatemanwoman):
subjectsubtypeshumanoid.append("generic humans")
if(generatemanwomanrelation):
subjectsubtypeshumanoid.append("generic human relations")
if(generatenonfictionalcharacter):
subjectsubtypeshumanoid.append("celebrities e.a.")
if(generatefictionalcharacter):
subjectsubtypeshumanoid.append("fictional characters")
if(generatehumanoids):
subjectsubtypeshumanoid.append("humanoids")
if(generatejob):
subjectsubtypeshumanoid.append("based on job or title")
if(generatefirstnames):
subjectsubtypeshumanoid.append("based on first name")
# concepts
if(generateevent):
subjectsubtypesconcept.append("event")
if(generateconcepts):
subjectsubtypesconcept.append("the X of Y concepts")
if(generatepoemline):
subjectsubtypesconcept.append("lines from poems")
if(generatesongline):
subjectsubtypesconcept.append("lines from songs")
class Script(scripts.Script):
@@ -76,12 +211,12 @@ class Script(scripts.Script):
def ui(self, is_img2img):
def gen_prompt(insanitylevel, subject, artist, imagetype, antistring, prefixprompt, suffixprompt, promptcompounderlevel, seperator,givensubject,smartsubject,giventypeofimage, imagemodechance):
def gen_prompt(insanitylevel, subject, artist, imagetype, antistring, prefixprompt, suffixprompt, promptcompounderlevel, seperator,givensubject,smartsubject,giventypeofimage, imagemodechance,chosengender, chosensubjectsubtypeobject, chosensubjectsubtypehumanoid, chosensubjectsubtypeconcept):
promptlist = []
for i in range(5):
promptlist.append(build_dynamic_prompt(insanitylevel,subject,artist, imagetype, False, antistring,prefixprompt,suffixprompt,promptcompounderlevel,seperator,givensubject,smartsubject, giventypeofimage, imagemodechance))
promptlist.append(build_dynamic_prompt(insanitylevel,subject,artist, imagetype, False, antistring,prefixprompt,suffixprompt,promptcompounderlevel,seperator,givensubject,smartsubject, giventypeofimage, imagemodechance,chosengender, chosensubjectsubtypeobject, chosensubjectsubtypehumanoid, chosensubjectsubtypeconcept))
return promptlist
@@ -123,6 +258,15 @@ class Script(scripts.Script):
with gr.Column(scale=1, variant="compact"):
artist = gr.Dropdown(
artists, label="Artists", value="all")
with gr.Row():
chosensubjectsubtypeobject = gr.Dropdown(
subjectsubtypesobject, label="Type of object", value="all", visible=False)
chosensubjectsubtypehumanoid = gr.Dropdown(
subjectsubtypeshumanoid, label="Type of humanoids", value="all", visible=False)
chosensubjectsubtypeconcept = gr.Dropdown(
subjectsubtypesconcept, label="Type of concept", value="all", visible=False)
chosengender = gr.Dropdown(
genders, label="gender", value="all", visible=False)
with gr.Row():
with gr.Column(scale=2, variant="compact"):
imagetype = gr.Dropdown(
@@ -140,8 +284,6 @@ class Script(scripts.Script):
with gr.Row():
givensubject = gr.Textbox(label="Overwrite subject: ", value="")
smartsubject = gr.Checkbox(label="Smart subject", value = True)
with gr.Row():
giventypeofimage = gr.Textbox(label="Overwrite type of image: ", value="")
with gr.Row():
gr.Markdown("""
<font size="2">
@@ -161,6 +303,8 @@ class Script(scripts.Script):
</font>
"""
)
with gr.Row():
giventypeofimage = gr.Textbox(label="Overwrite type of image: ", value="")
with gr.Row():
with gr.Column():
antistring = gr.Textbox(label="Filter out following properties (comma seperated). Example ""film grain, purple, cat"" ")
@@ -195,6 +339,62 @@ class Script(scripts.Script):
5. concept - Can be a concept, such as "a X of Y", or an historical event such as "The Trojan War". It can also generate a line from a poem or a song.
After choosing object, humanoid or concept a subselection menu will show. You can pick further details here. When choosing humanoid, you can also select the gender you wish to generate.
Type of Object:
1. all - selects randomly (default)
2. generic objects - Hodgepodge of objects, can be household items, weapons or any other general object.
3. vehicles - Cars, but also planes, trains and boats.
4. food - Meals, fruits and others.
5. buildings - From churches to libraries to castles.
6. space - Some bigger objects, nebula's, black holes and constellations
7. flora - Flowers and trees.
Type of humanoid:
1. all - selects randomly (default)
2. generic humans - Generic human descriptions. Example values would be Man, Woman, Male, etc
3. generic human relations - Human relations, example values would be Grandpa, Sister, Father, etc
4. celebrities e.a. - Known people, usually celebrities.
5. fictional characters - Movie and videogame characters, such as Mario and Peach.
6. humanoids - Humanoid type races, think Elves, Orcs, Dwarves, etc
7. based on job or title - Examples are Queen, Carpenter, Vampire hunter
8. based on first name - Examples are Anna, James, Emma etc.
gender:
1. all - selects randomly
2. male
3. female
Type of concept:
1. all - selects randomly (default)
2. event - an historical event, or even mythological event. Example The fall of Rome
3. the X of Y concepts - Randomly creates a small sentence, example The Ocean of Thought or The Fortress of Flame, etc
4. lines from poems - Picks a line from a poem
5. lines from songs - Picks a line from a song
</font>
### Artists
@@ -276,7 +476,9 @@ class Script(scripts.Script):
Add a prompt prefix, suffix and the negative prompt in the respective fields. They will be automatically added during processing.
These can be used to add textual inversion and LoRA's. They can also be used to add your models trigger words.
These can be used to add textual inversion and LoRA's to always apply. They can also be used to add your models trigger words.
Please read the custom_files documentation on how to apply random textual inversion and LoRA's.
</font>
@@ -408,11 +610,11 @@ class Script(scripts.Script):
"""
### TXT2IMG
<font size="2">
Start WebUi with option --api for this to work. This is not needed for Vlad.
Start WebUi with option --api for this to work. This is not needed for Vlad SD Next.
Note: This part is entirely optional and you can use the normal generate button.
This part is intended for running an upscaling at the same time.
This part is only intended for running an upscaling at the same time.
</font>
"""
)
@@ -556,7 +758,7 @@ class Script(scripts.Script):
extrasupscaler2codeformerweight = gr.Slider(0, 1, value="0.1", step=0.05, label="CodeFormer weight", visible = False)
genprom.click(gen_prompt, inputs=[insanitylevel,subject, artist, imagetype, antistring,prefixprompt, suffixprompt,promptcompounderlevel, seperator, givensubject,smartsubject,giventypeofimage,imagemodechance], outputs=[prompt1, prompt2, prompt3,prompt4,prompt5])
genprom.click(gen_prompt, inputs=[insanitylevel,subject, artist, imagetype, antistring,prefixprompt, suffixprompt,promptcompounderlevel, seperator, givensubject,smartsubject,giventypeofimage,imagemodechance, chosengender, chosensubjectsubtypeobject, chosensubjectsubtypehumanoid, chosensubjectsubtypeconcept], outputs=[prompt1, prompt2, prompt3,prompt4,prompt5])
prompt1toworkflow.click(prompttoworkflowprompt, inputs=prompt1, outputs=workprompt)
prompt2toworkflow.click(prompttoworkflowprompt, inputs=prompt2, outputs=workprompt)
@@ -564,10 +766,59 @@ class Script(scripts.Script):
prompt4toworkflow.click(prompttoworkflowprompt, inputs=prompt4, outputs=workprompt)
prompt5toworkflow.click(prompttoworkflowprompt, inputs=prompt5, outputs=workprompt)
startmain.click(generateimages, inputs=[amountofimages,size,model,samplingsteps,cfg,hiresfix,hiressteps,denoisestrength,samplingmethod, upscaler,hiresscale, apiurl, qualitygate, quality, runs,insanitylevel,subject, artist, imagetype, silentmode, workprompt, antistring, prefixprompt, suffixprompt,negativeprompt,promptcompounderlevel, seperator, img2imgbatch, img2imgsamplingsteps, img2imgcfg, img2imgsamplingmethod, img2imgupscaler, img2imgmodel,img2imgactivate, img2imgscale, img2imgpadding,img2imgdenoisestrength,ultimatesdupscale,usdutilewidth, usdutileheight, usdumaskblur, usduredraw, usduSeamsfix, usdusdenoise, usduswidth, usduspadding, usdusmaskblur, controlnetenabled, controlnetmodel,img2imgdenoisestrengthmod,enableextraupscale,controlnetblockymode,extrasupscaler1,extrasupscaler2,extrasupscaler2visiblity,extrasupscaler2gfpgan,extrasupscaler2codeformer,extrasupscaler2codeformerweight,extrasresize,onlyupscale,givensubject,smartsubject,giventypeofimage,imagemodechance])
startmain.click(generateimages, inputs=[amountofimages,size,model,samplingsteps,cfg,hiresfix,hiressteps,denoisestrength,samplingmethod, upscaler,hiresscale, apiurl, qualitygate, quality, runs,insanitylevel,subject, artist, imagetype, silentmode, workprompt, antistring, prefixprompt, suffixprompt,negativeprompt,promptcompounderlevel, seperator, img2imgbatch, img2imgsamplingsteps, img2imgcfg, img2imgsamplingmethod, img2imgupscaler, img2imgmodel,img2imgactivate, img2imgscale, img2imgpadding,img2imgdenoisestrength,ultimatesdupscale,usdutilewidth, usdutileheight, usdumaskblur, usduredraw, usduSeamsfix, usdusdenoise, usduswidth, usduspadding, usdusmaskblur, controlnetenabled, controlnetmodel,img2imgdenoisestrengthmod,enableextraupscale,controlnetblockymode,extrasupscaler1,extrasupscaler2,extrasupscaler2visiblity,extrasupscaler2gfpgan,extrasupscaler2codeformer,extrasupscaler2codeformerweight,extrasresize,onlyupscale,givensubject,smartsubject,giventypeofimage,imagemodechance, chosengender, chosensubjectsubtypeobject, chosensubjectsubtypehumanoid, chosensubjectsubtypeconcept])
automatedoutputsfolderbutton.click(openfolder)
# turn things on and off for gender
def subjectsvalue(subject):
enable=(subject=="humanoid")
return {
chosengender: gr.update(visible=enable),
}
subject.change(
subjectsvalue,
[subject],
[chosengender]
)
# turn things on and off for subject subtype object
def subjectsvalueforsubtypeobject(subject):
enable=(subject=="object")
return {
chosensubjectsubtypeobject: gr.update(visible=enable),
}
subject.change(
subjectsvalueforsubtypeobject,
[subject],
[chosensubjectsubtypeobject]
)
# turn things on and off for subject subtype humanoid
def subjectsvalueforsubtypeobject(subject):
enable=(subject=="humanoid")
return {
chosensubjectsubtypehumanoid: gr.update(visible=enable),
}
subject.change(
subjectsvalueforsubtypeobject,
[subject],
[chosensubjectsubtypehumanoid]
)
# turn things on and off for subject subtype concept
def subjectsvalueforsubtypeconcept(subject):
enable=(subject=="concept")
return {
chosensubjectsubtypeconcept: gr.update(visible=enable),
}
subject.change(
subjectsvalueforsubtypeconcept,
[subject],
[chosensubjectsubtypeconcept]
)
# Turn things off and on for onlyupscale and txt2img
def onlyupscalevalues(onlyupscale):
onlyupscale = not onlyupscale
@@ -670,12 +921,12 @@ class Script(scripts.Script):
return [insanitylevel,subject, artist, imagetype, prefixprompt,suffixprompt,negativeprompt, promptcompounderlevel, ANDtoggle, silentmode, workprompt, antistring, seperator, givensubject, smartsubject, giventypeofimage, imagemodechance]
return [insanitylevel,subject, artist, imagetype, prefixprompt,suffixprompt,negativeprompt, promptcompounderlevel, ANDtoggle, silentmode, workprompt, antistring, seperator, givensubject, smartsubject, giventypeofimage, imagemodechance, chosengender, chosensubjectsubtypeobject, chosensubjectsubtypehumanoid, chosensubjectsubtypeconcept]
def run(self, p, insanitylevel, subject, artist, imagetype, prefixprompt,suffixprompt,negativeprompt, promptcompounderlevel, ANDtoggle, silentmode, workprompt, antistring,seperator, givensubject, smartsubject, giventypeofimage, imagemodechance):
def run(self, p, insanitylevel, subject, artist, imagetype, prefixprompt,suffixprompt,negativeprompt, promptcompounderlevel, ANDtoggle, silentmode, workprompt, antistring,seperator, givensubject, smartsubject, giventypeofimage, imagemodechance, chosengender, chosensubjectsubtypeobject, chosensubjectsubtypehumanoid, chosensubjectsubtypeconcept):
images = []
infotexts = []
@@ -746,7 +997,7 @@ class Script(scripts.Script):
#Here is where we build a "normal" prompt
preppedprompt += build_dynamic_prompt(insanitylevel,subject,artist, imagetype, False, antistring, prefixprompt, suffixprompt,promptcompounderlevel, seperator,givensubject,smartsubject,giventypeofimage,imagemodechance)
preppedprompt += build_dynamic_prompt(insanitylevel,subject,artist, imagetype, False, antistring, prefixprompt, suffixprompt,promptcompounderlevel, seperator,givensubject,smartsubject,giventypeofimage,imagemodechance,chosengender, chosensubjectsubtypeobject, chosensubjectsubtypehumanoid, chosensubjectsubtypeconcept)
# set the artist mode back when done (for automatic mode)
artist = artistcopy
+143
View File
@@ -0,0 +1,143 @@
# Be in control with config.csv
After you start up One Button Prompt for the first time, it will create a config.csv file in the /userfiles/ folder.
In this file, you can not only set what to generate, but you can even set the randomness of certain parts of the generation process.
To update the UI, you might need to restart WebUI.
### On resetting/restoring the file
If you made a mistake, or wish to fully restore the config.csv file in the /userfiles/ folder, simply remove it. It will be recreated by One Button Prompt.
## Setting main generation options
In the following part, you can set parts of subjects the generations on and off. Turning off all subjects within a group, turns the main group off.
Example, if you don't want fictional characters or celebrities in the generation process, turn off subject_fictional and subject_nonfictional.
# objects;
subject_object;on
subject_vehicle;on
subject_food;on
subject_space;on
subject_building;on
subject_flora;on
# animals;
subject_animal;on
# humanoids;
subject_manwoman;on
subject_manwomanrelation;on
subject_fictional;on
subject_nonfictional;on
subject_humanoid;on
subject_job;on
subject_firstnames;on
# landscape;
subject_landscape;on
# concept;
subject_event;on
subject_concept;on
subject_poemline;on
subject_songline;on
## Other generation options
These options apply to the default prompt generation mode only. Here you can set the random chance of something appearing in the prompt, or even turn things on and off.
The config you see is the default config of One Button Prompt.
You can overwrite these, so for example, if you always want a pose to be generated change __posechance;uncommon__ to __posechance;always__
You can use the following random chances, in order of increasing appearing chance:
- always
- common
- normal
- uncommon
- rare
- legendary
- unique
- extraordinary
- novel
- never
# other main lists, in order of appearance;
# setting the random chance, for normal generation;
# these can be, in order of most appearing to least appearing;
# always, common, normal, uncommon, rare, legendary, unique, extraordinary, novel, never;
custominputprefixrepeats;2
custominputprefixchance;uncommon
imagetypechance;normal
imagetypequalitychance;rare
# some prefixes that happen rarely;
minilocationadditionchance;unique
artmovementprefixchance;unique
minivomitprefix1chance;rare
minivomitprefix2chance;unique
# shot size generation;
shotsizechance;uncommon
# subject specific stuff;
subjectdescriptor1chance;common
subjectdescriptor2chance;uncommon
subjectbodytypechance;normal
subjectculturechance;normal
subjectconceptsuffixchance;unique
# subjectlandscape specific stuff;
subjectlandscapeinsideshotchance;unique
subjectlandscapeaddonlocationchance;normal
subjectlandscapeaddonlocationdescriptorchance;rare
subjectlandscapeaddonlocationculturechance;rare
# all additions;
objectadditionsrepeats;2
objectadditionschance;uncommon
humanadditionchance;rare
overalladditionchance;extraordinary
# humanoid other stuff;
emojichance;legendary
joboractivitychance;normal
# things in the middle of the prompt;
custominputmidrepeats;2
custominputmidchance;uncommon
minivomitmidchance;unique
# humanoid main stuff;
outfitchance;normal
posechance;uncommon
hairchance;normal
accessorychance;normal
humanoidinsideshotchance;legendary
humanoidbackgroundchance;uncommon
# minilocation stuff;
landscapeminilocationchance;uncommon
generalminilocationchance;rare
# general stuff add the end of the prompt;
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
# custom style list (lora and tis);
customstyle1chance;uncommon
customstyle2chance;uncommon
# suffix custom list;
custominputsuffixrepeats;2
custominputsuffixchance;uncommon
# artists stuff;
artistsatbackchance;uncommon