Skip to content

Commit 6b5016c

Browse files
committed
Disable callbacks when extension is disabled
Ensure that callbacks (apart from settings and wildcards manager), only run when dynamic prompts is enabled. This builds on #648
1 parent ddaca53 commit 6b5016c

3 files changed

Lines changed: 65 additions & 21 deletions

File tree

sd_dynamic_prompts/callbacks.py

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,28 @@
22

33
import logging
44
from pathlib import Path
5-
from typing import Any
5+
from typing import TYPE_CHECKING, 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
1412
from sd_dynamic_prompts.settings import on_ui_settings
1513
from sd_dynamic_prompts.wildcards_tab import initialize as initialize_wildcards_tab
1614

15+
if TYPE_CHECKING:
16+
from sd_dynamic_prompts.sddp_script import SDDPScript
17+
18+
1719
logger = logging.getLogger(__name__)
1820

1921

20-
def register_pnginfo_saver(pnginfo_saver: PngInfoSaver) -> None:
22+
def register_pnginfo_saver(sddp: SDDPScript) -> None:
2123
def on_save(image_save_params: ImageSaveParams) -> None:
24+
if not sddp.is_enabled:
25+
return
26+
2227
try:
2328
if image_save_params.p:
2429
png_info = image_save_params.pnginfo["parameters"]
@@ -27,7 +32,7 @@ def on_save(image_save_params: ImageSaveParams) -> None:
2732
negative_template=image_save_params.p.negative_prompt,
2833
)
2934

30-
updated_png_info = pnginfo_saver.update_pnginfo(
35+
updated_png_info = sddp.pnginfo_saver.update_pnginfo(
3136
png_info,
3237
image_prompts,
3338
)
@@ -38,26 +43,32 @@ def on_save(image_save_params: ImageSaveParams) -> None:
3843
script_callbacks.on_before_image_saved(on_save)
3944

4045

41-
def register_prompt_writer(prompt_writer: PromptWriter) -> None:
46+
def register_prompt_writer(sddp: SDDPScript) -> None:
4247
def on_save(image_save_params: ImageSaveParams) -> None:
48+
if not sddp.is_enabled:
49+
return
50+
4351
image_name = Path(image_save_params.filename)
4452
prompt_filename = image_name.with_suffix(".csv")
45-
prompt_writer.write_prompts(prompt_filename)
53+
sddp.prompt_writer.write_prompts(prompt_filename)
4654

4755
script_callbacks.on_before_image_saved(on_save)
4856

4957

50-
def register_on_infotext_pasted(pnginfo_saver: PngInfoSaver) -> None:
58+
def register_on_infotext_pasted(sddp: SDDPScript) -> None:
5159
def on_infotext_pasted(infotext: str, parameters: dict[str, Any]) -> None:
60+
if not sddp.is_enabled:
61+
return
62+
5263
new_parameters = {}
5364
if "Prompt" in parameters and "Template:" in parameters["Prompt"]:
54-
parameters = pnginfo_saver.strip_template_info(parameters)
65+
parameters = sddp.pnginfo_saver.strip_template_info(parameters)
5566
new_parameters = parse_generation_parameters(parameters["Prompt"])
5667
elif (
5768
"Negative prompt" in parameters
5869
and "Template:" in parameters["Negative prompt"]
5970
):
60-
parameters = pnginfo_saver.strip_template_info(parameters)
71+
parameters = sddp.pnginfo_saver.strip_template_info(parameters)
6172
new_parameters = parse_generation_parameters(parameters["Negative prompt"])
6273
new_parameters["Negative prompt"] = new_parameters["Prompt"]
6374
new_parameters["Prompt"] = parameters["Prompt"]
@@ -66,9 +77,12 @@ def on_infotext_pasted(infotext: str, parameters: dict[str, Any]) -> None:
6677
script_callbacks.on_infotext_pasted(on_infotext_pasted)
6778

6879

69-
def register_settings():
70-
script_callbacks.on_ui_settings(on_ui_settings)
80+
def register_settings(sddp: SDDPScript) -> None:
81+
def on_ui_settings_callback():
82+
on_ui_settings(sddp)
83+
84+
script_callbacks.on_ui_settings(on_ui_settings_callback)
7185

7286

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

sd_dynamic_prompts/dynamic_prompting.py

Lines changed: 28 additions & 5 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}"
@@ -383,6 +400,12 @@ def process(
383400
self._wildcard_manager.sort_wildcards = not opts.dp_wildcard_manager_no_sort
384401
self._wildcard_manager.shuffle_wildcards = opts.dp_wildcard_manager_shuffle
385402

403+
if not is_enabled:
404+
logger.debug("Dynamic prompts disabled - exiting")
405+
return p
406+
407+
ignore_whitespace = opts.dp_ignore_whitespace
408+
386409
magicprompt_batch_size = opts.dp_magicprompt_batch_size
387410

388411
parser_config = ParserConfig(

sd_dynamic_prompts/settings.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
1+
from __future__ import annotations
2+
3+
from typing import TYPE_CHECKING
4+
15
import gradio as gr
26
from modules import shared
37

48
from sd_dynamic_prompts.helpers import load_magicprompt_models
59

10+
if TYPE_CHECKING:
11+
from sd_dynamic_prompts.dynamicprompting import Script as SDDPScript
12+
613

7-
def on_ui_settings():
14+
def on_ui_settings(script_protocol: SDDPScript):
815
section = "dynamicprompts", "Dynamic Prompts"
916
shared.opts.add_option(
1017
key="dp_ignore_whitespace",

0 commit comments

Comments
 (0)