彻底解决 Stable Diffusion WebUI 启动报错:AttributeError: ‘MessageFactory’ object has no attribute ‘GetProto

彻底解决 Stable Diffusion WebUI 启动报错:AttributeError: ‘MessageFactory’ object has no attribute ‘GetProto

彻底解决 Stable Diffusion WebUI 启动报错:AttributeError: ‘MessageFactory’ object has no attribute ‘GetPrototype’

Stable Diffusion web UI
sd-webui-roop
【技术分享】ComfyUI中protobuf版本兼容性问题的优雅解决方案:猴子补丁实战
告别环境崩溃:ONNX 与 Protobuf 版本兼容性指南


一、问题背景

最近在使用 Stable Diffusion WebUI(v1.10.1)时,安装了 sd-webui-roop 插件后,启动时出现了一个非常典型的 Protobuf 版本冲突错误:

AttributeError: 'MessageFactory' object has no attribute 'GetPrototype' 

这个错误通常意味着:

  • Protobuf 被自动升级到了 4.x / 5.x / 6.x 系列版本
  • 而 ControlNet、roop 等插件依赖的是 Protobuf 3.x 的旧 API
  • 新版本 Protobuf 移除了 GetPrototype 方法,导致兼容性崩溃

这个问题非常常见,尤其是在 2025–2026 年期间,很多插件的依赖约束不严格,会让 pip 自动把 Protobuf 升级到最新版。而且几乎每次重新启动都会出现 Protobuf 的升降级安装操作,严重拖慢启动时间。



二、问题原因深度分析

通过日志分析和依赖回溯,我发现问题由以下几个因素共同导致:

1. sd-webui-roop 的 requirements.txt 没有限制 Protobuf 版本

原始内容如下:

insightface==0.7.3 onnx==1.14.0 onnxruntime==1.15.0 opencv-python==4.7.0.72 ifnude cython 

注意:
这里没有任何关于 protobuf 的版本约束。

在这里插入图片描述

2. onnx==1.14.0 的内置依赖要求 protobuf>=3.20.2

但它没有设置上限,于是 pip 会认为:

protobuf >= 3.20.2 → 可以安装最新版(如 6.33.4) 

于是 Protobuf 被自动升级到不兼容版本。


3. ControlNet 等插件依赖 Protobuf 3.x 的旧 API

Protobuf 4.x+ 对 Python API 做了大量不兼容修改,其中就包括:

MessageFactory.GetPrototype() → 被移除 

于是出现启动报错。



三、环境信息(可复现)

为了让大家能够 100% 复刻修复过程,我把环境也公开出来:

  • Windows 11 专业工作站版 26H1(28020.1371)
  • Python 3.11.13(基于 EPGF 架构,非 CPython/Anaconda)
  • 虚拟环境:.venv
  • CMake 4.2.1
  • pip 25.3
  • WebUI:v1.10.1(最终稳定版)
  • 插件:
    • sd-webui-roop(最新版)
    • sd-webui-controlnet v1.1.455


四、完整修复方案(可直接操作)

下面是经过验证的完整修复步骤。

步骤 1:修改 3 个关键文件,统一锁定 protobuf==3.20.2

这个版本是“黄金兼容版本”:

  • 满足 onnx==1.14.0 的最低要求(>=3.20.2)
  • 属于 3.x 系列,保留旧 API
  • 不会触发编译问题

需要修改的文件如下:

1)stable-diffusion-webui/requirements.txt

添加或修改:

protobuf==3.20.2 
2)stable-diffusion-webui/requirements_versions.txt

添加或修改:

protobuf==3.20.2 
3)extensions/sd-webui-roop/requirements.txt

在末尾添加:

protobuf==3.20.2 

修改后完整内容如下:

insightface==0.7.3 onnx==1.14.0 onnxruntime==1.15.0 opencv-python==4.7.0.72 ifnude cython protobuf==3.20.2 

步骤 2:保持 webui-user.bat 网络配置正确(避免下载失败)

以下是我使用的稳定配置:

【SD WebUI踩坑】启动报错 Expecting value: line 1 column 1 (char 0) 的终极解决方案
@echo off set HTTP_PROXY=http://127.0.0.1:7897 set HTTPS_PROXY=http://127.0.0.1:7897 set NO_PROXY=127.0.0.1,localhost set HF_ENDPOINT=https://hf-mirror.com set PYTHON=.venv\Scripts\python.exe set GIT= set VENV_DIR=.venv set COMMANDLINE_ARGS=--xformers --gradio-queue --disable-nan-check call webui.bat 
在这里插入图片描述

重点:

  • 必须设置 NO_PROXY,否则容易出现 Expecting value 报错
  • HF_ENDPOINT 加速模型下载

步骤 3:重新启动 WebUI

不需要手动 pip install,WebUI 会自动处理依赖。

启动成功的标志:

  • GetPrototype 报错
  • 无 onnx 编译错误
  • 所有插件正常加载
  • 可以正常生成图片


五、修复成功验证

启动日志应显示:

Requirement already satisfied: protobuf==3.20.2 

同时出现:

roop - INFO - roop v0.0.2 ControlNet - INFO - ControlNet v1.1.455 

并且可以正常生成图片,进度条 100% 完成。

在这里插入图片描述


六、经验总结(非常重要)

1. Protobuf 3.20.2 是 WebUI 的“最佳兼容版本”

它同时满足:

  • onnx>=1.13.0 的最低要求
  • ControlNet/roop 的旧 API 要求
  • 不会触发编译失败

2. 必须同时修改 3 个文件

否则会被插件的 requirements.txt 覆盖,导致版本再次被升级。


3. 不要随意升级 Protobuf

Protobuf 4.x+ 对 WebUI 生态几乎完全不兼容。


4. 网络配置非常关键

错误的代理设置会导致依赖安装失败,从而触发各种奇怪的报错。


5. 应用猴子补丁

如果你愿意折腾,可以尝试我们实践过的“猴子补丁”办法,专门针对 在不降级 Protobuf 版本的情况下,解决 Protobuf 的兼容性问题。

【技术分享】ComfyUI中protobuf版本兼容性问题的优雅解决方案:猴子补丁实战


七、结语

通过统一锁定 Protobuf 版本,我们成功解决了 WebUI 启动报错问题,同时保证了 roop、ControlNet 等插件的正常运行。

如果你也遇到了类似问题,直接按照本文步骤操作即可实现修复。


Read more

一、FPGA到底是什么???(一篇文章让你明明白白)

一句话概括 FPGA(现场可编程门阵列) 是一块可以通过编程来“变成”特定功能数字电路的芯片。它不像CPU或GPU那样有固定的硬件结构,而是可以根据你的需求,被配置成处理器、通信接口、控制器,甚至是整个片上系统。 一个生动的比喻:乐高积木 vs. 成品玩具 * CPU(中央处理器):就像一个工厂里生产好的玩具机器人。它的功能是固定的,你只能通过软件(比如按不同的按钮)来指挥它做预设好的动作(走路、跳舞),但你无法改变它的机械结构。 * ASIC(专用集成电路):就像一个为某个特定任务(比如只会翻跟头)而专门设计和铸造的金属模型。性能极好,成本低(量产时),但一旦制造出来,功能就永远无法改变。 * FPGA:就像一盒万能乐高积木。它提供了大量基本的逻辑单元(逻辑门、触发器)、连线和接口模块。你可以通过“编程”(相当于按照图纸搭建乐高)将这些基本模块连接起来,构建出你想要的任何数字系统——可以今天搭成一个CPU,明天拆了重新搭成一个音乐播放器。 “现场可编程”

Stable Yogi Leather-Dress-Collection实操手册:生成历史保存与本地图片批量导出

Stable Yogi Leather-Dress-Collection实操手册:生成历史保存与本地图片批量导出 1. 工具概述 Stable Yogi Leather-Dress-Collection是一款基于Stable Diffusion v1.5和Anything V5动漫底座模型开发的2.5D皮衣穿搭生成工具。它通过动态加载不同皮衣款式LoRA权重、智能提取服装关键词生成提示词,并深度优化显存占用,为用户提供高效的动漫风格皮衣穿搭生成体验。 1.1 核心特性 * 动态LoRA管理:自动扫描并加载指定目录下的皮衣LoRA文件 * 智能提示词生成:从LoRA文件名中提取服装关键词并嵌入默认提示词 * 显存优化:采用多种技术手段降低显存占用,适配低配显卡 * 本地运行:无需网络依赖,所有操作均在本地完成 2. 准备工作 2.1 环境要求 * 硬件配置: * 显卡:NVIDIA显卡,显存≥4GB(推荐8GB以上) * 内存:≥16GB * 存储:≥20GB可用空间 * 软件依赖: * Python 3.8+

(6-4-02)IMU融合与机体状态估计:综合实战:腿式机器人的IMU关节融合与状态估计(2)

(6-4-02)IMU融合与机体状态估计:综合实战:腿式机器人的IMU关节融合与状态估计(2)

6.4.3  状态估计 “src”目录包含本项目状态估计的核心算法实现和工具模块,涵盖惯性导航与人形机器人运动状态估计的完整流程,包括EKF状态预测与更新、IMU数据补偿与积分、机器人足端运动学计算、静态初始对准、导航结果与误差输出、数据流生成及可视化工具,整体提供从原始传感器数据到导航状态估计和分析的全链路功能,实现机器人高精度运动导航和状态监控。 1. IMU数据的传播与补偿 文件src/imuPropagation.py的功能是提供IMU数据的传播与补偿机制,用于惯性导航系统(INS)中状态更新。INSMech 类实现了基于前一时刻和当前IMU测量的速度、位置和姿态传播,同时对IMU角速度和加速度进行偏差与缩放误差补偿。_wrap_yaw_inplace用于将偏航角限制在 -π,π 范围内。 import numpy as np from scipy.spatial.transform import Rotation as R def _wrap_yaw_inplace(euler_

ubuntu上安装OpenClaw并接入飞书机器人

ubuntu上安装OpenClaw并接入飞书机器人

大家好,我是一根甜苦瓜。今天来分享如何在本地安装openclaw并接入飞书,实现让AI给我打工。 最近AI圈更新太快了,从github copilot到cursor 到claud code ,再到codex,然后是最近火爆了的小龙虾(OpenClaw),可谓是百花齐放,应接不暇。本人也是github copilot+codex的深度用户,确实不错,所以最近打算折腾一下小龙虾,顺带教大家如何把智谱GLM 接入OpenClaw。 1. 前言 1.1 什么是openclaw 2026 年开年,AI 圈突然冒出一匹“野生黑马”——OpenClaw。这个开源个人 AI 助手项目在 GitHub 上只用了 两周时间就狂揽 15 万 Star,速度堪比开挂。 简单说,它就像给你配了一个 24 小时不下班的数字打工人: 把它部署在自己的电脑或服务器上,它就能接入 WhatsApp、Telegram、