imaginAIry/tests/enhancers/test_prompt_expansion.py

45 lines
1.1 KiB
Python
Raw Normal View History

feature: prompt expansion (#51) You can use `{}` to randomly pull values from lists. A list of values separated by `|` and enclosed in `{ }` will be randomly drawn from in a non-repeating fashion. Values that are surrounded by `_ _` will pull from a phrase list of the same name. Folders containing .txt phraselist files may be specified via `--prompt_library_path`. The option may be specified multiple times. Built-in categories: 3d-term, adj-architecture, adj-beauty, adj-detailed, adj-emotion, adj-general, adj-horror, animal, art-movement, art-site, artist, artist-botanical, artist-surreal, aspect-ratio, bird, body-of-water, body-pose, camera-brand, camera-model, color, cosmic-galaxy, cosmic-nebula, cosmic-star, cosmic-term, dinosaur, eyecolor, f-stop, fantasy-creature, fantasy-setting, fish, flower, focal-length, food, fruit, games, gen-modifier, hair, hd, iso-stop, landscape-type, national-park, nationality, neg-weight, noun-beauty, noun-fantasy, noun-general, noun-horror, occupation, photo-term, pop-culture, pop-location, punk-style, quantity, rpg-item, scenario-desc, skin-color, spaceship, style, tree-species, trippy, world-heritage-site Examples: `imagine "a {red|black} dog" -r 2 --seed 0` will generate both "a red dog" and "a black dog" `imagine "a {_color_} dog" -r 4 --seed 0` will generate four, different colored dogs. The colors will eb pulled from an included phraselist of colors. `imagine "a {_spaceship_|_fruit_|hot air balloon}. low-poly" -r 4 --seed 0` will generate images of spaceships or fruits or a hot air balloon Credit to [noodle-soup-prompts](https://github.com/WASasquatch/noodle-soup-prompts/) where most, but not all, of the wordlists originate.
2022-10-09 01:34:35 +00:00
from imaginairy.enhancers.prompt_expansion import category_list, expand_prompts
def test_prompt_expander_basic():
prompt = "a {red|blue|hot pink} dog"
prompts = list(expand_prompts(prompt, n=3))
# should output each possibility exactly once
expected = ["a blue dog", "a hot pink dog", "a red dog"]
prompts.sort()
expected.sort()
assert prompts == expected
def test_prompt_expander_from_wordlist():
prompt = "a {_color_|golden} dog"
prompts = list(expand_prompts(prompt, n=18))
# should output each possibility exactly once
expected = [
"a aqua dog",
"a black dog",
"a blue dog",
"a fuchsia dog",
"a golden dog",
"a gray dog",
"a green dog",
"a hot pink dog",
"a lime dog",
"a maroon dog",
"a navy dog",
"a olive dog",
"a purple dog",
"a red dog",
"a silver dog",
"a teal dog",
"a white dog",
"a yellow dog",
]
prompts.sort()
expected.sort()
assert prompts == expected
def test_get_phraselist_names():
print(", ".join(category_list()))