菜单

回调系统

相关源文件

Stable Diffusion Web UI 中的回调系统为扩展提供了钩入应用程序生命周期各个阶段的框架。它允许扩展在响应特定事件时执行自定义代码,例如应用程序启动时、模型加载时、图像生成期间或保存图像时。本页面记录了架构、可用的回调以及如何在扩展中实现它们。有关更广泛的扩展系统的信息,请参阅 扩展系统

回调架构

回调系统围绕一种订阅机制构建,扩展可以通过该机制注册函数,以便在 Web UI 操作的特定点执行。每种回调类型都有专门的注册函数和执行管道。

来源: modules/script_callbacks.py126-153 modules/script_callbacks.py219-243

核心组件

  1. 注册函数:扩展用于注册回调的方法,例如 on_model_loaded()on_ui_tabs()
  2. 回调映射:存储按类别组织的、所有已注册回调的中央注册表(callback_map
  3. 回调执行函数:在特定事件发生时执行已注册回调的函数
  4. 回调参数类:将信息传递给回调的数据结构

来源: modules/script_callbacks.py17-125 modules/script_callbacks.py219-243

回调生命周期

回调注册时

  1. 扩展调用注册函数(例如 on_model_loaded()
  2. 该函数将回调添加到 callback_map 中的相应列表中
  3. 回调将根据其来源扩展和文件被分配一个唯一的名称

事件发生时

  1. 调用相应的回调函数(例如 model_loaded_callback()
  2. 它检索并排序该事件的所有已注册回调
  3. 每个回调按顺序执行,并进行错误处理
  4. 一个回调中的错误不会阻止其他回调执行

来源: 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_tabsUI 正在创建选项卡
on_ui_train_tabsUI 正在创建训练选项卡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() 函数执行,该函数根据以下因素对其进行排序:

  1. 拓扑依赖关系:扩展可以指定其回调应在特定其他回调之前或之后运行
  2. 用户配置:用户可以使用 UI 设置来优先处理某些回调

来源: modules/script_callbacks.py127-208 modules/script_callbacks.py253-431

注册示例

扩展将这样注册一个回调

当模型加载时,该回调将与其他所有已注册的模型加载回调一起被执行。

来源: modules/script_callbacks.py456-613

错误处理

回调系统包含错误处理,以确保一个回调中的失败不会阻止其他回调执行。当回调中发生异常时

  1. 异常将使用 errors.report() 记录
  2. 系统将继续执行剩余的回调
  3. 错误将包含回调的名称及其来源脚本

这使得系统能够容忍单个扩展中的故障。

来源: 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 创建强大的附加功能。