From 858c78343c1a05f404523746d315427b2f47e0d2 Mon Sep 17 00:00:00 2001 From: AIrjen <130234949+AIrjen@users.noreply.github.com> Date: Fri, 19 May 2023 08:09:46 +0200 Subject: [PATCH] In control update part 2 (#30) * custom artist lists * override lists logic and fix for artists * support for TI and Lora * Added support for custom lists * overwrite type of image option * some minor fixes * Foods deserved their own list * Added loads of new stuff in listwork Also added an automatic duplicate remover * Descriptions and lists * Create custom_files.md * Create override_subject_and_infinite_variations.md * Update override_subject_and_infinite_variations.md * Update README.md * minor typos --- README.md | 13 +- build_dynamic_prompt.py | 117 ++- csv_reader.py | 43 +- csvfiles/accessories.csv | 11 +- csvfiles/artmovements.csv | 92 +- csvfiles/buildings.csv | 8 +- csvfiles/cameras.csv | 3 +- csvfiles/concept_prefix.csv | 3 +- csvfiles/concept_suffix.csv | 4 +- csvfiles/descriptors.csv | 350 ++++++- csvfiles/foods.csv | 863 ++++++++++++++++++ csvfiles/greatworks.csv | 4 +- csvfiles/lighting.csv | 4 +- csvfiles/moods.csv | 5 +- csvfiles/nonfictional characters.csv | 778 +++++++++++++++- csvfiles/objects.csv | 91 +- csvfiles/vehicles.csv | 3 +- main.py | 4 +- random_functions.py | 2 +- scripts/onebuttonprompt.py | 29 +- user_guides/custom_files.md | 80 ++ ...verride_subject_and_infinite_variations.md | 191 ++++ userfiles/add antilist csv file here.txt | 11 - userfiles/add own csv files here.txt | 33 + userfiles/antilist_sample.csv | 3 + userfiles/custom_input_mid_sample.csv | 0 userfiles/custom_input_prefix_sample.csv | 0 userfiles/custom_input_suffix_sample.csv | 0 userfiles/personal_artists_sample.csv | 8 + userfiles/styles_ti_lora_sample.csv | 12 + userfiles/vehicles_addon_sample.csv | 1 + userfiles/vehicles_replace_sample.csv | 4 + 32 files changed, 2562 insertions(+), 208 deletions(-) create mode 100644 csvfiles/foods.csv create mode 100644 user_guides/custom_files.md create mode 100644 user_guides/override_subject_and_infinite_variations.md delete mode 100644 userfiles/add antilist csv file here.txt create mode 100644 userfiles/add own csv files here.txt create mode 100644 userfiles/antilist_sample.csv create mode 100644 userfiles/custom_input_mid_sample.csv create mode 100644 userfiles/custom_input_prefix_sample.csv create mode 100644 userfiles/custom_input_suffix_sample.csv create mode 100644 userfiles/personal_artists_sample.csv create mode 100644 userfiles/styles_ti_lora_sample.csv create mode 100644 userfiles/vehicles_addon_sample.csv create mode 100644 userfiles/vehicles_replace_sample.csv diff --git a/README.md b/README.md index ec29525..4cdfb5c 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,15 @@ It is best used on all-purpose models, such as Stable Difussion 1.5 or those bas A simple user guide for first time use and settings is available [here](https://github.com/AIrjen/OneButtonPrompt/blob/main/user_guides/my_first_generation.md). +# Features +- __Full prompt generation__ with the click of a button. ==> [guide to my first generation](https://github.com/AIrjen/OneButtonPrompt/blob/main/user_guides/my_first_generation.md) +- Supports __TXT2IMG, IMG2IMG, ControlNET, inpainting and latent couple__. +- __Workflow assist__, generate multiple prompts with One Button. +- Create __infinite variations__ of a __chosen subject__. ==> [guide to override subject](https://github.com/AIrjen/OneButtonPrompt/blob/main/user_guides/override_subject_and_infinite_variations.md) +- Fully __automated generation, classification and upscaling__. ==> [guide to one_button_run_and_upscale](https://github.com/AIrjen/OneButtonPrompt/blob/main/user_guides/one_button_run_and_upscale.md) +- Add __LoRA's__, customize lists and personal artists choices. ==> [guide to custom files](https://github.com/AIrjen/OneButtonPrompt/blob/main/user_guides/custom_files.md) +- __Compound__ multiple prompts together for unexpected results. + ## How to use in automatic1111 In TXT2IMG or IMG2IMG, select the script "One Button Prompt". @@ -166,8 +175,8 @@ All with a single press of __One Button__. Some ideas I'd like to implement: - The In Control update - ~~Choose your own subject~~ Done - - Split up subjects more, and pick more detailed subjects, such as food, female, building, etc - - Support for LoRA and textual inversions + - ~~Split up subjects more, and pick more detailed subjects, such as food, female, building, etc~~ Done + - ~~Support for LoRA and textual inversions~~ Done - Trigger word support - ~~Bring upscale automation to front-end~~ Done - ~~Better workflow management in workflow assist tab~~ Done diff --git a/build_dynamic_prompt.py b/build_dynamic_prompt.py index 4800072..6bb2a3f 100644 --- a/build_dynamic_prompt.py +++ b/build_dynamic_prompt.py @@ -10,7 +10,7 @@ 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): +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=""): # first build up a complete anti list. Those values are removing during list building @@ -66,6 +66,31 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all shotsizelist = csv_to_list("shotsizes",antilist) timeperiodlist = csv_to_list("timeperiods",antilist) vomitlist = csv_to_list("vomit",antilist) + foodlist = csv_to_list("foods", antilist) + + # build artists list + # create artist list to use in the code, maybe based on category or personal lists + if(artists != "all" and artists != "none" and artists.startswith("personal_artists") == False and artists.startswith("personal artists") == False): + artistlist = artist_category_csv_to_list("artists_and_category",artists) + elif(artists.startswith("personal_artists") == True or artists.startswith("personal artists") == True): + artists = artists.replace(" ","_",-1) # add underscores back in + artistlist = csv_to_list(artists,antilist,"./userfiles/") + else: + artistlist = csv_to_list("artists",antilist) + + + # add any other custom lists + stylestiloralist = csv_to_list("styles_ti_lora",antilist,"./userfiles/") + generatestyle = bool(stylestiloralist) # True of not empty + + custominputprefixlist = csv_to_list("custom_input_prefix",antilist,"./userfiles/") + generatecustominputprefix = bool(custominputprefixlist) # True of not empty + + custominputmidlist = csv_to_list("custom_input_mid",antilist,"./userfiles/") + generatecustominputmid = bool(custominputmidlist) # True of not empty + + custominputsuffixlist = csv_to_list("custom_input_suffix",antilist,"./userfiles/") + generatecustominputsuffix = bool(custominputsuffixlist) # True of not empty generateoutfit = True @@ -269,11 +294,11 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all completeprompt += ", " - # create artist list to use in the code, maybe based on category - if(artists != "all" and artists != "none"): - artistlist = artist_category_csv_to_list("artists_and_category",artists) - else: - artistlist = csv_to_list("artists") + # custom prefix list + if(uncommon_dist(insanitylevel) and generatecustominputprefix == True): + completeprompt += random.choice(custominputprefixlist) + ", " + if(uncommon_dist(insanitylevel)): + completeprompt += random.choice(custominputprefixlist) + ", " @@ -308,7 +333,7 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all subjectchooser = subjectchooserlist[random.randint(0, 1)] - hybridlist = ["-animal-", "-object-", "-fictional-", "-nonfictional-", "-building-", "-vehicle-"] + hybridlist = ["-animal-", "-object-", "-fictional-", "-nonfictional-", "-building-", "-vehicle-","-food-"] hybridhumanlist = ["-fictional-", "-nonfictional-"] @@ -402,27 +427,33 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all # start image type - if(imagetype != "all" and imagetype != "all - force multiple" and imagetype != "only other types"): - completeprompt += " " + imagetype + ", " - elif(imagetype == "all - force multiple" or unique_dist(insanitylevel)): - amountofimagetypes = random.randint(2,3) - elif(imagetype == "only other types"): - othertype = 1 - completeprompt += random.choice(othertypelist) + " of a " - - if(imagetype == "all" and normal_dist(insanitylevel) and amountofimagetypes <= 1): - amountofimagetypes = 1 - - for i in range(amountofimagetypes): - # one in 6 images is a complex/other type - if(random.randint(0,5) < 5): - completeprompt += ", " + random.choice(imagetypelist) + " " - else: + if(giventypeofimage==""): + if(imagetype != "all" and imagetype != "all - force multiple" and imagetype != "only other types"): + completeprompt += " " + imagetype + ", " + elif(imagetype == "all - force multiple" or unique_dist(insanitylevel)): + amountofimagetypes = random.randint(2,3) + elif(imagetype == "only other types"): othertype = 1 - completeprompt += ", " + random.choice(othertypelist) + " " - - if(othertype==1): - completeprompt += " of a " + completeprompt += random.choice(othertypelist) + + if(imagetype == "all" and normal_dist(insanitylevel) and amountofimagetypes <= 1): + amountofimagetypes = 1 + + for i in range(amountofimagetypes): + # one in 6 images is a complex/other type + if(random.randint(0,5) < 5): + completeprompt += ", " + random.choice(imagetypelist) + " " + else: + othertype = 1 + completeprompt += ", " + random.choice(othertypelist) + " " + + if(othertype==1): + completeprompt += " of a " + else: + completeprompt += ", " + else: + othertype = 1 + completeprompt += giventypeofimage + " of a " # start shot size @@ -453,7 +484,7 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all completeprompt += random.choice(culturelist) + " " if(mainchooser == "object"): - objecttypelist = [objectlist, buildinglist, vehiclelist] # first select a random list, then randomly select from the corresponding list + objecttypelist = [objectlist, buildinglist, vehiclelist, foodlist] # first select a random list, then randomly select from the corresponding list # if we have a given subject, we should skip making an actual subject if(givensubject == ""): @@ -641,7 +672,7 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all # riding an animal, holding an object or driving a vehicle, rare if(subjectchooser in ["animal as human,","human","fictional", "non fictional", "humanoid"] and rare_dist(insanitylevel)): humanspecial = 1 - speciallist = [" riding a -animal- ", " holding a -object- ", " driving a -vehicle-", " visiting a -building-", " with a -animal-", " surrounded by -object-s"] + speciallist = [" riding a -animal- ", " holding a -object- ", " driving a -vehicle-", " visiting a -building-", " with a -animal-", " surrounded by -object-s", " eating -food-"] completeprompt += random.choice(speciallist) @@ -670,6 +701,13 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all skintypelist = ["-color-", "-material-"] completeprompt += ", with " + random.choice(skintypelist) + " skin, " + # custom mid list + if(uncommon_dist(insanitylevel) and generatecustominputmid == True): + completeprompt += random.choice(custominputmidlist) + ", " + if(uncommon_dist(insanitylevel)): + completeprompt += random.choice(custominputmidlist) + ", " + + # outfit builder if(subjectchooser in ["animal as human","human","fictional", "non fictional", "humanoid"] and normal_dist(insanitylevel) and generateoutfit == True): completeprompt += ", wearing " @@ -719,7 +757,7 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all addontolocation = [locationlist,buildinglist] completeprompt += random.choice(random.choice(addontolocation)) + ", " - if(subjectchooser not in ["landscape", "concept"] and humanspecial != 1 and insideshot == 0 and normal_dist(insanitylevel) and generatebackground == True): + 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"): @@ -794,6 +832,20 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all if(uncommon_dist(insanitylevel)): completeprompt += random.choice(qualitylist) + ", " + # custom style list + if(uncommon_dist(insanitylevel) and generatestyle == True): + completeprompt += random.choice(stylestiloralist) + ", " + if(uncommon_dist(insanitylevel)): + completeprompt += random.choice(stylestiloralist) + ", " + + + # custom suffix list + if(uncommon_dist(insanitylevel) and generatecustominputsuffix == True): + completeprompt += random.choice(custominputsuffixlist) + ", " + if(uncommon_dist(insanitylevel)): + completeprompt += random.choice(custominputsuffixlist) + ", " + + if artistmode in ["enhancing"]: completeprompt += "::" + str(random.randint(1,17)) + "]" @@ -883,7 +935,7 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all #end of the while loop, now clean up the prompt # lol, this needs a rewrite :D - while "-color-" in completeprompt or "-material-" in completeprompt or "-animal-" in completeprompt or "-object-" in completeprompt or "-fictional-" in completeprompt or "-nonfictional-" in completeprompt or "-conceptsuffix-" in completeprompt or "-building-" in completeprompt or "-vehicle-" in completeprompt or "-outfit-" in completeprompt or "-location-" in completeprompt or "-conceptprefix-" in completeprompt or "-descriptor-" in completeprompt: + while "-color-" in completeprompt or "-material-" in completeprompt or "-animal-" in completeprompt or "-object-" in completeprompt or "-fictional-" in completeprompt or "-nonfictional-" in completeprompt or "-conceptsuffix-" in completeprompt or "-building-" in completeprompt or "-vehicle-" in completeprompt or "-outfit-" in completeprompt or "-location-" in completeprompt or "-conceptprefix-" in completeprompt or "-descriptor-" in completeprompt or "-food-" in completeprompt: while "-object-" in completeprompt: completeprompt = completeprompt.replace('-object-', random.choice(objectlist),1) @@ -922,6 +974,9 @@ def build_dynamic_prompt(insanitylevel = 5, forcesubject = "all", artists = "all while "-descriptor-" in completeprompt: completeprompt = completeprompt.replace('-descriptor-', random.choice(descriptorlist),1) + + while "-food-" in completeprompt: + completeprompt = completeprompt.replace('-food-', random.choice(foodlist),1) diff --git a/csv_reader.py b/csv_reader.py index 47bddba..14056c2 100644 --- a/csv_reader.py +++ b/csv_reader.py @@ -18,21 +18,58 @@ 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): +def csv_to_list(csvfilename, antilist=[], directory="./csvfiles/", lowerandstrip=0, delimiter=";"): + userfilesdirectory = "./userfiles/" + userfileaddonname = csvfilename + "_addon.csv" + userfilereplacename = csvfilename + "_replace.csv" csvlist = [] script_dir = os.path.dirname(os.path.abspath(__file__)) full_path = os.path.join(script_dir, directory ) + userfilesfolder = os.path.join(script_dir, userfilesdirectory ) + # check if there is a replace file + if(directory=="./csvfiles/"): + for filename in os.listdir(userfilesfolder): + if(filename == userfilereplacename): + # Just override the parameters, and let it run normally + full_path = os.path.join(script_dir, userfilesdirectory ) + csvfilename = csvfilename + "_replace" + + # return empty list if we can't find the file. Build for antilist.csv 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=",") + reader = csv.reader(file, delimiter=delimiter) 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]) - return csvlist + + # do the add ons! + if(directory=="./csvfiles/"): + 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=",") + 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]) + + + # remove duplicates, but check only for lowercase stuff + deduplicated_list = [] + lowercase_elements = set() + + for element in csvlist: + lowercase_element = element.lower() + if lowercase_element not in lowercase_elements: + lowercase_elements.add(lowercase_element) + deduplicated_list.append(element) + + return deduplicated_list def artist_category_csv_to_list(csvfilename,category): csvlist = [] diff --git a/csvfiles/accessories.csv b/csvfiles/accessories.csv index 34075ee..d904f76 100644 --- a/csvfiles/accessories.csv +++ b/csvfiles/accessories.csv @@ -63,7 +63,7 @@ Day of the Dead face paint -animal- face paint tribal face paint clown face paint -Halloween face pain +Halloween face paint Fantasy face paint Sports team face paint Superhero face paint @@ -110,4 +110,11 @@ Belts Cape Cloak -material- trimmings -Large head \ No newline at end of file +Large head +Geass +Sharingan +crazy eyes +empty eyes +dashed eyes +heart-shaped eyes +amphibian eyes \ No newline at end of file diff --git a/csvfiles/artmovements.csv b/csvfiles/artmovements.csv index 683cd2e..8b03734 100644 --- a/csvfiles/artmovements.csv +++ b/csvfiles/artmovements.csv @@ -176,4 +176,94 @@ still life stonepunk voidpunk voxel art -weirdcore \ No newline at end of file +weirdcore +Auroracore +Barbiecore +Bardcore +Bastardcore +Bimbocore +Bombacore +Breakcore +Britpop +Brocore +Bronzepunk +Cartelcore +Cartooncore +Christcore +Cleancore +Clockpunk +Cutecore +Corporate Punk +Crowcore +Crustpunk +Cryptidcore +Darkcore +Decopunk +Decora +De Stijl +Dieselpunk +Dragoncore +Dreamcore +Duckcore +Dullcore +Dual Kawaii +Europunk +Fashwave +Feralcore +Gamercore +Gadgetpunk +Goblincore +Glitchcore +Gloomcore +Glowwave +Grindhouse +Hackercore +Hermitpunk +Hispanicore +Hyperpop +Icepunk +Junglecore +Kingcore +Knightcore +Lightcore +Libertywave +Magewave +Lunarpunk +Miniaturecore +Mushroomcore +Mythpunk +Nanopunk +Naturecore +Nihilcore +Nintencore +Pixiecore +Post-Apocalyptic +Post-Impressionism +Post-Punk +Post-rock +Prehistoricore +Princecore +Princesscore +Printcore +Queencore +Royalcore +Rusticcore +Rollerwave +Sleepycore +Slimepunk +Terrorwave +Teslapunk +Thriftcore +Tinkercore +Tinycore +Trendercore +Trillwave +Vaporwave +Villagecore +Villaincore +Warmcore +Weirdcore +Witchcore +Wizardcore +Yankeecore +Yume Kawaii \ No newline at end of file diff --git a/csvfiles/buildings.csv b/csvfiles/buildings.csv index cad8438..dcd6755 100644 --- a/csvfiles/buildings.csv +++ b/csvfiles/buildings.csv @@ -188,4 +188,10 @@ St. Basil's Cathedral Canterbury Cathedral St. Patrick's Cathedral Duomo di Milano -St. Stephen's Cathedral \ No newline at end of file +St. Stephen's Cathedral +bakery +food stand +ice cream stand +cafeteria +tavern +supermarket diff --git a/csvfiles/cameras.csv b/csvfiles/cameras.csv index ceaaff6..391e7f1 100644 --- a/csvfiles/cameras.csv +++ b/csvfiles/cameras.csv @@ -21,4 +21,5 @@ Kodak gold 200 Nikon d850 Sony A9 II Fuji superia 400 -dslr \ No newline at end of file +dslr +Ilford HP5 \ No newline at end of file diff --git a/csvfiles/concept_prefix.csv b/csvfiles/concept_prefix.csv index 1400636..e191785 100644 --- a/csvfiles/concept_prefix.csv +++ b/csvfiles/concept_prefix.csv @@ -101,4 +101,5 @@ Spirit Agent Moon Gift -Brain \ No newline at end of file +Brain +Isles \ No newline at end of file diff --git a/csvfiles/concept_suffix.csv b/csvfiles/concept_suffix.csv index f0a201c..ea759a6 100644 --- a/csvfiles/concept_suffix.csv +++ b/csvfiles/concept_suffix.csv @@ -79,4 +79,6 @@ Study Metal Paradise Sea -The night \ No newline at end of file +The night +Shattering +Mirrors \ No newline at end of file diff --git a/csvfiles/descriptors.csv b/csvfiles/descriptors.csv index a5f2415..6641835 100644 --- a/csvfiles/descriptors.csv +++ b/csvfiles/descriptors.csv @@ -35,7 +35,6 @@ Enticing Tempting Captivating Fascinating -Alluring Irresistible Sensual Sexy @@ -63,12 +62,10 @@ Stimulating Lively Vibrant Dynamic -Radiant Sparkling Glittering Shimmering Glistening -Dazzling Glowing Smiling Illuminating @@ -149,7 +146,7 @@ Stale Tired Exhausted Weary -Worn-out +Worn-Out Fatigued Uninspired Unmotivated @@ -209,7 +206,7 @@ Hairy Fluffy Old Young -Middle aged +Middle Aged Mecha Giant Tiny @@ -218,12 +215,11 @@ Liquid Enchanted Mystical Otherworldly -Fairy-tale +Fairy-Tale Supernatural Fantastical Mystifying Mythical -Spellbinding Magical Bioluminescent Elder @@ -234,19 +230,18 @@ Flaming Feminine Masculine Cartoony -2000's -1990's -1980's -1970's -1960's -1950's -1940's -1940's -1920's -1900's -1800's -1700's -1600's +2000'S +1990'S +1980'S +1970'S +1960'S +1950'S +1940'S +1920'S +1900'S +1800'S +1700'S +1600'S Luminescent Floating Shiny @@ -281,7 +276,6 @@ Maximalist Glad Folded Glam -Chic Zen Rustic Rich @@ -314,19 +308,301 @@ Arcane Ruthless Eerie 16-Bit -1950s suburbia -alhambresque -alien -Amiga 500 style -Atari 2600 style -apocalyptic -avant-garde -basic -biochemical -biomorphic -biophilic -biopunk -deserted -desolate -feline -Morbid \ No newline at end of file +1950S Suburbia +Alhambresque +Alien +Amiga 500 Style +Atari 2600 Style +Apocalyptic +Avant-Garde +Basic +Biochemical +Biomorphic +Biophilic +Biopunk +Deserted +Desolate +Feline +Morbid +Frilled +Dried +Frosted +Oversized +Lo-Fi +Shabby Chic +Tiki +Wanderlust +Fur-Trimmed +Warrior +Abandoned +Abhorrent +Abrasive +Absorbing +Abstract +Acclaimed +Accomplished +Adroit +Aesthetic +Aesthetically Pleasing +Angular +Appealing +Artistic +Aspiring +Astonishing +Atmospheric +Authentic +Average +Award-Winning +Awe-Inspiring +Balanced +Baroque +Biomechanical +Blue +Bold +Boorish +Boundless +Brilliant +Candid +Capricious +Ceramic +Characteristic +Classic +Clockwork +Cloudy +Cluttered +Cold +Collectable +Colorful +Colossal +Complementary +Complex +Conceptual +Conscious +Contemplative +Contemporary +Controversial +Conversational +Cool +Creative +Cromulent +Cyberpunk +Daring +Deafening +Decorative +Deeply Thoughtful +Delicious +Delightful +Detailed +Deteriorating +Dieselpunk +Dilapidated +Dimensional +Dire +Disciplined +Disruptive +Distinctive +Distinguished +Divine +Draconian +Dreamlike +Dusty +Dystopian +Eclectic +Efficacious +Elastic +Elevated +Elevating +Elite +Elusive +Emergent +Emerging +Emotional +Emotionally Charged +Energetic +Engrossing +Enigmatic +Epic +Epochal +Evil +Evocative +Exceptional +Explosive +Expressive +Extraordinary +Extreme +Fallacious +Feigned +Festive +Fiery +Figural +Figurative +Flowery +Foggy +Frantic +Freelance +Fresh +Fruit-Flavored +Functional +Funny +Gentle +Ghastly +Ghostly +Gigantic +Glib +Good +Granular +Groovy +Grouchy +Grumpy +Harsh +Hesitant +Holistic +Honest +Honorable +Human +Hyper-Creative +Hyperdetailed +Icy +Illuminated +Imaginative +Impassioned +Impeccable +Impressionist +Impressive +Incredibly Detailed +Infused +Inspirational +Inspired +Instinctive +Intellectual +Intensive +Interesting +Intuitive +Inventive +Jealous +Kindhearted +Labyrinthine +Layered +Level +Lifelike +Literal +Luminous +Lyrical +Macho +Maniacal +Masterpiece +Matte +Mature +Meandering +Meek +Mind-Bending +Modular +Moody +Mosaic-Like +Moving +Mysterious +Narrative +Neat +Nonchalant +Noxious +Nutty +Oppressive +Organic +Original +Overwrought +Painterly +Paradoxical +Parched +Passionate +Pastel +Personal +Petrified +Phenomenal +Pictorial +Potent +Primordial +Profound +Provoking +Psychadelic +Psychotic +Puny +Pure +Rainbow +Refined +Remarkable +Repressive +Resonant +Resourceful +Retrofuturistic +Revealing +Rickety +Romantic +Rounded +Ruined +Rusty +Saturated +Sculptural +Secret +Semi-Abstract +Serious +Shadowy +Shaky +Sharp +Signature +Simple +Skilled +Skillful +Spiritual +Sprawling +Squealing +Steampunk +Stirring +Stone +Striped +Studied +Sturdy +Sublime +Substantive +Superficial +Supersized +Supple +Sweltering +Swirling +Symbolic +Tactile +Talented +Tangible +Tasteful +Terrifying +Textile +Thought-Provoking +Thundering +Timeless +Touching +Tough +Traditional +Tremendous +Twisted +Unadvised +Unappetizing +Unconventional +Underwater +Unexpected +Unforgettable +Unique +Universal +Unnatural +Unpredictable +Untidy +Unusual +Uptight +Vengeful +Visionary +Visual +Visually Stimulating +Voyeuristic +Warlike +Weird +Wispy +Witty +Zany \ No newline at end of file diff --git a/csvfiles/foods.csv b/csvfiles/foods.csv new file mode 100644 index 0000000..db8ee4b --- /dev/null +++ b/csvfiles/foods.csv @@ -0,0 +1,863 @@ +Apple +Banana +Orange +Pineapple +Mango +Papaya +Watermelon +Kiwi +Grapefruit +Pear +Peach +Cherry +Blueberry +Strawberry +Raspberry +Blackberry +Cranberry +Lemon +Lime +Grape +Cantaloupe +Honeydew +Pomegranate +Fig +Plum +Apricot +Nectarine +Passionfruit +Guava +Starfruit +Dragonfruit +Avocado +Coconut +Lychee +Persimmon +Tangerine +Clementine +Grapefruit +Mango +Jackfruit +Papaya +Blackcurrant +Redcurrant +Gooseberry +Elderberry +Boysenberry +Kiwano +Melon +Rhubarb +Tomato +Pizza +Pasta +Sandwiches +Burgers +Tacos +Wraps +Stir-fry +Fried Rice +Soup +Salad +Roast chicken +Sushi +Fish and chips +Curry +BBQ +Grilled meat +Omelette +Quiche +Fried chicken +Meatloaf +Lasagne +Casserole +Stew +Meatballs +Cup of Coffee +Cup of Tea +Croissant +Danish pastry +Pain au chocolat +Brioche +Puff pastry +Éclair +Baklava +Strudel +Beignet +Scone +Bread +Charcuterie +Tortilla +abalone +açaí berries +açaí juice +acorn squash +aged japanese kurozu +albacore tuna +alcohol +ale +alfalfa sprouts +algae +almond +anchovies +anchovy +angus beef +appetizer +apple juice +apricot +arborio rice +arctic char +artichoke +artichokes +arugula +asian greens +asparagus +aspic +ate +autumn crocus +avocado +avocados +bacon +bagel +bake +balsamic vinegar +bamboo shoots +banana +banana split +barbecue +barbecued meat +barley +basil +batter +bean curd +beancurd +beans +beef +beer +beets +bell pepper +berry +biscuit +blackbeans +blackberries +blackberry +bland +blood orange +blueberry +boil +boiled egg +bok choy +bowl +boysenberries +boysenberry +bran +brazil nuts +breadfruit +breakfast +lunch +brunch +broccoli +broccoli sprouts +broil +brownie +brussels sprouts +buckwheat +buns +burrito +butter +butternut squash +cabbage +cake +calorie +candy +cantaloupe +capers +caramel +carbohydrate +carrot +cashew +cassava +casserole +cater +cauliflower +caviar +cayenne pepper +celeriac +celery +celery seed +cereal +chamomile +chard +cheddar +cheese +cheesecake +cherries +chew +chick peas +chicken +chickpeas +chili +chilli peppers +chips +chives +chocolate +chopsticks +chow +chutney +cilantro +cinnamon +citron +citrus +clam +clams +cloves +cobbler +coconut +cod +coffee +coleslaw +collard greens +cook +cookie +corn +cornflakes +cornmeal +cottage cheese +crab +crackers +cranberries +cranberry +cream +cream cheese +crepe +crisp +crunch +crust +cucumber +cuisine +cumin +cupboard +cupcake +curcumin +curds +curry +custard +daidzein +daikon +dairy +dal +dandelion greens +danish pastry +dates +dessert +dill +dish +dough +doughnut +dragonfruit +dressing +drink +dry +dry beans +durian +eat +edam cheese +edamame +egg +eggplant +elderberry +endive +entree +escargot +fastfood +fava beans +fennel +fermented bean paste +fermented milk +fig +fillet +fire +fish +flan +flax +flour +food +fork +french fries +fried potatoes +fruit +garbanzo beans +garden cress +garlic +gastronomy +gelatin +genistein +ghee +ginger +gingerale +gingerbread +glasses +gouda cheese +grain +granola +grape +grapefruit +grapes +grated +gravy +greenbean +guacamole +guava +gyro +halibut +ham +hamburger +hash +hazelnut +herbs +herring +holy basil +honey +horseradish +hot dog +hot peppers +hot sauce +hotdog +hummus +ice +ice cream +ice cream cone +iceberg lettuce +iced tea +icing +indian mustard +jackfruit +jalapeno +jam +jelly +jellybeans +jicama +jimmies +jordan almonds +juice +kale +kebab +kefir +kelp +ketchup +kettle +kidney beans +king mackerel +kitchen +kiwi +kiwifruit +knife +kohlrabi +kumquat +ladle +lake trout +lamb +lard +lasagna +lavender +leeks +legumes +lentils +lettuce +licorice +lima beans +limes +lingonberries +liquor +liver +loaf +lobster +loganberries +lollipop +long pepper +loquat +low-fat yogurt +lox +lunch +lunchmeat +lychee +macadamia nuts +macaroni +macaroon +mackerel +main course +maitake mushrooms +maize +mandarin orange +mango +mangoes +mangosteen +maple syrup +margarine +marionberrries +marionberry +marmalade +marshmallow +mashed +maté +mayonnaise +meat +meatballs +meatloaf +melon +melons +melted cheese +menu +meringue +mexican oregano +milk +milkshake +millet +mincemeat +minerals +mints +molasses +mozzarella +muffin +mug +munch +mung beans +mushrooms +muskmelon +mussels +mustard +mutton +napkin +navy beans +nectar +nectarine +nibble +noodles +nosh +nourish +nourishment +nut +nutella +nutmeg +oatmeal +oats +octopus +ohyo +okra +oleo +olive +olive oil +omelet +omnivore +onion +onions +orange +oranges +order +oregano +oven +oyster +oysters +pan +pancake +papaya +paprika +parsley +parsnips +passion fruit +pate +patty +pattypan squash +pea +peach +peanut +peanutbutter +peanuts +peapod +peas +pecan +pecans +pepper +peppermint +pepperoni +persimmon +persipan +pesto sauce +pickles +picnic +pie +pilaf +pineapple +pinto beans +pistachio nuts +pita bread +pitcher +plantago +plantains +plum +poached +pomegranate +pomegranate juice +pomegranates +pomelo +popcorn +popovers +popsicle +pork +pork chops +portobello mushrooms +pot +potato +potatoes +preserves +pretzel +protein +prune +pudding +pumpernickel +pumpkin +pumpkin seeds +punch +quiche +quinoa +radicchio +radish +raisins +rapini +raspberries +raspberry +ravioli +reishi mushrooms +relish +rhubarb +ribs +rice +rice bran +rice wine vinegar +risotto +roast +roast beef +roasted almonds +roasted pork +roe +roll +rolled oats +rolling pin +romaine +romaine lettuce +rosemary +rutabagas +rye +saffron +sage +sage tea +salad +salami +salmon +salsa +salt +sandwich +sardines +sauce +sauerkraut +sausage +sausages +savory +scallions +scallops +scrambled +seaweed +seeds +shallots +shellfish +sherbet +shiitake mushrooms +shish kebab +shrimp +slaw +slice +smoked +smoked mackerel +snails +snickers chocolate bar +snow peas +soba noodles +soda +sole +sorbet +sorghum +sorrel +sour cream +soy infant formula +soy milk +soy protein bars +soy protein isolate +soybean curd +soybeans +soysauce +spaghetti +spareribs +spatula +spearmint +spices +spinach +split peas +spoon +spork +sprinkles +sprouts +spuds +squash +squid +steak +stew +stir-fry +stomach +stove +straw +strawberries +strawberry +string bean +string beans +stringy +strudel +succotash +sugar beets +sugar snap peas +summer squash +sundae +supper +sweet peas +sweet potato +sweet potatoes +swiss chard +syrup +tabasco sauce +tahini +take-out +tallow +tamale +tangerine +tangerines +tapioca +taro +tarragon +tart +tartary buckwheat +tea +teriyaki +thyme +toast +toaster +toffee +tofu +tomatillo +tomato paste +torte +tuber +tuna +turkey +turkey bacon +turmeric +turnip +turnip greens +turnips +ugli fruit +vanilla +veal +vegetable +venison +vinegar +vitamins +wafer +waffle +wakame +walnut +walnuts +wasabi +water +water chestnut +watercress +watermelon +well-done meat +wheat +wheat bran +wheat germ +wheat grass +whey +whipped cream +wild ginger +wild rice +wine +winter squash +wok +yam +yams +yeast +yerba maté +yogurt +yolk +zucchini +chikuwa +chips +bugles +doritos +potato chips +pringles +popcorn +pretzel +umaibou +anmitsu +mitsumame +batter +bread +anpan +cinnamon roll +gumball +hot cross bun +melon bread +noppo bread +pastry box +cake +baumkuchen +birthday cake +black forest cake +charlotte cake +cheesecake +rare cheesecake +brownie +chocolate cake +chocolate framboise +christmas cake +cupcake +fondant au chocolat +layer cake +madeleine +mille-feuille +mont blanc +opera cake +pound cake +red velvet cake +cake slice +stollen +strawberry shortcake +swiss roll +strawberry swiss roll +tiramisu +wedding cake +yule log +candy +candy cane +chitose ame +cigarette candy +creme egg +jelly bean +kitkat +konpeitou +lollipop +chupa chups +shaped lollipop +swirl lollipop +m&m's +marble chocolate +nerunerunerune +pinata +tootsweets +candy apple +caramel +chewing gum +chocolate +apollo chocolate +chocolate bar +chocolate cake +chocolate fountain +heart-shaped chocolate +chocolate marquise +chocolate syrup +kinoko no yama +takenoko no sato +white chocolate +churro +cookie +checkerboard cookie +chocolate chip cookie +country ma'am +gingerbread cookie +gingerbread house +gingerbread man +pocky +sandwich cookie +oreo +thumbprint cookie +thumbprint cookie +toppo +wafer +wafer stick +cotton candy +cream +bavarois +icing +crepe +dorayaki +dough +doughnut +chocolate doughnut +french cruller +sakura french +old-fashioned doughnut +gelatin +ice cream +banana split +coolish +ice cream cone +waffle cone +ice cream float +ice cream sandwich +parfait +strawberry parfait +single scoop +double scoop +triple scoop +quadruple scoop +too many scoops +soft serve +sprinkles +sundae +imagawayaki +marshmallow +mooncake +muffin +pastry +chocolate cornet +cream puff +macaron +pie +apple pie +popsicle +popsicle stick +tupet +watermelon bar +pudding +custard +pudding a la mode +shaved ice +slushie +tanghulu +tart +blueberry tart +fruit tart +strawberry tart +wagashi +baozi +momiji manjuu +mochi +dango +ichigo daifuku +kashiwa mochi +namagashi +sakura mochi +songpyeon +suama +taiyaki +uirou +warabimochi +youkan \ No newline at end of file diff --git a/csvfiles/greatworks.csv b/csvfiles/greatworks.csv index a105d4f..09ab353 100644 --- a/csvfiles/greatworks.csv +++ b/csvfiles/greatworks.csv @@ -10,4 +10,6 @@ Venus of Willendorf Bust of Nefertiti Christ Pantocrator The Creation of Adam -The Scream \ No newline at end of file +The Scream +Star Wars +Lord of the Rings \ No newline at end of file diff --git a/csvfiles/lighting.csv b/csvfiles/lighting.csv index a9a3198..886a3a2 100644 --- a/csvfiles/lighting.csv +++ b/csvfiles/lighting.csv @@ -35,4 +35,6 @@ Gel lighting Moonlight Sunlight Accent lighting -Rembrandt lighting \ No newline at end of file +Rembrandt lighting +Candle light +beautifully lit \ No newline at end of file diff --git a/csvfiles/moods.csv b/csvfiles/moods.csv index f73d362..caf3919 100644 --- a/csvfiles/moods.csv +++ b/csvfiles/moods.csv @@ -30,4 +30,7 @@ Light Relaxed Tranquil Regret -Suffering \ No newline at end of file +Suffering +Flustered +Confused +Smug \ No newline at end of file diff --git a/csvfiles/nonfictional characters.csv b/csvfiles/nonfictional characters.csv index 2f6e6a3..9e9090f 100644 --- a/csvfiles/nonfictional characters.csv +++ b/csvfiles/nonfictional characters.csv @@ -34,7 +34,6 @@ Chris Hemsworth Ryan Reynolds Chris Evans Robert Downey Jr. -Samuel L. Jackson Nicolas Cage Keanu Reeves Pierce Brosnan @@ -49,7 +48,6 @@ Hugh Grant Jude Law Matthew McConaughey Liam Neeson -Brad Pitt Joaquin Phoenix Eddie Redmayne Adam Sandler @@ -76,7 +74,6 @@ Jeremy Renner Chris Pine Armie Hammer Ashton Kutcher -Shia LaBeouf Timothy Olyphant Terrence Howard Michael B. Jordan @@ -141,7 +138,6 @@ Maggie Gyllenhaal Rachel Weisz Naomi Watts Liv Tyler -Uma Thurman Michelle Rodriguez Emma Thompson Kirsten Dunst @@ -295,7 +291,6 @@ Dua Lipa Selena Gomez Billie Eilish Janet Jackson -Adele Demi Lovato Sia Kelly Clarkson @@ -382,8 +377,6 @@ Neil Armstrong Mao Zedong Che Guevara Pablo Picasso -Elvis Presley -John Lennon Ronald Reagan Margaret Thatcher Nelson Mandela @@ -394,15 +387,776 @@ Osama bin Laden Steve Jobs Bill Gates Barack Obama -Vladimir Putin -Angela Merkel -Pope Francis Queen Elizabeth II -Kim Jong-un Elon Musk Jeff Bezos Mark Zuckerberg Oprah Winfrey Serena Williams Usain Bolt -Michael Jordan \ No newline at end of file +Michael Jordan +a.j. cook +abbie cornish +adrianne palicki +agam darshi +aimee garcia +aishwariya rai +alanna ubach +alexa penavega +alexandra daddario +alexis bledel +ali cobrin +ali larter +alice braga +alice eve +alice greczyn +alicia silverstone +alicia vikander +alicia witt +alison lohman +alison pill +aly michalka +alyson hannigan +alyssa milano +amanda bynes +amanda peet +amanda seyfried +amber heard +amrita acharia +amy smart +ana de la reguera +andie macdowell +andrea navedo +andrea savage +angela trimbur +anita ekberg +ann-margret +anna chlumsky +anna faris +anna kendrick +antoinette kalaj +april bowlby +april hernandez castillo +ashley greene +ashley judd +ashley olsen +ashley scott +astrid bergès-frisbey +aubrey plaza +ava gardner +berenice marlohe +beverly d'angelo +bianca kajlich +blake lively +bo derek +bree turner +briana evigan +bridget fonda +bridgette wilson-sampras +brigitte bardot +brittany daniel +brittany murphy +brittany snow +brooke burns +brooke d'orsay +brooke shields +brooklyn decker +cameron diaz +cameron richardson +camilla belle +candace cameron bure +carey mulligan +carla gallo +carla gugino +carly craig +carmen electra +casey wilson +chandra west +chloë grace moretz +chloë sevigny +christian serratos +christina applegate +christina ricci +christine lakin +christine taylor +chyler leigh +claire danes +claire forlani +cobie smulders +cody horn +connie nielsen +courteney cox +courtney thorne-smith +dakota fanning +dana davis +dania ramirez +danica mckellar +daniela bobadilla +danielle fishel +danielle harris +danneel ackles +daryl hannah +deborah ann woll +debra messing +demi moore +denise richards +diane kruger +diane lane +dianna agron +drea de matteo +drew barrymore +elena anaya +elisha cuthbert +eliza coupe +eliza dushku +elizabeth banks +elizabeth berkley +elizabeth hurley +elizabeth olsen +ellen wong +ellie kemper +elliot page +emily blunt +emily browning +emily deschanel +emma greenwell +emma roberts +emmanuelle chriqui +emmanuelle vaugier +emmy rossum +esmé bianco +estella warren +eva longoria +eva mendes +evan rachel wood +frankie shaw +freida pinto +gabrielle anwar +gabrielle union +gal gadot +garcelle beauvais +gemma arterton +gemma ward +gene tierney +genesis rodriguez +genevieve padalecki +gina gershon +ginnifer goodwin +goldie hawn +gugu mbatha-raw +gwyneth paltrow +hayden panettiere +heather graham +heather locklear +helena boham carter +helena christensen +helena mattsson +hilary duff +isla fisher +izabella miko +izabella scorupco +jada pinkett smith +jaime king +jaime murray +jaime pressly +jamie chung +jamie-lynn sigler +janina gavankar +january jones +jayne mansfield +jeanne tripplehorn +jenna coleman +jenna elfman +jenna fischer +jennie garth +jennifer carpenter +jennifer connelly +jennifer esposito +jennifer garner +jennifer hudson +jennifer love hewitt +jennifer morrison +jennifer taylor +jenny mccarthy-wahlberg +jeri ryan +jessica alba +jessica biel +jessica lange +jessica szohr +joanne whalley +jodi lyn o'keefe +jordan ladd +jordana brewster +jud tylor +julianna guill +julie benz +julie bowen +julie christie +juliette lewis +k.d. aubert +kaitlin doubleday +kaley cuoco +kat dennings +kate beckinsale +kate bosworth +kate hudson +kate mara +katherine heigl +katherine lanasa +kathryn hahn +katie cassidy +katie holmes +katrina bowden +katy mixon +kelly carlson +kelly hu +kelly stables +keri russell +kerry washington +kim basinger +krista allen +kristen bell +kristen stewart +kristen wiig +kristin chenoweth +kristin davis +kristin kreuk +kristina klebe +kristy swanson +lacey chabert +lake bell +lalaine +lara flynn boyle +lark voorhies +laura wiggins +lauren ambrose +lauren bacall +lauren holly +lauren london +lea michele +leah remini +leighton meester +lena headey +leslie bibb +leslie mann +li gong +lily collins +linda cardellini +lindsay lohan +lisa bonet +lizzy caplan +lucy lawless +lucy liu +lynda carter +lyndsy fonseca +madeleine stowe +madison riley +mae whitman +maggie q +mahaley patel +majandra delfino +malin akerman +maria bello +maria grazia cucinotta +maria thayer +marin hinkle +marisa coughlan +marisa tomei +marley shelton +marsha thomason +mary elizabeth winstead +mary mccormack +mary-kate olsen +mary-louise parker +meg ryan +megan fox +megyn price +melanie lynskey +melissa george +melissa sagemiller +melora hardin +mena suvari +mia wasikowska +michelle borth +michelle burke +michelle monaghan +michelle trachtenberg +michelle williams +milla jovovich +ming-na wen +mini anden +minka kelly +molly ringwald +molly sims +moon bloodgood +natalia tena +natalie dormer +natasha henstridge +nathalie kelley +neve campbell +nicky whelan +nicole ari parker +nicole eggert +nikki reed +nina dobrev +noureen dewulf +odette annable +olga kurylenko +olivia thirlby +olivia wilde +paget brewster +pamela anderson +parker posey +patricia arquette +paula garcés +paula patton +paz vega +penelope cruz +penélope cruz +phoebe cates +piper perabo +qi shu +rachael leigh cook +rachel bilson +rachel nichols +rachel specter +rachel true +raquel welch +rashida jones +rebecca hall +rebecca romijn +regina hall +renée zellweger +rhona mitra +rita hayworth +robin tunney +rochelle aytes +rooney mara +rosario dawson +rose byrne +rose mcgowan +roselyn sanchez +rumer willis +saffron burrows +samantha mathis +sara paxton +sarah chalke +sarah hyland +sarah lancaster +sarah michelle gellar +sarah roemer +sarah shahi +sarah silverman +sasha alexander +scout taylor-compton +selma blair +seychelle gabriel +shailene woodley +shannon elizabeth +shannyn sossamon +shanola hampton +sharon stone +shawnee smith +sheri moon zombie +shu qi +sienna miller +sofia vergara +sofía vergara +sophia loren +sophie winkleman +stacey dash +stella maeve +stephanie fantauzzi +stephanie szostak +susan ward +sydney tamiia poitier +tara reid +teresa palmer +teri polo +thandiwe newton +thora birch +tia carrere +tiffani thiessen +traci bingham +tracie thoms +ursula andress +vanessa angel +vanessa ferlito +vanessa hudgens +vanessa lengies +vanessa williams +vera farmiga +veronica lake +vinessa shaw +vivica a. fox +winona ryder +yvonne de carlo +yvonne strahovski +ziyi zhang +zooey deschanel +zoë bell +zoë kravitz +zulay henao +arnold schwarzenegger +bruce willis +chris pratt +daniel craig +david duchovny +dustin hoffman +dwayne johnson +emile hirsch +erik per sullivan +gerald butler +grant gustin +ian somerhalder +jack nicholson +jackie chan +jason momoa +jimmy fallon +john boyega +john cusack +johnny deep +josh brolin +kevin hart +kit harington +michael douglas +michael j. fox +michael sheen +michael weatherly +mike myers +nathan fillion +nathan lane +paul walker +ray romano +russel crowe +scott speedman +sebastian stan +shah rukh khan +stephen amell +taylor lautner +timothée chalamet +toby kebbell +tom hiddleston +tommy lee jones +tony goldwyn +tyler hoechlin +vince vaughn +Addison Rae +Adèle Exarchopoulos +Aimee Lou Wood +AJ Lee +Alanna Masterson +Alejandra Guilmant +Alex Morgan +Alexa Bliss +Alexis Ren +Alica Schmidt +Alison Brie +Allison Stokke +Allison Williams +Aly Raisman +Alycia Debnam-Carey +Amanda Cerny +Ana de Armas +Angela Kinsey +Angela Sarafyan +Anitta +Anna Akana +Anna Kournikova +Anna Paquin +AnnaSophia Robb +Anya Chalotra +Ariel Winter +Ashley Benson +Ashley Graham +Ashley Park +Ashley Tisdale +Auli’i Cravalho +Avril Lavigne +Awkwafina +Bailee Madison +Bar Refaeli +Barbara Palvin +Bebe Rexha +Becky G +Becky Lynch +Bella Thorne +Beth Behrs +Betty Gilpin +Bonnie Wright +Brenda Song +Brianna Hildebrand +Brie Bella +Brighton Sharbino +Caity Lotz +Camila Cabello +Camila Mendes +Camilla Luddington +Candice Swanepoel +Cardi B +Carice van Houten +Carly Rae Jepsen +Caroline Vreeland +Caylee Cowan +Charisma Carpenter +Charli D’Amelio +Charli XCX +Charlotte Flair +Charlotte McKinney +Chelsea Handler +Chloe Bennet +Chloe Kim +Chrissy Teigen +Christen Harper +Christina Hendricks +CJ Perry +Cristin Milioti +Daisy Edgar-Jones +Daisy Ridley +Dakota Johnson +Danielle Panabaker +Debby Ryan +Demi Rose +Diana Silvers +Diane Guerrero +Diora Baird +Disha Patani +Dixie D’Amelio +Doja Cat +Dominique McElligott +Dove Cameron +Eiza González +Eleanor Tomlinson +Elisabeth Shue +Elizabeth Debicki +Elizabeth Gillies +Elizabeth Turner +Ellie Goulding +Elsa Hosk +Elsa Pataky +Elsie Hewitt +Emily Bett Rickards +Emily Kinney +Emily Osment +Emily Ratajkowski +Emily VanCamp +Emma Kenney +Emma Mackey +Emma Raducanu +Erin Moriarty +Eugenie Bouchard +Eva Amurri +Evangeline Lilly +Felicity Jones +Florence Pugh +Freya Allan +Giada De Laurentiis +Gillian Anderson +Gillian Jacobs +Gina Carano +Hailee Steinfeld +Hailey Bieber +Halsey +Hannah Simone +Hayley Atwell +Helene Fischer +Holly Willoughby +HoYeon Jung +Hunter King +Hunter Schafer +Iggy Azalea +Ilana Glazer +Iliza Shlesinger +Imogen Poots +Ireland Baldwin +Iris Apatow +Isabela Merced +Isidora Goreshter +Jackie Cruz +Jaimie Alexander +Jamie Lee Curtis +Jane Levy +Jenna Dewan +Jennette McCurdy +Jennifer Holland +Jenny Slate +Jessica Parker Kennedy +Jessica Paré +Jessica Simpson +Jewel Staite +Jodie Comer +Joey King +JoJo +Jordyn Huitema +Jordyn Jones +Josephine Skriver +Judy Greer +Julia Fox +Julia Garner +Julianne Hough +Juno Temple +Jutta Leerdam +Kaia Gerber +Kaitlyn Dever +Karen Fukuhara +Karen Gillan +Kate Upton +Katelyn Nacon +Katelyn Ohashi +Katherine Langford +Katherine McNamara +Katherine Waterston +Katheryn Winnick +Kaya Scodelario +Kelly Brook +Kelly Rohrbach +Kesha +Khloé Kardashian +Kiernan Shipka +Kim Kardashian +Kimberley Garner +Kimiko Glenn +Kira Kosarin +Kourtney Kardashian +Krysten Ritter +Kylie Jenner +Kylie Minogue +Lais Ribeiro +Lana Del Rey +Larsen Thompson +Laura Harrier +Laura Prepon +Lauren Cohan +Lea Seydoux +Leelee Sobieski +Leila Lowfire +Lena Gercke +Lena Meyer-Landrut +Lili Reinhart +Lili Simmons +Lily Chee +Lily James +Lily Sheen +Lily-Rose Depp +Lindsey Pelas +Lindsey Vonn +Lisa Kudrow +Lucy Hale +Lucy Pinder +Lupita Nyong’o +Mackenzie Davis +Mackenzie Foy +Mackenzie Ziegler +Maddie Ziegler +Madelaine Petsch +Madison Beer +Madison Pettis +Madisyn Shipman +Maggie Grace +Maia Mitchell +Maisie Williams +Malin Åkerman +Mandy Moore +Margaret Qualley +Maria Bakalova +Maria Menounos +Maria Sharapova +Maryse +María Pedraza +Maude Apatow +Maya Hawke +McKayla Maroney +Meagan Good +Megan Thee Stallion +Meghan Markle +Melissa Benoist +Melissa Fumero +Melissa Rauch +Michelle Jenneke +Miesha Tate +Milana Vayntrub +Millie Bobby Brown +Miranda Cosgrove +Miranda Kerr +Morena Baccarin +Naomi Scott +Natalia Dyer +Natalie Alyn Lind +Natasha Lyonne +Nathalie Emmanuel +Nicki Minaj +Nicole Scherzinger +Nikki Bella +Nikki Glaser +Nina Agdal +Normani +Olivia Culpo +Olivia Munn +Olivia Rodrigo +Olivia Taylor Dudley +Padma Lakshmi +Paige +Paige Spiranac +Paige VanZant +Palina Rojinski +Paris Hilton +Paulina Gaitán +Peyton List +Phoebe Tonkin +Pokimane +Pom Klementieff +Priyanka Chopra +Rachel Brosnahan +Rachel Cook +Rachel Zegler +Rebecca Black +Rebecca Ferguson +Rhea Seehorn +Rita Ora +Ronda Rousey +Ronja Forcher +Rosamund Pike +Rose Leslie +Rose McIver +Rosie Huntington-Whiteley +Ruby O. Fee +Ruby Rose +Sabrina Carpenter +Sadie Sink +Samara Weaving +Sammi Hanratty +Sara Sampaio +Sara Underwood +Sarah McDaniel +Sarah Paulson +Sasha Banks +Saweetie +Shantel VanSanten +Simone Biles +Sophia Lillis +Sophia Thomalla +Sophie Turner +Stacy Keibler +Stephanie Beatriz +Stephanie McMahon +Susan Sarandon +Sydney Sweeney +Taylor Hill +Taylor Schilling +Tessa Thompson +Thomasin McKenzie +Tina Fey +Torrie Wilson +Tove Lo +Ursula Corberó +Vanessa Kirby +Vica Kerekes +Victoria De Angelis +Victoria Justice +Whitney Cummings +Willa Fitzgerald +Willa Holland +Yanet Garcia +Zazie Beetz +Zendaya +Zoey Deutch \ No newline at end of file diff --git a/csvfiles/objects.csv b/csvfiles/objects.csv index a37dff2..991b99c 100644 --- a/csvfiles/objects.csv +++ b/csvfiles/objects.csv @@ -157,56 +157,6 @@ Bar cart Wine rack Sideboard Throne -Apple -Banana -Orange -Pineapple -Mango -Papaya -Watermelon -Kiwi -Grapefruit -Pear -Peach -Cherry -Blueberry -Strawberry -Raspberry -Blackberry -Cranberry -Lemon -Lime -Grape -Cantaloupe -Honeydew -Pomegranate -Fig -Plum -Apricot -Nectarine -Passionfruit -Guava -Starfruit -Dragonfruit -Avocado -Coconut -Lychee -Persimmon -Tangerine -Clementine -Grapefruit -Mango -Jackfruit -Papaya -Blackcurrant -Redcurrant -Gooseberry -Elderberry -Boysenberry -Kiwano -Melon -Rhubarb -Tomato Sword Katana Mace @@ -330,30 +280,6 @@ Chainsaw Fractal Pentagram -conceptsuffix-potion -Pizza -Pasta -Sandwiches -Burgers -Tacos -Wraps -Stir-fry -Fried Rice -Soup -Salad -Roast chicken -Sushi -Fish and chips -Curry -BBQ -Grilled meat -Omelette -Quiche -Fried chicken -Meatloaf -Lasagne -Casserole -Stew -Meatballs Roast beef Oak tree Maple tree @@ -376,8 +302,6 @@ Hydrangeas Irises Marigolds -object- in a bottle -Cup of Coffee -Cup of Tea Faberge egg Quilt Circlet @@ -391,17 +315,6 @@ Supernova Comet Planet Galaxy -Croissant -Danish pastry -Pain au chocolat -Brioche -Puff pastry -Éclair -Baklava -Strudel -Beignet -Scone -Bread Skull Snowflake Seashell @@ -436,6 +349,4 @@ Paraboloid Hyperboloid Mobius strip Klein bottle -Sphericon -Charcuterie -Tortilla \ No newline at end of file +Sphericon \ No newline at end of file diff --git a/csvfiles/vehicles.csv b/csvfiles/vehicles.csv index 172bd1f..f51f4a8 100644 --- a/csvfiles/vehicles.csv +++ b/csvfiles/vehicles.csv @@ -104,4 +104,5 @@ Postal delivery truck Armored vehicle Snow plow Tractor trailer -Utility van \ No newline at end of file +Utility van +Tuk-tuk \ No newline at end of file diff --git a/main.py b/main.py index 101d133..7377269 100644 --- a/main.py +++ b/main.py @@ -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): +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=""): loops = int(amount) # amount of images to generate steps = 0 upscalefilelist=[] @@ -67,7 +67,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) + randomprompt = build_dynamic_prompt(insanitylevel,subject,artist,imagetype, False,antistring,prefixprompt,suffixprompt,promptcompounderlevel, seperator,givensubject,smartsubject,giventypeofimage) # make the filename, from from a to the first comma start_index = randomprompt.find("of a ") + len("of a ") diff --git a/random_functions.py b/random_functions.py index 4d7e00d..f8adf7b 100644 --- a/random_functions.py +++ b/random_functions.py @@ -6,7 +6,7 @@ def normal_dist(insanitylevel): return (random.randint(1, 10)= 10) def uncommon_dist(insanitylevel): - return (random.randint(1, 15)= 10) + return (random.randint(1, 18)= 10) def rare_dist(insanitylevel): roll = (random.randint(1, 30)= 10) diff --git a/scripts/onebuttonprompt.py b/scripts/onebuttonprompt.py index 834f5b2..a31390f 100644 --- a/scripts/onebuttonprompt.py +++ b/scripts/onebuttonprompt.py @@ -53,7 +53,18 @@ redraw_modes = ["Linear","Chess","None"] folder_symbol = '\U0001f4c2' # 📂 sys.path.append(os.path.abspath("..")) +# Load up stuff for personal artists list, if any +# find all artist files starting with personal_artits in userfiles +script_dir = os.path.dirname(os.path.abspath(__file__)) # Script directory +userfilesfolder = os.path.join(script_dir, "../userfiles/" ) +for filename in os.listdir(userfilesfolder): + if(filename.endswith(".csv") and filename.startswith("personal_artists") and filename != "personal_artists_sample.csv"): + name = os.path.splitext(filename)[0] + name = name.replace("_"," ",-1).lower() + # directly insert into the artists list + artists.insert(2, name) + class Script(scripts.Script): @@ -65,12 +76,12 @@ class Script(scripts.Script): def ui(self, is_img2img): - def gen_prompt(insanitylevel, subject, artist, imagetype, antistring, prefixprompt, suffixprompt, promptcompounderlevel, seperator,givensubject,smartsubject): + def gen_prompt(insanitylevel, subject, artist, imagetype, antistring, prefixprompt, suffixprompt, promptcompounderlevel, seperator,givensubject,smartsubject,giventypeofimage): promptlist = [] for i in range(5): - promptlist.append(build_dynamic_prompt(insanitylevel,subject,artist, imagetype, False, antistring,prefixprompt,suffixprompt,promptcompounderlevel,seperator,givensubject,smartsubject)) + promptlist.append(build_dynamic_prompt(insanitylevel,subject,artist, imagetype, False, antistring,prefixprompt,suffixprompt,promptcompounderlevel,seperator,givensubject,smartsubject, giventypeofimage)) return promptlist @@ -96,7 +107,7 @@ class Script(scripts.Script): with gr.Tab("Main"): with gr.Row(): - insanitylevel = gr.Slider(1, 10, value=7, step=1, label="Higher levels increases complexity and randomness of generated prompt") + insanitylevel = gr.Slider(1, 10, value=5, step=1, label="Higher levels increases complexity and randomness of generated prompt") with gr.Row(): with gr.Column(scale=1, variant="compact"): subject = gr.Dropdown( @@ -117,6 +128,8 @@ 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(""" @@ -497,7 +510,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], outputs=[prompt1, prompt2, prompt3,prompt4,prompt5]) + genprom.click(gen_prompt, inputs=[insanitylevel,subject, artist, imagetype, antistring,prefixprompt, suffixprompt,promptcompounderlevel, seperator, givensubject,smartsubject,giventypeofimage], outputs=[prompt1, prompt2, prompt3,prompt4,prompt5]) prompt1toworkflow.click(prompttoworkflowprompt, inputs=prompt1, outputs=workprompt) prompt2toworkflow.click(prompttoworkflowprompt, inputs=prompt2, outputs=workprompt) @@ -505,7 +518,7 @@ 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]) + 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]) automatedoutputsfolderbutton.click(openfolder) @@ -611,12 +624,12 @@ class Script(scripts.Script): - return [insanitylevel,subject, artist, imagetype, prefixprompt,suffixprompt,negativeprompt, promptcompounderlevel, ANDtoggle, silentmode, workprompt, antistring, seperator, givensubject, smartsubject] + return [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): + def run(self, p, insanitylevel, subject, artist, imagetype, prefixprompt,suffixprompt,negativeprompt, promptcompounderlevel, ANDtoggle, silentmode, workprompt, antistring,seperator, givensubject, smartsubject, giventypeofimage): images = [] infotexts = [] @@ -680,7 +693,7 @@ class Script(scripts.Script): 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) + preppedprompt += build_dynamic_prompt(insanitylevel,subject,artist, imagetype, False, antistring, prefixprompt, suffixprompt,promptcompounderlevel, seperator,givensubject,smartsubject,giventypeofimage) # set everything ready p.prompt = preppedprompt diff --git a/user_guides/custom_files.md b/user_guides/custom_files.md new file mode 100644 index 0000000..07188c8 --- /dev/null +++ b/user_guides/custom_files.md @@ -0,0 +1,80 @@ +# Custom files +In the /userfiles/ directory it is possible to include personal additions and overwrites. This is the place to include LoRA's and textual inversions. You can also maintain your own artist lists. + +These are the things that are possible: +- Adding style LoRA's and textual inversions +- Maintaining own personal favorite artists lists +- Adding on to, or replacing One Button Prompt main lists +- Adding custom lists +- filling an antilist, that removes values during prompt generation + +In the /userfiles/ directory, there are already samples placed to help. These are ignored. + +Files created here will not be overwritten during upgrading of One Button Prompt. + +## Adding style LoRA's and textual inversions + +Filename: __styles_ti_lora.csv__ + +Fill this one with style textual inversions and LoRA's. They will then randomly be used in prompt generation and placed at the end of the prompt. +You need to have the appropiate TI or LoRA installed for this to work. + +Example values: +> style-sylvamagic +> +> +> +> + +## Maintaining own personal favorite artists lists +Filename: __personal_artists_xyz.csv__ (replace xyz with the name of your choice) + +Add any number of files formed as personal_artists_xyz.csv. + +These will show up in the artists selection in One Button Prompt. + +For example, you can create a personal_artists_portrait.csv and a personal_artists_favorites.csv. Both will then show up as options. + +Example values: +> Alena Aenami +> +> Victo Ngai +> +> Victor Nizovtsev + +This is how it will then show up in the WebUI: +![image](https://github.com/AIrjen/OneButtonPrompt/assets/130234949/ce100d74-8a0a-4927-8b90-fab9cb8f2e48) + + +## Adding on to, or replacing One Button Prompt main lists +Filename: __listname_addon.csv__ (replace listname with the name of the corresponding csv file in /csvfiles/ directory) + +Filename: __listname_replace.csv__ (replace listname with the name of the corresponding csv file in /csvfiles/ directory) + +Addon files will be automatically added to the existing csv files in the ./csvfiles/ directory. So you can add your own personal stuff. They need to be named the same, such as vehicles_addon.csv + +Replace files will automatically replace the existing csv files in the ./csvfiles/ directory during prompt generation. This way, you can run of your own custom lists if you need. They need to be named the same, such as vehicles_replace.csv + +## Adding custom lists +Filename: __custom_input_prefix.csv__ + +Filename: __custom_input_mid.csv__ + +Filename: __custom_input_suffix.csv__ + +Add anything in these files, and they will show up in the front of the prompt, in the middle, or at the end. This adds some additional flexiblity, if you want more freedom or maybe some certain keywords to show up. They will be randomly used in the prompt generation. + +These are added for flexibility. + +## filling an antilist, that removes values during prompt generation +Filename: __antilist.csv__ + +Any value in this csv file will be removed from any list/csv file used during prompt generation. +For example, if you don't want "film grain" to show up, add this to the antilist.csv + +Example values: +> film grain +> +> purple +> +> cat diff --git a/user_guides/override_subject_and_infinite_variations.md b/user_guides/override_subject_and_infinite_variations.md new file mode 100644 index 0000000..a2bff43 --- /dev/null +++ b/user_guides/override_subject_and_infinite_variations.md @@ -0,0 +1,191 @@ +# Override subject and how to create infinite variations of a set subject +Overriding a subject is one of the most __powerful__ ways of experiencing One Button Prompt. + +This will allow you to explore infinite variants of a subject of your own choice. + +This also creates the option of adding a subject that requires a LoRA. + +There are 2 settings that can be found in the Main tab of One Button Prompt: +### Overwrite Subject +Any text you place in "Subject overwrite" will be treated as the subject to generate. + +It is very helpful to first set the "Subject Type" to the matching subject, as this will guide the prompt generation. For example, set it to humanoid if you are trying to generate people. It will then use the logic used for generating people. + +You can also for example, set something LoRA specific in the subject field, and place the actual LoRA in the prompt suffix field. + +### Smart Subject +Smart Subject is standardly activated, and this will try to interpret your prompt, and turn off any related lists. + +For example, if you set the subject to: "Obese man wearing a kimono", it will see that "obese" is an existing body type, so it won't generate another. + +"wearing" is a keyword that turns off outfit generation. Other keywords such as "hair" and "pose" are also in. + +Basically, leave this on. Especially if you are trying to do something more specific. + + +## Example: Tree of Life +![deliberate tree of life](https://github.com/AIrjen/OneButtonPrompt/assets/130234949/6a49fb69-06f0-4866-92aa-44c44a96ad5e) + +In this example, I used the Deliberate model. +In the settings, I set the following properties: + +Subject Types: __Landscape__ + +Artists: __landscape__ + +type of image: __digital art__ + +Overwrite subject:__Tree of life__ + +What these settings to, is to focus the generation on landscapes, while also only using landscape artists. It will also create only "digital art" of this, instead of random results. + +With the overwrite subject: "Tree of life", it will now only create epic trees for us. Nice. + +Tree of life settings + +## Example: Daenerys Targaryen + +![deliberate examples](https://github.com/AIrjen/OneButtonPrompt/assets/130234949/0c595158-73c0-4001-8af2-1fe00009b90a) + +In this example, I used the Deliberate model. + +In the settings, I set the following properties: + +Subject Types: __humanoid__ + +Artists: __all__ + +type of image: __all__ + +Overwrite subject: __Daenerys Targaryen__ + +These settings give One Button Prompt a lot of freedom, because we set Artists and Type of image both to "All". As a result, we get a wide range of diversity. It also creates less good results because of this, but that is to be expected. It also creates some really imaginitive stuff, especially running on a versatile model such as Deliberate. + +Daenerys Targaryen settings + +## Example: Daenerys Targaryen with LoRA's and a TI + +![dreamshaper and lora examples](https://github.com/AIrjen/OneButtonPrompt/assets/130234949/de914d6c-fe81-41a7-b574-86aad5f488b3) + +In this example, I used the Dreamshaper model, which is less flexbile than deliberate. I am also using 2 LoRA's and a Textual Inversion, to show the possiblities. +These are added in the prompt suffix field. + +In the settings, I set the following properties: + +Subject Types: __humanoid__ + +Artists: __popular__ + +type of image: __all__ + +Overwrite subject: __Daenerys Targaryen__ + +Prompt suffix: __style-sylvamagic, ,__ + +There is a lot less freedom here, also because of the model used. But the variety can still be ssen. You can also see the effects of the LoRA's on the results. + +Daenerys Targaryen settings + +## Using a LoRA as a subject: Gul Dukat +__ATTENTION BAJORAN WORKERS: You can use a LoRA as a subject as well.__ + +![LoRA character example](https://github.com/AIrjen/OneButtonPrompt/assets/130234949/476f84a7-e71e-4ecb-a790-54629ec0e386) +Sometimes you need to add the triggerword as the subject, and the LoRA in the prompt suffix field. Sometimes you need to add both in the overwrite subject field. +In this example, I'm using the main character of star trek's DS9 series, Gul Dukat. Thanks to the amazing [Terok Nor Lora](https://civitai.com/models/58470/terok-nor-lora)! + +In this example, I used the Dreamshaper model. In the settings, I set the following properties: + +Subject Types: __humanoid__ + +Artists: __all__ + +type of image: __all__ + +Overwrite subject: __gul dukat wearing cardassian uniform__ + +Prompt prefix: __sdn__ + +Prompt suffix: __, star trek__ + +With this method, the initial trigger word is in the prompt prefix field, sdn. The subject is "gul dukat wearing cardassian uniform", since smart subject is activated, it will not generate another outfit for our buddy during prompt generation. + +Lastly, in the prompt suffix is the actual LoRA and another trigger word, star trek. + +Gul Dukat + + +### Smart Subject in detail +Smart subject will try to interpret your override subject, and turn off any related lists. +Example, if the word "Obese" in the override subject, it will find this exact word in the "body_types" list. It will disable body type generation. And so it works for all individual words in the override subject, as well as all combined words between comma's. + +Additionaly the following keywords have additional hardcoded keyword triggers: + +"wearing","outfit" or "dressed" will turn off outfit generation + +"bodytype" or "body type" will turn off body type generation + +"hair" will turn of hairstyle generation + +"location" or "background" will turn off background generation + +"lighting" will turn off lighting generation + +"mood" will turn off mood generation + +"pose" or "posing" will turn of pose generation + +"quality" will turn off all quality generation + +"shot" will turn off all framing/shot size generation + +This means, you can form override subject prompts like this: + +"full body shot of a obese donald trump" --> turns off shot sizing and body type generation + +"fantastical skull, candle lighting" --> turns off description (via fantastical) and lighting generation + +"lifeguard, background is beach" --> turns off background generation + +### Wildcards +In the backend of the code, some of the things run on wildcards. These can be used in the prompt prefix, prompt suffix and subject override fields. They get values from their specific related lists. + +Currently, One Button Prompt supports the following wildcards. + +- -color- +- -material- +- -animal- +- -object- +- -fictional- +- -nonfictional- +- -building- +- -vehicle- +- -outfit- +- -location- +- -conceptprefix- +- -conceptsuffix- +- -descriptor- +- -food- + + +## Bringing it all together, generating awesome cyborgs with One Button +![awesome cyborgs](https://github.com/AIrjen/OneButtonPrompt/assets/130234949/9e252a45-2600-44a3-a789-de7a66211e1b) + +In this example, I used the (Lyriel)https://civitai.com/models/22922/lyriel model. In the settings, I set the following properties: + +Subject Types: __humanoid__ + +Artists: __sci-fi__ + +type of image: __portrait__ + +Overwrite subject: __-descriptor- cyberpunk cyborg, -material- details__ + +In this case, I am using the wildcards to my advantage in the override subject. Since I use the word "cyberpunk" the standard description generation is turned off. In this case, I add a random descriptor in my subject override, to get some randomness back. +Next to that, I add -material- details. This way, it will generate some random materials to the results, creating interesting stuff. + +With these settings, all results are good and varied. + +Beep Boop! + +# Thank you +Hope to have inspired you, and get generating! diff --git a/userfiles/add antilist csv file here.txt b/userfiles/add antilist csv file here.txt deleted file mode 100644 index c0f140b..0000000 --- a/userfiles/add antilist csv file here.txt +++ /dev/null @@ -1,11 +0,0 @@ -In this directory, manually add a file called antilist.csv -Any value in this csv file will be removed from any list/csv file used during prompt generation. -For example, if you don't want "film grain" to show up, add this to the antilist.csv -Each word should be on his own row (so don't comma seperate it) -It should look like this: -film grain -purple -cat - - -Happy prompting! \ No newline at end of file diff --git a/userfiles/add own csv files here.txt b/userfiles/add own csv files here.txt new file mode 100644 index 0000000..13b1a38 --- /dev/null +++ b/userfiles/add own csv files here.txt @@ -0,0 +1,33 @@ +In this directory, manually add Files that are used during the generation process. +The sample files here are ignored, but can be used as a copy or base to start with. +Each word should be on his own row (so don't comma seperate it) +Adding files here, will not be overwritten during updating this extension. + +There are 5 types of files that can be manually added here: + +- personal_artists_xyz.csv +Add any number of files formed as personal_artists_xyz.csv. These will show up in the artists selection. +For example, you can create a personal_artists_portrait.csv and a personal_artists_favorites.csv. Both will then show up as options. + +- styles_ti_lora.csv +Fill this one with style textual inversions and LoRA's. They will then randomly be used in prompt generation. See sample file. + +- listname_addon.csv +Addon files will be automatically added to the existing csv files in the ./csvfiles/ directory. So you can add your own personal stuff. They need to be named the same, such as vehicles_addon.csv + +- listname_replace.csv +Replace files will automatically replace the existing csv files in the ./csvfiles/ directory during prompt generation. This way, you can run of your own custom lists if you need. They need to be named the same, such as vehicles_replace.csv + +- custom_input_prefix.csv, custom_input_mid.csv and custom_input_suffix.csv +Add anything in these files, and they will show up in the front of the prompt, in the middle, or at the end. This adds some additional flexiblity, if you want certain specific results. They will be randomly used in the prompt generation. + +- antilist.csv +Any value in this csv file will be removed from any list/csv file used during prompt generation. +For example, if you don't want "film grain" to show up, add this to the antilist.csv +It should look like this: +film grain +purple +cat + + +Happy prompting! \ No newline at end of file diff --git a/userfiles/antilist_sample.csv b/userfiles/antilist_sample.csv new file mode 100644 index 0000000..2a7def8 --- /dev/null +++ b/userfiles/antilist_sample.csv @@ -0,0 +1,3 @@ +film grain +purple +cat \ No newline at end of file diff --git a/userfiles/custom_input_mid_sample.csv b/userfiles/custom_input_mid_sample.csv new file mode 100644 index 0000000..e69de29 diff --git a/userfiles/custom_input_prefix_sample.csv b/userfiles/custom_input_prefix_sample.csv new file mode 100644 index 0000000..e69de29 diff --git a/userfiles/custom_input_suffix_sample.csv b/userfiles/custom_input_suffix_sample.csv new file mode 100644 index 0000000..e69de29 diff --git a/userfiles/personal_artists_sample.csv b/userfiles/personal_artists_sample.csv new file mode 100644 index 0000000..d783cac --- /dev/null +++ b/userfiles/personal_artists_sample.csv @@ -0,0 +1,8 @@ +Alena Aenami +Victo Ngai +Victor Nizovtsev +RHADS +Yoji Shinkawa +Hikari Shimoda +Brandon Woelfel +Eddie Del Rio \ No newline at end of file diff --git a/userfiles/styles_ti_lora_sample.csv b/userfiles/styles_ti_lora_sample.csv new file mode 100644 index 0000000..98329b9 --- /dev/null +++ b/userfiles/styles_ti_lora_sample.csv @@ -0,0 +1,12 @@ +style-sylvamagic +Style-NebMagic +RFKTR_rootrex + + + + +fairytaleai + + +pixelart +ghibli style \ No newline at end of file diff --git a/userfiles/vehicles_addon_sample.csv b/userfiles/vehicles_addon_sample.csv new file mode 100644 index 0000000..12d7b2c --- /dev/null +++ b/userfiles/vehicles_addon_sample.csv @@ -0,0 +1 @@ +fire truck \ No newline at end of file diff --git a/userfiles/vehicles_replace_sample.csv b/userfiles/vehicles_replace_sample.csv new file mode 100644 index 0000000..0d8b396 --- /dev/null +++ b/userfiles/vehicles_replace_sample.csv @@ -0,0 +1,4 @@ +Sports car +Ferrari +Lamborghini +Porsche \ No newline at end of file