Skip to content

Commit 29d47bc

Browse files
committed
Only execute callbacks if DP is enabled
1 parent ddaca53 commit 29d47bc

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 ScriptProtocol
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(script_protocol: ScriptProtocol) -> None:
2120
def on_save(image_save_params: ImageSaveParams) -> None:
21+
if not script_protocol.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 = script_protocol.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(script_protocol: ScriptProtocol) -> None:
4244
def on_save(image_save_params: ImageSaveParams) -> None:
45+
if not script_protocol.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+
script_protocol.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(script_protocol: ScriptProtocol) -> None:
5156
def on_infotext_pasted(infotext: str, parameters: dict[str, Any]) -> None:
57+
if not script_protocol.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 = script_protocol.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 = script_protocol.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(script_protocol: ScriptProtocol) -> None:
78+
def on_ui_settings_callback():
79+
on_ui_settings(script_protocol)
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(script_protocol: ScriptProtocol) -> None:
85+
initialize_wildcards_tab(script_protocol.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 ScriptProtocol(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 ScriptProtocol
56

67

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

0 commit comments

Comments
 (0)