2025年4月19日 星期六

Stable Diffusion 學習筆記 (五) : 安裝 sd-webui-prompt-all-in-one 外掛

今天繼續閱讀杰克艾米粒這本超棒的 "Stable Diffusion:與杰克艾米立攜手專精 AI 繪圖" 來完善我的 SD 設定, 安裝 5 個推薦必裝外掛, 安裝方法與前一篇安裝中文化界面相同, 就是在 "Extensions" 頁籤的 "Install from URL" 子頁籤的 "URL  for extension's git repository" 框中輸入外掛的 git 網址, 按 "Install" 鈕即可安裝, 參考 : 


安裝網址可在此書的旗標服務專區取得 : 


以下是安裝提示詞輔助工具  sd-webui-prompt-all-in-one 的紀錄, 不知道是不是我的電腦最早安裝了 Python 3.12 (SD Webui 用的是自帶的 Python 3.10) 造成干擾還是其他原因, 過程並不是像書中那麼順利. 

在 "Extensions (擴充功能)/Installed (已安裝套件)/Install from URL (從網址安裝)" 頁籤的 "URL  for extension's git repository(擴充功能的 git 儲存庫網址)" 框中輸入如下網址 : 

https://github.com/Physton/sd-webui-prompt-all-in-one.git

然後按底下的 "Install(安裝)" 鈕 : 




安裝完畢會在最底下出現 "Installed into C:\Users\USER\Downloads\sd.webui\webui\extensions\sd-webui-prompt-all-in-one. Use Installed tab to restart." 

切到 "擴充功能"/"已安裝" 頁籤, 按 "更新並重新啟動使用者介面" 鈕 :  




但是重新執行 run.bat 時慘劇發生了, 出現 "Python API call failed" 錯誤, 原因是找不到 "_cffi_backend" 模組 : 

Installing sd-webui-prompt-all-in-one: chardet
Installing sd-webui-prompt-all-in-one: execjs
Installing sd-webui-prompt-all-in-one: pathos
Installing sd-webui-prompt-all-in-one: boto3
Installing sd-webui-prompt-all-in-one: aliyunsdkcore
Installing sd-webui-prompt-all-in-one: aliyunsdkalimt
Python 3.10.6 (tags/v3.10.6:9c7b4bd, Aug  1 2022, 21:53:49) [MSC v.1932 64 bit (AMD64)]
Version: v1.10.1
Commit hash: 82a973c04367123ae98bd9abdf80d9eda9b910e2
Launching Web UI with arguments: --xformers
ModuleNotFoundError: No module named '_cffi_backend'  
thread '<unnamed>' panicked at C:\Users\runneradmin\.cargo\registry\src\index.crates.io-6f17d22bba15001f\pyo3-0.20.3\src\err\mod.rs:788:5:
Python API call failed 
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Traceback (most recent call last):
  File "C:\Users\USER\Downloads\sd.webui\webui\launch.py", line 48, in <module>
    main()
  File "C:\Users\USER\Downloads\sd.webui\webui\launch.py", line 44, in main
    start()
  File "C:\Users\USER\Downloads\sd.webui\webui\modules\launch_utils.py", line 465, in start
    import webui
  File "C:\Users\USER\Downloads\sd.webui\webui\webui.py", line 13, in <module>
    initialize.imports()
  File "C:\Users\USER\Downloads\sd.webui\webui\modules\initialize.py", line 26, in imports
    from modules import paths, timer, import_hook, errors  # noqa: F401
  File "C:\Users\USER\Downloads\sd.webui\webui\modules\paths.py", line 60, in <module>
    import sgm  # noqa: F401
  File "C:\Users\USER\Downloads\sd.webui\webui\repositories\generative-models\sgm\__init__.py", line 1, in <module>
    from .models import AutoencodingEngine, DiffusionEngine
  File "C:\Users\USER\Downloads\sd.webui\webui\repositories\generative-models\sgm\models\__init__.py", line 1, in <module>
    from .autoencoder import AutoencodingEngine
  File "C:\Users\USER\Downloads\sd.webui\webui\repositories\generative-models\sgm\models\autoencoder.py", line 12, in <module>
    from ..modules.diffusionmodules.model import Decoder, Encoder
  File "C:\Users\USER\Downloads\sd.webui\webui\repositories\generative-models\sgm\modules\__init__.py", line 1, in <module>
    from .encoders.modules import GeneralConditioner
  File "C:\Users\USER\Downloads\sd.webui\webui\repositories\generative-models\sgm\modules\encoders\modules.py", line 5, in <module>
    import kornia
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\kornia\__init__.py", line 11, in <module>
    from . import augmentation, color, contrib, core, enhance, feature, io, losses, metrics, morphology, tracking, utils, x
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\kornia\x\__init__.py", line 2, in <module>
    from .trainer import Trainer
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\kornia\x\trainer.py", line 11, in <module>
    from accelerate import Accelerator
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\accelerate\__init__.py", line 3, in <module>
    from .accelerator import Accelerator
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\accelerate\accelerator.py", line 35, in <module>
    from .checkpointing import load_accelerator_state, load_custom_state, save_accelerator_state, save_custom_state
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\accelerate\checkpointing.py", line 24, in <module>
    from .utils import (
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\accelerate\utils\__init__.py", line 133, in <module>
    from .launch import (
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\accelerate\utils\launch.py", line 23, in <module>
    from ..commands.config.config_args import SageMakerConfig
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\accelerate\commands\config\__init__.py", line 19, in <module>
    from .config import config_command_parser
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\accelerate\commands\config\config.py", line 25, in <module>
    from .sagemaker import get_sagemaker_input
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\accelerate\commands\config\sagemaker.py", line 35, in <module>
    import boto3  # noqa: F401
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\boto3\__init__.py", line 17, in <module>
    from boto3.session import Session
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\boto3\session.py", line 17, in <module>
    import botocore.session
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\botocore\session.py", line 26, in <module>
    import botocore.client
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\botocore\client.py", line 15, in <module>
    from botocore import waiter, xform_name
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\botocore\waiter.py", line 20, in <module>
    from botocore.docs.docstring import WaiterDocstring
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\botocore\docs\__init__.py", line 15, in <module>
    from botocore.docs.service import ServiceDocumenter
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\botocore\docs\service.py", line 14, in <module>
    from botocore.docs.client import (
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\botocore\docs\client.py", line 18, in <module>
    from botocore.docs.example import ResponseExampleDocumenter
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\botocore\docs\example.py", line 13, in <module>
    from botocore.docs.shape import ShapeDocumenter
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\botocore\docs\shape.py", line 19, in <module>
    from botocore.utils import is_json_value_header
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\botocore\utils.py", line 39, in <module>
    import botocore.httpsession
  File "C:\Users\USER\Downloads\sd.webui\system\python\lib\site-packages\botocore\httpsession.py", line 45, in <module>
    from urllib3.contrib.pyopenssl import (
  File "C:\Users\USER\AppData\Roaming\Python\Python310\site-packages\urllib3\contrib\pyopenssl.py", line 43, in <module>
    import OpenSSL.SSL  # type: ignore[import-untyped]
  File "C:\Users\USER\AppData\Roaming\Python\Python310\site-packages\OpenSSL\__init__.py", line 8, in <module>
    from OpenSSL import SSL, crypto
  File "C:\Users\USER\AppData\Roaming\Python\Python310\site-packages\OpenSSL\SSL.py", line 10, in <module>
    from OpenSSL._util import (
  File "C:\Users\USER\AppData\Roaming\Python\Python310\site-packages\OpenSSL\_util.py", line 6, in <module>
    from cryptography.hazmat.bindings.openssl.binding import Binding
  File "C:\Users\USER\AppData\Roaming\Python\Python310\site-packages\cryptography\hazmat\bindings\openssl\binding.py", line 15, in <module>
    from cryptography.exceptions import InternalError
  File "C:\Users\USER\AppData\Roaming\Python\Python310\site-packages\cryptography\exceptions.py", line 9, in <module>
    from cryptography.hazmat.bindings._rust import exceptions as rust_exceptions
pyo3_runtime.PanicException: Python API call failed
請按任意鍵繼續 . . .

將上面訊息貼給 ChatGPT 求解, 它建議在 sd.webui 底下建一個 venv 虛擬環境安裝所需模組 :

pip install chardet execjs pathos boto3 aliyunsdkcore aliyunsdkalimt 

但安裝完再次執行 run.bat 錯誤依舊, 因為虛擬環境會依據我電腦的 Python 版本 (3.12) 來安裝套件, 這跟 webui 自帶的 3.10 根本無關 (雖然是餿主意, 但也不能怪 AI, 因為它也不知道我的電腦環境). 所以只好問它如何移除 sd-webui-prompt-all-in-one 外掛恢復原狀, 建議如下 :

先到 sd.webui\webui\extensions 資料夾下刪除 sd-webui-prompt-all-in-one 這個目錄 :




然後往上跳一層到 sd.webui\webui 資料夾下刪除 config.json, ui-config.json 這兩個檔案 (啟動時會重新建立), 另外最好還要刪除 tmp 與 cache 這兩個暫存資料夾以清掉殘留快取 : 




當然上面建立的 venv 虛擬環境資料夾也無用藥刪除 (先 deactivat 跳出). 

但重新執行 run.bat 仍然出現上面一樣找不到 "_cffi_backend" 模組的錯誤訊息, 再次求教 ChatGPT, 它這回的解決方案中有一個是建議手動安裝 _cffi_backend 模組, 先切換到 webui 自帶的 Python 資料夾 sd.webui\system\python 下, 執行下列安裝指令 : 

PS C:\Users\USER\Downloads\sd.webui\system\python> .\python.exe -m pip install --force-reinstall cffi   
Collecting cffi
  Downloading cffi-1.17.1-cp310-cp310-win_amd64.whl.metadata (1.6 kB)
Collecting pycparser (from cffi)
  Using cached pycparser-2.22-py3-none-any.whl.metadata (943 bytes)
Downloading cffi-1.17.1-cp310-cp310-win_amd64.whl (181 kB)
Using cached pycparser-2.22-py3-none-any.whl (117 kB)
Installing collected packages: pycparser, cffi
Successfully installed cffi-1.17.1 pycparser-2.22

然後重新執行 run.bat 果然就恢復原狀了 :




但之前安裝的中文版擴充外掛設定被刪掉了 (外掛還在), 所以要重新設定. 

系統恢復後我又再次安裝 sd-webui-prompt-all-in-one 外掛, 這次就順利完成了 : 




可見頁面上增加了很多與 prompt 相關的按鈕. 

經過這次波折也搞清楚如果 webui 自帶的 Python 缺少甚麼套件或模組, 原來是要到它底下的 python 目錄中去安裝. 

沒有留言 :