Stable Diffusion webui插件使用中遇到的问题及解决思路整理

最近使用stable diffusion,时不时会安装些新扩展或试试小功能。本来一切挺正常,忽然有一天启动SD时,窗口报一串错误信息。原来用的好好的插件,Face Editor与Inpaint Anything,都无法使用了。常用的方式,将两个插件从SD【Extensions】页中卸载,然后再重装,问题依然(包括直接下载全部github代码)。又用同样方式,在秋叶版的SD中安装这两个插件,Face Editor可以安装,Inpaint Anything依旧不能用。

我使用的是官方版本的SD,下载地址是:https://github.com/AUTOMATIC1111/stable-diffusion-webui 。SD经常升级,插件也经常升级。我的SD从上次安装后,一直没升级。所以,第一个考虑的是升级SD到最新版,保障SD与插件版本对齐。通过此升级SD,Face Editor可以正常安装使用了。但Inpaint Anything还是不能正常启动。于是又具体分析错误信息,找到Inpaint Anything依赖的其他开发包中,又再依赖的包有问题。于是修正了此依赖,Inpaint Anything又可以正常使用了。

通过这两个问题的解决,基本SD以后再碰到类似问题,都可以按照这两个方式解决。本文就是把解决的细节整理记录一下,有需要的可以参考思路。


升级stable diffusion webui

官网代码在https://github.com/AUTOMATIC1111/stable-diffusion-webui,是从此下载代码安装的。如果自己手动安装过,都知道访问github的痛苦。不但速度慢,而且时不时不能连接。于是自己升级的第一步,建议建立一个国内的同步仓库。我是 在https://gitcode.net上建立的仓库,主要截图如下:

网页的右上角,选择【New project】

选择【Import project】

选择【Repo by URL】,URL就填GitHub Sd的官网地址:

https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

稍等一会,同步代码完成。我的仓库名为:

https://gitcode.net/uflexnihao/stable-diffusion-webui.git

接下来就可以在SD的安装目录中,进入CMD,运行git pull,更新代码了。

因为以前我是从github下载的代码,所以这里先切换代码仓库到新地址。常用的命令如下:

git  remote                          查看我的本地代码仓库名,报的名为  origin
git remote get-url origin     查看我的origin库,对应的远程仓库url,显示的就是 https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
git remote set-url origin   https://gitcode.net/uflexnihao/stable-diffusion-webui.git   设置到我的国内仓库url    

此时,运行git pull就可以更新SD到最新版本了。

题外话:因为我手动改过SD目录中的requirements_versions.txt,所以用git pull 时会提示有被修改过的文件,让我选择处理方式,git pull并未执行。

有两个选择,一个是commit提交修改文件,一个是stash放弃修改内容。因为我是下载全部最新代码,所以本地的修改,可以放弃。(但最好把对应文件拷贝备份)

具体操作就是:

git stash     放弃修改
git pull       执行更新

Inpaint Anything报错信息分析

*** Error loading script: inpaint_anything.py
    Traceback (most recent call last):
      File "D:\sd\stable-diffusion-webui\modules\scripts.py", line 274, in load_scripts
        script_module = script_loading.load_module(scriptfile.path)
      File "D:\sd\stable-diffusion-webui\modules\script_loading.py", line 10, in load_module
        module_spec.loader.exec_module(module)
      File "<frozen importlib._bootstrap_external>", line 883, in exec_module
      File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
      File "D:\sd\stable-diffusion-webui\extensions\sd-webui-inpaint-anything\scripts\inpaint_anything.py", line 19, in <module>
        from lama_cleaner.model_manager import ModelManager
      File "D:\sd\stable-diffusion-webui\venv\lib\site-packages\lama_cleaner\model_manager.py", line 8, in <module>
        from lama_cleaner.model.controlnet import ControlNet
		
		
      File "D:\sd\stable-diffusion-webui\venv\lib\site-packages\lama_cleaner\model\controlnet.py", line 7, in <module>   !!!!!!!!!!!!!!!!!!!!!!
        from diffusers import ControlNetModel
		
    ImportError: cannot import name 'ControlNetModel' from 'diffusers' (D:\sd\stable-diffusion-webui\venv\lib\site-packages\diffusers\__init__.py)
python的报错信息,是从起点到最终的出错位置的。所以,上面的报错信息看来,分了3个层:
插件程序inpaint_anything.py  中出错--》
依赖lama_cleaner。lama_cleaner\model\controlnet.py--》
diffusers

最终的问题是:ImportError: cannot import name 'ControlNetModel' from 'diffusers'
就是diffusers库中,没找到ControlNetModel包。

具体查找代码位置:venv\lib\site-packages\diffusers,确实没有ControlNetModel的目录或文件名
python代码库中:__init__.py文件,一般会标出库的版本号
diffusers下的__init__.py版本标识如下:
__version__ = "0.10.2"

需要的库没有,肯定是没安装或版本不对。既然diffuser已经安装,那就是版本问题。

现在要使用最新的inpaint anything插件,官方地址为 https://github.com/Uminosachi/sd-webui-inpaint-anything。一般情况,软件源代码目录中都会有一个requirements.txt文件,标明软件依赖库及版本。inpaint anything中没有,一般就是使用最新版本或还在开发中不完善。

那就看依赖的库lama_cleaner。python库,可以从https://pypi.org 找到相关信息。 输入库名,可以找到库的信息页,可以找到代码。

lama-cleaner库的官方代码https://github.com/Sanster/lama-cleaner。其中的requirements.txt内容如下:

lama-cleaner依赖的diffusers要求的版本为0.16.1,而目前本地的版本为0.10.2。因而需要更新diffusers库到0.16.1。

venv\Scripts\activate                    启动本地的SD虚拟python环境

pip install diffusers==0.16.1      安装diffusers到指定版本

安装后,重新启动SD环境,Inpaint Anything插件可正常使用了。


以上的两种情况及解决方式,基本能涵盖SD插件更新中的问题,希望对大家有所帮助。