Merge pull request #83 from AIrjen/csv_to_control_generation
Csv to control generation
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
|
||||
*.pyc
|
||||
userfiles/antilist.csv
|
||||
userfiles/config.csv
|
||||
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -26,6 +26,7 @@ Anime Eyes
|
||||
Hair Tie
|
||||
Hair Clip
|
||||
Hair Ribbons
|
||||
Flower in hair
|
||||
Barrette
|
||||
Hat
|
||||
Trucker hat
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -23,4 +23,6 @@ Terrarium
|
||||
Fishbowl
|
||||
Paperweight
|
||||
Glass canister
|
||||
Machine
|
||||
Machine
|
||||
Glass case
|
||||
Display case
|
||||
|
@@ -199,7 +199,6 @@ Papuan
|
||||
Mennonite
|
||||
Basque
|
||||
Hmong
|
||||
Basque
|
||||
Catalan
|
||||
Bavarian
|
||||
Swiss
|
||||
|
||||
|
@@ -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
|
||||
|
+509
-508
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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,3 +1,4 @@
|
||||
feminine
|
||||
masculine
|
||||
androgynous
|
||||
description;gender
|
||||
feminine;female
|
||||
masculine;male
|
||||
androgynous;undetermined
|
||||
|
+3
-1
@@ -365,4 +365,6 @@ Cowgirl
|
||||
Pop Singer
|
||||
President
|
||||
Construction worker
|
||||
Idol
|
||||
Idol
|
||||
Nerd
|
||||
Geek
|
||||
|
@@ -1,2 +1,3 @@
|
||||
Male
|
||||
Female
|
||||
malefemale;gender
|
||||
Male;male
|
||||
Female;female
|
||||
|
@@ -1,2 +1,7 @@
|
||||
Man
|
||||
Woman
|
||||
manwoman;gender
|
||||
Man;male
|
||||
Woman;female
|
||||
Boy;male
|
||||
Girl;female
|
||||
Male;male
|
||||
Female;female
|
||||
|
@@ -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
|
||||
|
+1163
-1162
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
|
@@ -23,4 +23,5 @@ simple -color- background
|
||||
-descriptor- background
|
||||
-descriptor- -color- background
|
||||
-culture- background
|
||||
-space- background
|
||||
-space- background
|
||||
-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-
|
||||
|
||||
|
@@ -6,4 +6,5 @@
|
||||
-color- -minilocation-
|
||||
lush -minilocation-
|
||||
dense -minilocation-
|
||||
-season- -minilocation-
|
||||
-season- -minilocation-
|
||||
-minilocation- with -flora-
|
||||
|
@@ -10,4 +10,5 @@ detailed with -material- -descriptor- patterns
|
||||
intricate details
|
||||
smooth
|
||||
designed by -brand-
|
||||
made from -space-
|
||||
made from -space-
|
||||
made from -flora-
|
||||
|
@@ -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-
|
||||
|
@@ -24,4 +24,7 @@ Glacier
|
||||
Underwater Cave
|
||||
Onsen
|
||||
Bath
|
||||
Shower
|
||||
Shower
|
||||
Sauna
|
||||
Spa
|
||||
Thermal baths
|
||||
|
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user