@@ -46,33 +46,31 @@ def __init__(self, x, image_cond, sigma, sampling_step, total_sampling_steps):
46
46
47
47
48
48
ScriptCallback = namedtuple ("ScriptCallback" , ["script" , "callback" ])
49
- callbacks_app_started = []
50
- callbacks_model_loaded = []
51
- callbacks_ui_tabs = []
52
- callbacks_ui_settings = []
53
- callbacks_before_image_saved = []
54
- callbacks_image_saved = []
55
- callbacks_cfg_denoiser = []
49
+ callback_map = dict (
50
+ callbacks_app_started = [],
51
+ callbacks_model_loaded = [],
52
+ callbacks_ui_tabs = [],
53
+ callbacks_ui_settings = [],
54
+ callbacks_before_image_saved = [],
55
+ callbacks_image_saved = [],
56
+ callbacks_cfg_denoiser = []
57
+ )
56
58
57
59
58
60
def clear_callbacks ():
59
- callbacks_model_loaded .clear ()
60
- callbacks_ui_tabs .clear ()
61
- callbacks_ui_settings .clear ()
62
- callbacks_before_image_saved .clear ()
63
- callbacks_image_saved .clear ()
64
- callbacks_cfg_denoiser .clear ()
61
+ for callback_list in callback_map .values ():
62
+ callback_list .clear ()
65
63
66
64
def app_started_callback (demo : Optional [Blocks ], app : FastAPI ):
67
- for c in callbacks_app_started :
65
+ for c in callback_map [ ' callbacks_app_started' ] :
68
66
try :
69
67
c .callback (demo , app )
70
68
except Exception :
71
69
report_exception (c , 'app_started_callback' )
72
70
73
71
74
72
def model_loaded_callback (sd_model ):
75
- for c in callbacks_model_loaded :
73
+ for c in callback_map [ ' callbacks_model_loaded' ] :
76
74
try :
77
75
c .callback (sd_model )
78
76
except Exception :
@@ -82,7 +80,7 @@ def model_loaded_callback(sd_model):
82
80
def ui_tabs_callback ():
83
81
res = []
84
82
85
- for c in callbacks_ui_tabs :
83
+ for c in callback_map [ ' callbacks_ui_tabs' ] :
86
84
try :
87
85
res += c .callback () or []
88
86
except Exception :
@@ -92,31 +90,31 @@ def ui_tabs_callback():
92
90
93
91
94
92
def ui_settings_callback ():
95
- for c in callbacks_ui_settings :
93
+ for c in callback_map [ ' callbacks_ui_settings' ] :
96
94
try :
97
95
c .callback ()
98
96
except Exception :
99
97
report_exception (c , 'ui_settings_callback' )
100
98
101
99
102
100
def before_image_saved_callback (params : ImageSaveParams ):
103
- for c in callbacks_before_image_saved :
101
+ for c in callback_map [ ' callbacks_before_image_saved' ] :
104
102
try :
105
103
c .callback (params )
106
104
except Exception :
107
105
report_exception (c , 'before_image_saved_callback' )
108
106
109
107
110
108
def image_saved_callback (params : ImageSaveParams ):
111
- for c in callbacks_image_saved :
109
+ for c in callback_map [ ' callbacks_image_saved' ] :
112
110
try :
113
111
c .callback (params )
114
112
except Exception :
115
113
report_exception (c , 'image_saved_callback' )
116
114
117
115
118
116
def cfg_denoiser_callback (params : CFGDenoiserParams ):
119
- for c in callbacks_cfg_denoiser :
117
+ for c in callback_map [ ' callbacks_cfg_denoiser' ] :
120
118
try :
121
119
c .callback (params )
122
120
except Exception :
@@ -129,17 +127,33 @@ def add_callback(callbacks, fun):
129
127
130
128
callbacks .append (ScriptCallback (filename , fun ))
131
129
130
+
131
+ def remove_current_script_callbacks ():
132
+ stack = [x for x in inspect .stack () if x .filename != __file__ ]
133
+ filename = stack [0 ].filename if len (stack ) > 0 else 'unknown file'
134
+ if filename == 'unknown file' :
135
+ return
136
+ for callback_list in callback_map .values ():
137
+ for callback_to_remove in [cb for cb in callback_list if cb .script == filename ]:
138
+ callback_list .remove (callback_to_remove )
139
+
140
+
141
+ def remove_callbacks_for_function (callback_func ):
142
+ for callback_list in callback_map .values ():
143
+ for callback_to_remove in [cb for cb in callback_list if cb .callback == callback_func ]:
144
+ callback_list .remove (callback_to_remove )
145
+
132
146
133
147
def on_app_started (callback ):
134
148
"""register a function to be called when the webui started, the gradio `Block` component and
135
149
fastapi `FastAPI` object are passed as the arguments"""
136
- add_callback (callbacks_app_started , callback )
150
+ add_callback (callback_map [ ' callbacks_app_started' ] , callback )
137
151
138
152
139
153
def on_model_loaded (callback ):
140
154
"""register a function to be called when the stable diffusion model is created; the model is
141
155
passed as an argument"""
142
- add_callback (callbacks_model_loaded , callback )
156
+ add_callback (callback_map [ ' callbacks_model_loaded' ] , callback )
143
157
144
158
145
159
def on_ui_tabs (callback ):
@@ -152,35 +166,34 @@ def on_ui_tabs(callback):
152
166
title is tab text displayed to user in the UI
153
167
elem_id is HTML id for the tab
154
168
"""
155
- add_callback (callbacks_ui_tabs , callback )
169
+ add_callback (callback_map [ ' callbacks_ui_tabs' ] , callback )
156
170
157
171
158
172
def on_ui_settings (callback ):
159
173
"""register a function to be called before UI settings are populated; add your settings
160
174
by using shared.opts.add_option(shared.OptionInfo(...)) """
161
- add_callback (callbacks_ui_settings , callback )
175
+ add_callback (callback_map [ ' callbacks_ui_settings' ] , callback )
162
176
163
177
164
178
def on_before_image_saved (callback ):
165
179
"""register a function to be called before an image is saved to a file.
166
180
The callback is called with one argument:
167
181
- params: ImageSaveParams - parameters the image is to be saved with. You can change fields in this object.
168
182
"""
169
- add_callback (callbacks_before_image_saved , callback )
183
+ add_callback (callback_map [ ' callbacks_before_image_saved' ] , callback )
170
184
171
185
172
186
def on_image_saved (callback ):
173
187
"""register a function to be called after an image is saved to a file.
174
188
The callback is called with one argument:
175
189
- params: ImageSaveParams - parameters the image was saved with. Changing fields in this object does nothing.
176
190
"""
177
- add_callback (callbacks_image_saved , callback )
191
+ add_callback (callback_map [ ' callbacks_image_saved' ] , callback )
178
192
179
193
180
194
def on_cfg_denoiser (callback ):
181
195
"""register a function to be called in the kdiffussion cfg_denoiser method after building the inner model inputs.
182
196
The callback is called with one argument:
183
197
- params: CFGDenoiserParams - parameters to be passed to the inner model and sampling state details.
184
198
"""
185
- add_callback (callbacks_cfg_denoiser , callback )
186
-
199
+ add_callback (callback_map ['callbacks_cfg_denoiser' ], callback )
0 commit comments