Stable Diffusion Web UI 中的回调系统为扩展提供了钩入应用程序生命周期各个阶段的框架。它允许扩展在响应特定事件时执行自定义代码,例如应用程序启动时、模型加载时、图像生成期间或保存图像时。本页面记录了架构、可用的回调以及如何在扩展中实现它们。有关更广泛的扩展系统的信息,请参阅 扩展系统。
回调系统围绕一种订阅机制构建,扩展可以通过该机制注册函数,以便在 Web UI 操作的特定点执行。每种回调类型都有专门的注册函数和执行管道。
来源: modules/script_callbacks.py126-153 modules/script_callbacks.py219-243
on_model_loaded()、on_ui_tabs() 等callback_map)来源: modules/script_callbacks.py17-125 modules/script_callbacks.py219-243
回调注册时
on_model_loaded())callback_map 中的相应列表中事件发生时
model_loaded_callback())来源: modules/script_callbacks.py126-153 modules/script_callbacks.py253-431
下表列出了主要可供扩展使用的主回调
| 回调注册函数 | 触发时 | 传递的参数 |
|---|---|---|
on_app_started | 应用程序启动完成 | Demo (Gradio Blocks)、App (FastAPI) |
on_before_reload | 在服务器重新加载之前 | 无 |
on_model_loaded | 加载了一个 Stable Diffusion 模型 | SD 模型 |
on_ui_tabs | UI 正在创建选项卡 | 无 |
on_ui_train_tabs | UI 正在创建训练选项卡 | UiTrainTabParams |
on_ui_settings | 在 UI 设置被填充之前 | 无 |
on_before_image_saved | 在图像保存之前 | ImageSaveParams |
on_image_saved | 在图像保存之后 | ImageSaveParams |
on_extra_noise | 在 img2img 中添加额外噪声之前 | ExtraNoiseParams |
on_cfg_denoiser | 在 CFG 去噪期间 | CFGDenoiserParams |
on_cfg_denoised | 在 CFG 去噪之后 | CFGDenoisedParams |
on_cfg_after_cfg | 在 CFG 计算之后 | AfterCFGCallbackParams |
on_before_component | 在创建 UI 组件之前 | Component, **kwargs |
on_after_component | 在创建 UI 组件之后 | Component, **kwargs |
on_image_grid | 在创建图像网格之前 | ImageGridLoopParams |
on_infotext_pasted | 在应用 infotext 之前 | Infotext 字符串,解析后的参数 |
on_script_unloaded | 在脚本卸载之前 | 无 |
on_before_ui | 在创建 UI 之前 | 无 |
on_list_optimizers | 在列出交叉注意力优化时 | 要附加到的列表 |
on_list_unets | 在列出替代 UNet 选项时 | 要附加到的列表 |
on_before_token_counter | 在计算提示的 token 时 | BeforeTokenCounterParams |
来源: modules/script_callbacks.py456-613
回调接收的参数类根据其类型而有所不同。以下是主要的参数类
来源: modules/script_callbacks.py18-117
回调系统在图像生成过程中尤为重要,它提供了去噪过程的多个钩子。下图展示了回调如何与 CFG 去噪过程集成
来源: modules/sd_samplers_cfg_denoiser.py156-311 modules/script_callbacks.py330-351
回调通过 ordered_callbacks() 函数执行,该函数根据以下因素对其进行排序:
来源: modules/script_callbacks.py127-208 modules/script_callbacks.py253-431
扩展将这样注册一个回调
当模型加载时,该回调将与其他所有已注册的模型加载回调一起被执行。
来源: modules/script_callbacks.py456-613
回调系统包含错误处理,以确保一个回调中的失败不会阻止其他回调执行。当回调中发生异常时
errors.report() 记录这使得系统能够容忍单个扩展中的故障。
来源: modules/script_callbacks.py14-15
回调也可以被移除
remove_current_script_callbacks():移除当前脚本的所有回调remove_callbacks_for_function():移除特定函数的所有回调这对于脚本重新加载或卸载时的清理很有用。
来源: modules/script_callbacks.py434-453
CFG 去噪器在去噪过程中调用三个回调,允许扩展修改输入、输出和中间结果。
来源: modules/sd_samplers_cfg_denoiser.py211-308
img2img 过程在应用额外噪声时会调用 extra_noise_callback
来源: modules/sd_samplers_timesteps.py110-115
回调系统是扩展 Stable Diffusion Web UI 功能的强大机制。它提供了许多集成点,允许扩展在不修改核心代码的情况下修改应用程序的行为。通过了解可用的回调及其参数,扩展开发人员可以为 Web UI 创建强大的附加功能。