imaginAIry/tests/enhancers/test_prompt_expansion.py
Bryce Drennan 31c2160e21
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-08 18:34:35 -07:00

45 lines
1.1 KiB
Python

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()))