【SD WebUI】"Cannot add middleware after an application has started" エラーの解決法
なぜか突然 Stable Diffusion WebUI を起動してもすぐ停止してしまうエラーが出てしまっていたので、解決法をここに残しておきます。
エラーログ部分はこのようになっていました。
このメッセージは、ウェブアプリケーションが既に開始された後にミドルウェアを追加しようとしたために発生したエラーを示しています。
ネット上で検索したところ、解決法のようなものがいくつかありましたので、解決法をA~Cの順番でお伝えしていきます。
Aが終わった時点で解決したなら、B以降は必要ありません。
もちろん、Bをやって解決したなら、Cは必要ありません。
A: update.bat を使ってWebUIを更新する
こちらのエラー解決メモの項目にあった方法です。
私の場合、StabilityMatrix を使ってインストールしている為、この状況には該当しませんでしたので、この方法は行っていません。
B: 別ドライブにインストールしなおす方法
私の場合はこちらで解決しました。
単純に、SD WebUIを別のドライブにインストールしなおします。
ご自身でインストールされている方は、特にご説明の必要は無いでしょう。
ここでは、StabilityMatrix を使ってインストールしている方の場合の方法を書いておきます。
① 新環境用のフォルダの作成
まずは、これまで使っていたのとは別のドライバに、WebUI環境をインストールするフォルダを新たに作成します。
② StabilityMatrix のデータフォルダ先の設定を変更する
StabilityMatrix のメインウィンドウからSetting(歯車アイコン)を選択し、新しいデータフォルダを選択からフォルダを選択を選んでください。
これで今後、StabilityMatrix で新たにアプリをインストールしたりするフォルダ先が変更できました。
これまで使っていたフォルダは変更されずに残っていますので、必要なファイルをあとあと移動する事ができるので安心してください。
この状況から Web UI を新たにインストールし、環境を再構築していきましょう。
C: FastAPIをダウングレードする方法
そもそも今回のエラーメッセージは、ウェブアプリケーションが既に開始された後にミドルウェアを追加しようとしたために発生したエラーを示しています。
このエラーは、特定のバージョンの FastAPI で発生していることが報告されています。
解決策として、FastAPIをバージョン0.90.1にダウングレードする方法があるようです。
今回は私の環境のままで説明します。
Stable Diffusion WebUI のフォルダの場所は各自それぞれ違うと思うので、そこはご自身で確認してコピペしなおしてください。
今回、私の環境では以下の場所にStable Diffusion WebUI のフォルダがありました。
この場合、以下のようにコマンドプロンプトでコマンドを入力していきます。
① コマンドプロンプトを開く
Windowsで「cmd」と検索して、コマンドプロンプトを管理者として実行で開きます。
② Stable Diffusionのフォルダに移動
次に、コマンドプロンプト内で以下のコマンドを使ってStable Diffusionがインストールされているフォルダに移動します。
フォルダの場所は、先ほど各自確認したアドレスに書き変えてください。
cd C:\StabilityMatrix_20240129\Packages\stable-diffusion-webui
移動っていうと意味が良くわからない方もいるかと思いますが、コマンドプロンプトでの作業を実行する場所を指定するという意味合いだと思ってください。
③ 仮想環境をアクティブにする
Windowsの場合は、仮想環境をアクティブにするには通常は以下のようになりますが、あなたの環境によって異なる場合があります。
.\venv\Scripts\activate
こちらをコピペすると、文頭に(venv)がつくようになる。
これが仮想環境が動き出した証。
④ FastAPIをダウングレード
次に、以下のコマンドを実行して FastAPI を Ver0.90.1にダウングレードします。
pip install fastapi==0.90.1
どうもこのFastAPI とやらの Verまわりが悪さしてた らしく、問題のなかった以前のVerに置き換えることで解決します。
⑤ 仮想環境を終了しておく
以下のコードをコピペしてエンターすれば終了です。
deactivate
Stable Diffusionを通常通りに開始: 上記の手順を終えたら、Stable Diffusionを通常どおりに開始してみてください。
私は最初、この方法で正常に起動するようになったのですが、数分後に再発しました。
そのため、Bでご紹介した別ドライブへのインストールしなおしを行い、解決しました。