From 62d8e836ff82cfbf96c666c40035bd7931acf9b6 Mon Sep 17 00:00:00 2001 From: AIrjen Date: Mon, 22 May 2023 21:38:23 +0200 Subject: [PATCH] background things trying to switch prompt during batches, so far no luck --- build_dynamic_prompt.py | 87 ++++++++--------- csvfiles/special_lists/backgroundtypes.csv | 9 ++ csvfiles/special_lists/insideshots.csv | 4 + csvfiles/special_lists/photoadditions.csv | 1 + scripts/onebuttonprompt.py | 106 +++++++++++++-------- 5 files changed, 123 insertions(+), 84 deletions(-) create mode 100644 csvfiles/special_lists/backgroundtypes.csv create mode 100644 csvfiles/special_lists/insideshots.csv create mode 100644 csvfiles/special_lists/photoadditions.csv diff --git a/build_dynamic_prompt.py b/build_dynamic_prompt.py index 6bb2a3f..37a4c8e 100644 --- a/build_dynamic_prompt.py +++ b/build_dynamic_prompt.py @@ -92,26 +92,35 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all custominputsuffixlist = csv_to_list("custom_input_suffix",antilist,"./userfiles/") generatecustominputsuffix = bool(custominputsuffixlist) # True of not empty + # special lists + backgroundtypelist = csv_to_list("backgroundtypes", antilist,"./csvfiles/special_lists/") + insideshotlist = csv_to_list("insideshots", antilist,"./csvfiles/special_lists/") + photoadditionlist = csv_to_list("photoadditions", antilist,"./csvfiles/special_lists/") - generateoutfit = True - generatebodytype = True - generateaccesorie = True - generateartmovement = True - generatebackground = True - generatecamera = True - generatecolorscheme = True - generatedescriptors = True - generatedirection = True - generatefocus = True - generatehairstyle = True - generatelens = True - generatelighting = True - generatemood = True - generatepose = True - generatevomit = True - generatequality = True - generateshot = True - generatetimeperiod = True + + generateoutfit = bool(outfitlist) + generatebodytype = bool(bodytypelist) + generateaccesorie = bool(accessorielist) + generateartmovement = bool(artmovementlist) + generatecamera = bool(cameralist) + generatecolorscheme = bool(colorschemelist) + generatedescriptors = bool(descriptorlist) + generatedirection = bool(directionlist) + generatefocus = bool(focuslist) + generatehairstyle = bool(hairstylelist) + generatelens = bool(lenslist) + generatelighting = bool(lightinglist) + generatemood = bool(moodlist) + generatepose = bool(poselist) + generatevomit = bool(vomitlist) + generatequality = bool(qualitylist) + generateshot = bool(shotsizelist) + generatetimeperiod = bool(timeperiodlist) + + # specials: + generatebackground = bool(backgroundtypelist) + generateinsideshot = bool(insideshotlist) + generatephotoaddition = bool(photoadditionlist) # Smart subject logic if(givensubject !="" and smartsubject == True): @@ -179,10 +188,11 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all # background foundinlist = any(word.lower() in [item.lower() for item in locationlist] for word in givensubjectlist) foundinlist2 = any(word.lower() in [item.lower() for item in buildinglist] for word in givensubjectlist) - keywordslist = ["location","background"] + keywordslist = ["location","background", "inside"] keywordsinstring = any(word.lower() in givensubject.lower() for word in keywordslist) if(foundinlist == True or foundinlist2 == True or keywordsinstring == True): generatebackground = False + generateinsideshot = False # accessorielist foundinlist = any(word.lower() in [item.lower() for item in accessorielist] for word in givensubjectlist) @@ -295,9 +305,8 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all # custom prefix list - if(uncommon_dist(insanitylevel) and generatecustominputprefix == True): - completeprompt += random.choice(custominputprefixlist) + ", " - if(uncommon_dist(insanitylevel)): + for i in range(2): + if(uncommon_dist(insanitylevel) and generatecustominputprefix == True): completeprompt += random.choice(custominputprefixlist) + ", " @@ -530,7 +539,7 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all if unique_dist(insanitylevel): animaladdlist = ["baby", "were", "giant", "monster"] animaladdedsomething = 1 - completeprompt += random.choice(animaladdlist) + " -animal-" + completeprompt += random.choice(animaladdlist) + " -animal- " if(animaladdedsomething != 1): completeprompt += random.choice(animallist) + " " @@ -751,28 +760,13 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all if(uncommon_dist(insanitylevel)): completeprompt += random.choice(accessorielist) + ", " - if(legendary_dist(insanitylevel) and subjectchooser not in ["landscape", "concept"] and generatebackground == True): + if(legendary_dist(insanitylevel) and subjectchooser not in ["landscape", "concept"] and generateinsideshot == True): insideshot = 1 - completeprompt += ", from inside of a " - addontolocation = [locationlist,buildinglist] - completeprompt += random.choice(random.choice(addontolocation)) + ", " + completeprompt += random.choice(insideshotlist) + ", " if(subjectchooser not in ["landscape", "concept"] and humanspecial != 1 and insideshot == 0 and uncommon_dist(insanitylevel) and generatebackground == True): - backgroundtypelist = ["landscape", "buildingbackground", "insidebuilding"] - backgroundtype = random.choice(backgroundtypelist) - if(backgroundtype == "landscape"): - completeprompt += "background is " + random.choice(locationlist) + ", " - elif(backgroundtype == "buildingbackground"): - completeprompt += ", background is " - if(uncommon_dist(insanitylevel)): - completeprompt += random.choice(descriptorlist) + " " - completeprompt += random.choice(buildinglist) + ", " - elif(backgroundtype == "insidebuilding"): - completeprompt += ", inside a " - if(uncommon_dist(insanitylevel)): - completeprompt += random.choice(descriptorlist) + " " - completeprompt += random.choice(buildinglist) + ", " - + completeprompt += random.choice(backgroundtypelist) + ", " + @@ -801,10 +795,11 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all completeprompt += random.choice(lightinglist) + ", " # determine wether we have a photo or not - if("hoto" in completeprompt): + if("photo" in completeprompt.lower()): isphoto = 1 - if(common_dist(insanitylevel) and not "film grain" in antilist): - completeprompt += ", film grain, " + + if(common_dist(insanitylevel) and isphoto == 1 and generatephotoaddition == True): + completeprompt += random.choice(photoadditionlist) if(isphoto == 1 and generatecamera == True): completeprompt += random.choice(cameralist) + ", " diff --git a/csvfiles/special_lists/backgroundtypes.csv b/csvfiles/special_lists/backgroundtypes.csv new file mode 100644 index 0000000..ee8d29d --- /dev/null +++ b/csvfiles/special_lists/backgroundtypes.csv @@ -0,0 +1,9 @@ +background is -location- +background is -building- +inside a -building- +background is -descriptor- -location- +background is -descriptor- -building- +inside a -descriptor- -building- +plain background +plain -color- background +-color- and -color- background \ No newline at end of file diff --git a/csvfiles/special_lists/insideshots.csv b/csvfiles/special_lists/insideshots.csv new file mode 100644 index 0000000..654e20d --- /dev/null +++ b/csvfiles/special_lists/insideshots.csv @@ -0,0 +1,4 @@ +from inside of a -location- +from inside of a -building- +from inside of a -descriptor- -location- +from inside of a -descriptor- -building- \ No newline at end of file diff --git a/csvfiles/special_lists/photoadditions.csv b/csvfiles/special_lists/photoadditions.csv new file mode 100644 index 0000000..9e21197 --- /dev/null +++ b/csvfiles/special_lists/photoadditions.csv @@ -0,0 +1 @@ +film grain \ No newline at end of file diff --git a/scripts/onebuttonprompt.py b/scripts/onebuttonprompt.py index a31390f..eb79e27 100644 --- a/scripts/onebuttonprompt.py +++ b/scripts/onebuttonprompt.py @@ -307,6 +307,17 @@ class Script(scripts.Script): with gr.Column(scale=2): ANDtoggle = gr.Dropdown( ANDtogglemode, label="Prompt seperator mode", value="none") + with gr.Row(): + gr.Markdown( + """ + + Other advanced options: + + """) + with gr.Row(): + with gr.Column(scale=1): + prompteachiteration = gr.Checkbox( + label="Generate new prompt for each Batch Size", value=False) with gr.Row(): gr.Markdown( """ @@ -624,12 +635,12 @@ class Script(scripts.Script): - return [insanitylevel,subject, artist, imagetype, prefixprompt,suffixprompt,negativeprompt, promptcompounderlevel, ANDtoggle, silentmode, workprompt, antistring, seperator, givensubject, smartsubject, giventypeofimage] + return [insanitylevel,subject, artist, imagetype, prefixprompt,suffixprompt,negativeprompt, promptcompounderlevel, ANDtoggle, silentmode, workprompt, antistring, seperator, givensubject, smartsubject, giventypeofimage, prompteachiteration] - def run(self, p, insanitylevel, subject, artist, imagetype, prefixprompt,suffixprompt,negativeprompt, promptcompounderlevel, ANDtoggle, silentmode, workprompt, antistring,seperator, givensubject, smartsubject, giventypeofimage): + def run(self, p, insanitylevel, subject, artist, imagetype, prefixprompt,suffixprompt,negativeprompt, promptcompounderlevel, ANDtoggle, silentmode, workprompt, antistring,seperator, givensubject, smartsubject, giventypeofimage,prompteachiteration): images = [] infotexts = [] @@ -664,42 +675,55 @@ class Script(scripts.Script): for i in range(batches): if(silentmode == False): - # prompt compounding - print("Starting generating the prompt") - preppedprompt = "" - if(ANDtoggle == "automatic"): - preppedprompt += prefixprompt + ", " - if(artist != "none"): - preppedprompt += build_dynamic_prompt(insanitylevel,subject,artist, imagetype, True, antistring) - if(subject == "humanoid"): - preppedprompt += ", " + promptcompounderlevel + " people" - if(subject == "landscape"): - preppedprompt += ", landscape" - if(subject == "animal"): - preppedprompt += ", " + promptcompounderlevel + " animals" - if(subject == "object"): - preppedprompt += ", " + promptcompounderlevel + " objects" + promptlist = [] + negativepromptlist = [] + # Either do this once, or for each iteration + if(prompteachiteration==True): + amountofpromptstogen = batchsize + else: + amountofpromptstogen = 1 - if(ANDtoggle != "none" and ANDtoggle != "automatic"): - preppedprompt += prefixprompt - - if(ANDtoggle != "none"): - if(ANDtoggle!="prefix + prefix + prompt + suffix"): - prefixprompt = "" - if(seperator == "comma"): - preppedprompt += " \n , " - else: - preppedprompt += " \n " + seperator + " " - - #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) + for i in range(amountofpromptstogen): + # prompt compounding + print("Starting generating the prompt") + preppedprompt = "" + + if(ANDtoggle == "automatic"): + preppedprompt += prefixprompt + ", " + if(artist != "none"): + preppedprompt += build_dynamic_prompt(insanitylevel,subject,artist, imagetype, True, antistring) + if(subject == "humanoid"): + preppedprompt += ", " + promptcompounderlevel + " people" + if(subject == "landscape"): + preppedprompt += ", landscape" + if(subject == "animal"): + preppedprompt += ", " + promptcompounderlevel + " animals" + if(subject == "object"): + preppedprompt += ", " + promptcompounderlevel + " objects" - # set everything ready - p.prompt = preppedprompt - p.negative_prompt = negativeprompt + if(ANDtoggle != "none" and ANDtoggle != "automatic"): + preppedprompt += prefixprompt + + if(ANDtoggle != "none"): + if(ANDtoggle!="prefix + prefix + prompt + suffix"): + prefixprompt = "" + if(seperator == "comma"): + preppedprompt += " \n , " + else: + preppedprompt += " \n " + seperator + " " + + #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) - if(silentmode == True): + # set everything ready + p.prompt = preppedprompt + p.negative_prompt = negativeprompt + promptlist.append(p.prompt) + negativepromptlist.append(p.negative_prompt) + + + else: p.prompt = workprompt #for j in range(batchsize): @@ -710,11 +734,17 @@ class Script(scripts.Script): print(p.prompt) # finally figured out how to do multiple batch sizes - promptlist = [] - for i in range(batchsize): - promptlist.append(p.prompt) + if(prompteachiteration==False): + promptlist = [] + negativepromptlist = [] + for i in range(batchsize): + promptlist.append(p.prompt) + negativepromptlist.append(p.negative_prompt) - p.prompt = promptlist + p.prompt = preppedprompt + p.all_prompts = promptlist + p.negativeprompt = negativeprompt + p.all_negative_prompts = negativepromptlist p.batch_size = batchsize processed = process_images(p) images += processed.images