diff options
author | 不会画画的中医不是好程序员 <yfszzx@gmail.com> | 2022-10-25 07:38:33 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-25 07:38:33 +0000 |
commit | 5bfa2b23ca6dad7d2664bfab5dab4b1dfabf5b7f (patch) | |
tree | 7e23ff3f180ada71bc0824270efa82e7cfe68397 /modules/script_callbacks.py | |
parent | ff305acd51cc71c5eea8aee0f537a26a6d1ba2a1 (diff) | |
parent | 91c1e1e6a92061b99c92a5b1d548535907d2ad96 (diff) | |
download | stable-diffusion-webui-gfx803-5bfa2b23ca6dad7d2664bfab5dab4b1dfabf5b7f.tar.gz stable-diffusion-webui-gfx803-5bfa2b23ca6dad7d2664bfab5dab4b1dfabf5b7f.tar.bz2 stable-diffusion-webui-gfx803-5bfa2b23ca6dad7d2664bfab5dab4b1dfabf5b7f.zip |
Merge branch 'AUTOMATIC1111:master' into Inspiron
Diffstat (limited to 'modules/script_callbacks.py')
-rw-r--r-- | modules/script_callbacks.py | 55 |
1 files changed, 46 insertions, 9 deletions
diff --git a/modules/script_callbacks.py b/modules/script_callbacks.py index f46d3d9a..9933fa38 100644 --- a/modules/script_callbacks.py +++ b/modules/script_callbacks.py @@ -1,37 +1,69 @@ +import sys
+import traceback
+from collections import namedtuple
+import inspect
+
+def report_exception(c, job):
+ print(f"Error executing callback {job} for {c.script}", file=sys.stderr)
+ print(traceback.format_exc(), file=sys.stderr)
+
+
+ScriptCallback = namedtuple("ScriptCallback", ["script", "callback"])
callbacks_model_loaded = []
callbacks_ui_tabs = []
callbacks_ui_settings = []
-
+callbacks_image_saved = []
def clear_callbacks():
callbacks_model_loaded.clear()
callbacks_ui_tabs.clear()
+ callbacks_image_saved.clear()
def model_loaded_callback(sd_model):
- for callback in callbacks_model_loaded:
- callback(sd_model)
+ for c in callbacks_model_loaded:
+ try:
+ c.callback(sd_model)
+ except Exception:
+ report_exception(c, 'model_loaded_callback')
def ui_tabs_callback():
res = []
- for callback in callbacks_ui_tabs:
- res += callback() or []
+ for c in callbacks_ui_tabs:
+ try:
+ res += c.callback() or []
+ except Exception:
+ report_exception(c, 'ui_tabs_callback')
return res
def ui_settings_callback():
- for callback in callbacks_ui_settings:
- callback()
+ for c in callbacks_ui_settings:
+ try:
+ c.callback()
+ except Exception:
+ report_exception(c, 'ui_settings_callback')
+
+def add_callback(callbacks, fun):
+ stack = [x for x in inspect.stack() if x.filename != __file__]
+ filename = stack[0].filename if len(stack) > 0 else 'unknown file'
+
+ callbacks.append(ScriptCallback(filename, fun))
+
+
+def image_saved_callback(image, p, fullfn, txt_fullfn):
+ for callback in callbacks_image_saved:
+ callback(image, p, fullfn, txt_fullfn)
def on_model_loaded(callback):
"""register a function to be called when the stable diffusion model is created; the model is
passed as an argument"""
- callbacks_model_loaded.append(callback)
+ add_callback(callbacks_model_loaded, callback)
def on_ui_tabs(callback):
@@ -44,10 +76,15 @@ def on_ui_tabs(callback): title is tab text displayed to user in the UI
elem_id is HTML id for the tab
"""
- callbacks_ui_tabs.append(callback)
+ add_callback(callbacks_ui_tabs, callback)
def on_ui_settings(callback):
"""register a function to be called before UI settings are populated; add your settings
by using shared.opts.add_option(shared.OptionInfo(...)) """
callbacks_ui_settings.append(callback)
+
+
+def on_save_imaged(callback):
+ """register a function to call after modules.images.save_image is called returning same values, original image and p """
+ callbacks_image_saved.append(callback)
|