修复 ComfyUI 插件 ComfyUI-BiRefNet-ZHO 报错
ZHO-ZHO-ZHO/ComfyUI-BiRefNet-ZHO:ComfyUI中BiRefNet的更好版本 |IMG和视频

在安装 ComfyUI-BiRefNet-ZHO 插件后,如果启动 ComfyUI 后看到下面这类报错:
ModuleNotFoundError: No module named 'models.baseline'
或者:
Cannot import H:\PythonProjects3\Win_ComfyUI\custom_nodes\ComfyUI-BiRefNet-ZHO module for custom nodes: No module named 'models.baseline'

这通常不是模型文件没下载,也不是 ComfyUI 主程序坏了,而是这个插件自身的 Python 导入方式有问题。下面记录一下这个问题的原因、修复方法,以及具体修改步骤。
一、问题现象
ComfyUI 启动时加载自定义节点,控制台输出类似:
Warn!: Traceback (most recent call last):
File "H:\PythonProjects3\Win_ComfyUI\nodes.py", line 2227, in load_custom_node
module_spec.loader.exec_module(module)
File "H:\PythonProjects3\Win_ComfyUI\custom_nodes\ComfyUI-BiRefNet-ZHO\__init__.py", line 1, in <module>
from . import birefnet
File "H:\PythonProjects3\Win_ComfyUI\custom_nodes\ComfyUI-BiRefNet-ZHO\birefnet.py", line 7, in <module>
from models.baseline import BiRefNet
ModuleNotFoundError: No module named 'models.baseline'
结果就是:
- 插件加载失败
- ComfyUI 里看不到
BiRefNet节点 - 即使插件目录存在、文件齐全,也无法正常使用
二、问题原因
这个错误的根本原因,是插件内部使用了顶层导入,例如:
from models.baseline import BiRefNet
from config import Config
这种写法默认假设 Python 可以直接把当前插件目录里的 models、config.py 当成顶层模块来找。
但在 ComfyUI 加载自定义节点时,插件通常是作为一个包来导入的,不一定会把插件目录本身正确加入到 Python 的顶层模块搜索路径中。这样一来:
models.baseline找不到config可能也会和别的模块冲突- 不同插件之间如果有同名目录,也容易发生导入污染
简单说,这不是"没有这个文件",而是"Python 没按插件自己的目录去找这个文件"。
三、修复思路
正确的做法是把插件里的导入改成相对导入,让它明确从当前插件包内部查找。
例如把:
from models.baseline import BiRefNet
from config import Config
改成:
from .models.baseline import BiRefNet
from .config import Config
如果是 models 子目录内部再互相引用,也继续改成相对导入,比如:
from .backbones.build_backbone import build_backbone
from ..config import Config
另外,如果某些目录缺少 __init__.py,还需要补上,这样 Python 才会把它们识别成标准包。
四、具体修复步骤
1. 打开插件目录
进入你的 ComfyUI 插件目录:
H:\PythonProjects3\Win_ComfyUI\custom_nodes\ComfyUI-BiRefNet-ZHO
2. 修改 birefnet.py
原来大概是这样:
import torch, os
import sys
sys.path.insert(0, os.path.dirname(__file__))
from models.baseline import BiRefNet
from config import Config
修改为:
import torch, os
import sys
from .models.baseline import BiRefNet
from .config import Config
这里有两个重点:
- 把
from models.baseline改成from .models.baseline - 把
from config改成from .config - 那条
sys.path.insert(...)可以去掉,因为不再依赖这种不稳定的路径注入方式
3. 修改插件根目录下的其他文件
例如 dataset.py 里原本是:
from preproc import preproc
from config import Config
from utils import path_to_image
改成:
from .preproc import preproc
from .config import Config
from .utils import path_to_image
4. 修改 models 目录内部的导入
比如 models/baseline.py,原本可能有:
from models.backbones.build_backbone import build_backbone
from models.modules.decoder_blocks import BasicDecBlk
from models.refinement.refiner import Refiner
from config import Config
from dataset import class_labels_TR_sorted
应改成:
from .backbones.build_backbone import build_backbone
from .modules.decoder_blocks import BasicDecBlk
from .refinement.refiner import Refiner
from ..config import Config
from ..dataset import class_labels_TR_sorted
原则很简单:
- 同级目录用
.开头 - 上一级目录用
.. - 不再写裸的
models、config、dataset
5. 给子目录补 __init__.py
如果下面这些目录没有 __init__.py,需要加上:
custom_nodes/ComfyUI-BiRefNet-ZHO/models/__init__.py
custom_nodes/ComfyUI-BiRefNet-ZHO/models/backbones/__init__.py
custom_nodes/ComfyUI-BiRefNet-ZHO/models/modules/__init__.py
custom_nodes/ComfyUI-BiRefNet-ZHO/models/refinement/__init__.py
文件内容可以非常简单,例如:
"""BiRefNet model package."""
或者甚至空文件也可以。
这样做的目的,是让 Python 明确知道这些目录是包,而不是普通文件夹。
五、为什么这样改就能修好
因为 ComfyUI 加载插件时,实际导入链路类似这样:
custom_nodes.ComfyUI-BiRefNet-ZHO.__init__
既然插件本身已经是一个包,那么最稳妥的方式,就是让插件内部所有模块都通过包内相对路径互相引用。
这样改完后,Python 会按下面的逻辑查找:
from .models.baseline:从当前插件目录下找models/baseline.pyfrom ..config:从插件根目录找config.py
而不会去全局环境里错误地寻找某个叫 models 的其他包。
六、修复后如何验证
修改完成后:
-
保存所有文件
-
重启 ComfyUI
-
观察控制台是否还出现:
No module named 'models.baseline'
如果没有这个错误,说明这一步已经修复成功。
然后再看 ComfyUI 节点列表里是否出现:
BiRefNet Model LoaderBiRefNet
如果节点已经正常显示,说明插件已经能被正确加载。

插件健康检查器:
love530love/ComfyUI-HealthCheck: A lightweight health check plugin for ComfyUI that monitors custom node import status and provides colorful summary reports
ComfyUI注册表
无报错

七、如果还有新的报错怎么办
需要注意,这次修复的是导入路径问题。修好后,如果接着出现新的错误,比如:
- 缺少模型文件
- 缺少
torch、timm、kornia numpy或torch环境异常- CUDA 相关错误
那就是下一层问题了,不属于这次的 models.baseline 导入错误。
也就是说:
No module named 'models.baseline'是插件包结构问题- 修完后若出现别的报错,说明插件已经开始往下执行了,属于进步而不是失败
八、总结
这次 ComfyUI-BiRefNet-ZHO 的报错,本质上是插件内部写法没有适配 ComfyUI 的包加载方式。修复方法也不复杂,核心就两点:
- 把顶层导入改成相对导入
- 给缺失的目录补上
__init__.py
修复后,插件不再依赖不稳定的 sys.path 注入,也避免了和其他模块重名冲突,兼容性会更好,后续维护也更省事。