-
Notifications
You must be signed in to change notification settings - Fork 302
Expand file tree
/
Copy pathhelpers.py
More file actions
123 lines (96 loc) · 3.56 KB
/
Copy pathhelpers.py
File metadata and controls
123 lines (96 loc) · 3.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
from __future__ import annotations
import logging
import random
from pathlib import Path
from dynamicprompts.generators.promptgenerator import PromptGenerator
logger = logging.getLogger(__name__)
def get_fixed_seed(seed):
# Copied from auto1111 modules/processing.py
if seed is None or seed == "" or seed == -1:
return int(random.randrange(4294967294))
return seed
def get_seeds(
p,
num_seeds,
use_fixed_seed,
is_combinatorial=False,
combinatorial_batches=1,
unlink_seed_from_prompt=False,
):
if p.subseed_strength != 0:
seed = int(p.all_seeds[0])
subseed = int(p.all_subseeds[0])
else:
seed = int(p.seed)
subseed = int(p.subseed)
if use_fixed_seed:
if is_combinatorial:
image_seeds = []
image_subseeds = [subseed] * num_seeds
for i in range(combinatorial_batches):
image_seeds.extend([seed + i] * (num_seeds // combinatorial_batches))
else:
image_seeds = [seed] * num_seeds
image_subseeds = [subseed] * num_seeds
else:
if p.subseed_strength == 0:
image_seeds = [seed + i for i in range(num_seeds)]
else:
image_seeds = [seed] * num_seeds
image_subseeds = [subseed + i for i in range(num_seeds)]
if unlink_seed_from_prompt:
prompt_seeds = [get_fixed_seed(None) for _ in range(num_seeds)]
else:
prompt_seeds = image_seeds
return image_seeds, image_subseeds, prompt_seeds
def should_freeze_prompt(p):
# When using a variation seed, the prompt shouldn't change between generations
return p.subseed_strength > 0
def load_magicprompt_models(modelfile: str) -> list[str]:
try:
models = []
with open(modelfile) as f:
for line in f:
# ignore comments and empty lines
line = line.split("#")[0].strip()
if line:
models.append(line)
return models
except FileNotFoundError:
logger.warning(f"Could not find magicprompts config file at {modelfile}")
return []
def get_magicmodels_path(base_dir: str) -> str:
magicprompt_models_path = Path(base_dir / "config" / "magicprompt_models.txt")
return magicprompt_models_path
def generate_prompts(
prompt_generator: PromptGenerator,
negative_prompt_generator: PromptGenerator,
prompt: str,
negative_prompt: str | None,
num_prompts: int,
seeds: list[int],
) -> tuple[list[str], list[str]]:
"""
Generate positive and negative prompts.
Parameters:
- prompt_generator: Object that generates positive prompts.
- negative_prompt_generator: Object that generates negative prompts.
- prompt: Base text for positive prompts.
- negative_prompt: Base text for negative prompts.
- num_prompts: Number of prompts to generate.
- seeds: List of seeds for prompt generation.
Returns:
- Tuple containing list of positive and negative prompts.
"""
all_prompts = prompt_generator.generate(prompt, num_prompts, seeds=seeds) or [""]
negative_seeds = seeds if negative_prompt else None
all_negative_prompts = negative_prompt_generator.generate(
negative_prompt,
num_prompts,
seeds=negative_seeds,
) or [""]
if len(all_negative_prompts) < len(all_prompts):
factor = len(all_prompts) // len(all_negative_prompts) + 1
all_negative_prompts = all_negative_prompts * factor
all_negative_prompts = all_negative_prompts[: len(all_prompts)]
return all_prompts, all_negative_prompts