Skip to content

Commit 5ef7740

Browse files
committed
Only execute callbacks if DP is enabled
Ensure that callbacks (apart from settings and wildcards manager), only run when dynamic prompts is enabled. This builds on #648
1 parent ddaca53 commit 5ef7740

4 files changed

Lines changed: 74 additions & 26 deletions

File tree

sd_dynamic_prompts/callbacks.py

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,23 @@
44
from pathlib import Path
55
from typing import Any
66

7-
from dynamicprompts.wildcards import WildcardManager
87
from modules import script_callbacks
98
from modules.generation_parameters_copypaste import parse_generation_parameters
109
from modules.script_callbacks import ImageSaveParams
1110

12-
from sd_dynamic_prompts.pnginfo_saver import PngInfoSaver, PromptTemplates
13-
from sd_dynamic_prompts.prompt_writer import PromptWriter
11+
from sd_dynamic_prompts.pnginfo_saver import PromptTemplates
12+
from sd_dynamic_prompts.script_protocol import SDDPScript
1413
from sd_dynamic_prompts.settings import on_ui_settings
1514
from sd_dynamic_prompts.wildcards_tab import initialize as initialize_wildcards_tab
1615

1716
logger = logging.getLogger(__name__)
1817

1918

20-
def register_pnginfo_saver(pnginfo_saver: PngInfoSaver) -> None:
19+
def register_pnginfo_saver(sddp: SDDPScript) -> None:
2120
def on_save(image_save_params: ImageSaveParams) -> None:
21+
if not sddp.is_enabled:
22+
return
23+
2224
try:
2325
if image_save_params.p:
2426
png_info = image_save_params.pnginfo["parameters"]
@@ -27,7 +29,7 @@ def on_save(image_save_params: ImageSaveParams) -> None:
2729
negative_template=image_save_params.p.negative_prompt,
2830
)
2931

30-
updated_png_info = pnginfo_saver.update_pnginfo(
32+
updated_png_info = sddp.pnginfo_saver.update_pnginfo(
3133
png_info,
3234
image_prompts,
3335
)
@@ -38,26 +40,32 @@ def on_save(image_save_params: ImageSaveParams) -> None:
3840
script_callbacks.on_before_image_saved(on_save)
3941

4042

41-
def register_prompt_writer(prompt_writer: PromptWriter) -> None:
43+
def register_prompt_writer(sddp: SDDPScript) -> None:
4244
def on_save(image_save_params: ImageSaveParams) -> None:
45+
if not sddp.is_enabled:
46+
return
47+
4348
image_name = Path(image_save_params.filename)
4449
prompt_filename = image_name.with_suffix(".csv")
45-
prompt_writer.write_prompts(prompt_filename)
50+
sddp.prompt_writer.write_prompts(prompt_filename)
4651

4752
script_callbacks.on_before_image_saved(on_save)
4853

4954

50-
def register_on_infotext_pasted(pnginfo_saver: PngInfoSaver) -> None:
55+
def register_on_infotext_pasted(sddp: SDDPScript) -> None:
5156
def on_infotext_pasted(infotext: str, parameters: dict[str, Any]) -> None:
57+
if not sddp.is_enabled:
58+
return
59+
5260
new_parameters = {}
5361
if "Prompt" in parameters and "Template:" in parameters["Prompt"]:
54-
parameters = pnginfo_saver.strip_template_info(parameters)
62+
parameters = sddp.pnginfo_saver.strip_template_info(parameters)
5563
new_parameters = parse_generation_parameters(parameters["Prompt"])
5664
elif (
5765
"Negative prompt" in parameters
5866
and "Template:" in parameters["Negative prompt"]
5967
):
60-
parameters = pnginfo_saver.strip_template_info(parameters)
68+
parameters = sddp.pnginfo_saver.strip_template_info(parameters)
6169
new_parameters = parse_generation_parameters(parameters["Negative prompt"])
6270
new_parameters["Negative prompt"] = new_parameters["Prompt"]
6371
new_parameters["Prompt"] = parameters["Prompt"]
@@ -66,9 +74,12 @@ def on_infotext_pasted(infotext: str, parameters: dict[str, Any]) -> None:
6674
script_callbacks.on_infotext_pasted(on_infotext_pasted)
6775

6876

69-
def register_settings():
70-
script_callbacks.on_ui_settings(on_ui_settings)
77+
def register_settings(sddp: SDDPScript) -> None:
78+
def on_ui_settings_callback():
79+
on_ui_settings(sddp)
80+
81+
script_callbacks.on_ui_settings(on_ui_settings_callback)
7182

7283

73-
def register_wildcards_tab(wildcard_manager: WildcardManager):
74-
initialize_wildcards_tab(wildcard_manager)
84+
def register_wildcards_tab(sddp: SDDPScript) -> None:
85+
initialize_wildcards_tab(sddp.wildcard_manager)

sd_dynamic_prompts/dynamic_prompting.py

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -99,15 +99,32 @@ def __init__(self):
9999
self._pnginfo_saver = PngInfoSaver()
100100
self._prompt_writer = PromptWriter()
101101
self._wildcard_manager = WildcardManager(get_wildcard_dir())
102+
self._is_enabled = False
102103

103104
if loaded_count % 2 == 0:
104105
return
105106

106-
callbacks.register_pnginfo_saver(self._pnginfo_saver)
107-
callbacks.register_prompt_writer(self._prompt_writer)
108-
callbacks.register_on_infotext_pasted(self._pnginfo_saver)
109-
callbacks.register_settings()
110-
callbacks.register_wildcards_tab(self._wildcard_manager)
107+
callbacks.register_pnginfo_saver(self)
108+
callbacks.register_prompt_writer(self)
109+
callbacks.register_on_infotext_pasted(self)
110+
callbacks.register_settings(self)
111+
callbacks.register_wildcards_tab(self)
112+
113+
@property
114+
def is_enabled(self):
115+
return self._is_enabled
116+
117+
@property
118+
def pnginfo_saver(self):
119+
return self._pnginfo_saver
120+
121+
@property
122+
def prompt_writer(self):
123+
return self._prompt_writer
124+
125+
@property
126+
def wildcard_manager(self):
127+
return self._wildcard_manager
111128

112129
def title(self):
113130
return f"Dynamic Prompts v{VERSION}"
@@ -368,21 +385,21 @@ def process(
368385
magic_model: str | None,
369386
magic_blocklist_regex: str | None,
370387
):
388+
self._is_enabled = is_enabled
371389
self._pnginfo_saver.enabled = opts.dp_write_raw_template
372390
self._prompt_writer.enabled = opts.dp_write_prompts_to_file
391+
self._limit_jinja_prompts = opts.dp_limit_jinja_prompts
392+
self._auto_purge_cache = opts.dp_auto_purge_cache
393+
self._wildcard_manager.dedup_wildcards = not opts.dp_wildcard_manager_no_dedupe
394+
self._wildcard_manager.sort_wildcards = not opts.dp_wildcard_manager_no_sort
395+
self._wildcard_manager.shuffle_wildcards = opts.dp_wildcard_manager_shuffle
373396

374397
if not is_enabled:
375398
logger.debug("Dynamic prompts disabled - exiting")
376399
return p
377400

378401
ignore_whitespace = opts.dp_ignore_whitespace
379402

380-
self._limit_jinja_prompts = opts.dp_limit_jinja_prompts
381-
self._auto_purge_cache = opts.dp_auto_purge_cache
382-
self._wildcard_manager.dedup_wildcards = not opts.dp_wildcard_manager_no_dedupe
383-
self._wildcard_manager.sort_wildcards = not opts.dp_wildcard_manager_no_sort
384-
self._wildcard_manager.shuffle_wildcards = opts.dp_wildcard_manager_shuffle
385-
386403
magicprompt_batch_size = opts.dp_magicprompt_batch_size
387404

388405
parser_config = ParserConfig(
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from typing import Protocol
2+
3+
4+
class SDDPScript(Protocol):
5+
@property
6+
def is_enabled(self):
7+
...
8+
9+
@property
10+
def pnginfo_saver(self):
11+
...
12+
13+
@property
14+
def prompt_writer(self):
15+
...
16+
17+
@property
18+
def wildcard_manager(self):
19+
...

sd_dynamic_prompts/settings.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
from modules import shared
33

44
from sd_dynamic_prompts.helpers import load_magicprompt_models
5+
from sd_dynamic_prompts.script_protocol import SDDPScript
56

67

7-
def on_ui_settings():
8+
def on_ui_settings(script_protocol: SDDPScript):
89
section = "dynamicprompts", "Dynamic Prompts"
910
shared.opts.add_option(
1011
key="dp_ignore_whitespace",

0 commit comments

Comments
 (0)