Stable Diffusion APIサーバー
PhotoShopプラグインからStableDiffusionが呼び出せるようになりました。
これはGitHubの記事の翻訳です。
Stable Diffusion APIサーバー
Stable Diffusion Photoshopプラグイン用のローカル推論REST APIサーバー(https://christiancantrell.com/#ai-ml)です。
(また、何にでも使える一般的なStable Diffusion REST APIでもあります。)
※photoshopからは有償のDreamStudioを使うこともできるようです。(https://beta.dreamstudio.ai/)
PhotoShopプラグイン
PhotoShop側のプラグインはこちらからダウンロードしてインストールしてください。
APIサーバーについて
現在、APIサーバーは以下をサポートしています:
Stable Diffusionのモデルは自動的にHugging Faceからダウンロードします。
DreamBoothで作成されたようなHugging Faceディフューサーファイル形式のカスタムファインチューニングモデル。
(チェックポイントファイル(モデル)を直接読み込むことは現在サポートしていませんが、適切に名付けられたconvert_original_stable_diffusion_to_diffusers.pyスクリプトを使用して.ckptファイルをdiffusers形式に簡単に変換できます。)
このサーバーは、NVIDIA GPUを備えたWindowsおよびLinuxマシン、およびM1 Macで動作します。M1 MacでのMPS(Metal Performance Shaders)の使用は非常に実験的で(そして設定は容易ではありません)ですが、それは動作し、時間とともに改善されるでしょう。
可能なら、最高の結果を得るために、専用のLinuxマシンを使用することをお勧めします。Windowsでのパフォーマンスも非常に良いですが、他のアプリが動作していない専用マシンをお勧めします。
やむを得ない場合は同じマシン上でPhotoshopを実行できますが、その場合、Photoshopユーザー環境のためのGPUメモリの一部を放棄することになり、ローカル推論の最適化には悪影響となります。
このプロジェクトでは、コンテンツ安全性フィルターを使用していることに注意してください。
インストール
※以下の'%'文字はコマンドプロンプトを示すためのものであり、コピー&ペーストする際には含めないでください。
Windows、Linux、およびMacの手順
Pythonをインストールします。
Condaをインストールします。
このリポジトリをダウンロードします。(git clone https://github.com/cantrell/stable-diffusion-api-server.git)
cdコマンドでリポジトリのディレクトリに移動します。
以下のコマンドを実行して、sd-api-serverという名前のConda環境を設定します。
WindowsおよびLinux:
% conda env create -f environment.yaml
M1 Mac:
% conda env create -f environment-m1.yaml
その後、Conda環境をアクティベートします:
% conda activate sd-api-server
サーバーを更新する場合は、Conda環境も更新することを確認してください(プラットフォーム固有のyamlファイルを使用して):
% conda env update -f environment.yaml
% conda activate sd-api-server
古い環境を削除し、新たに作り直したい場合
(プラットフォーム固有のyamlファイルを使用して):
% conda env remove -n sd-api-server
% conda env create -f environment.yaml
% conda activate sd-api-server
Hugging Faceの設定
Stable Diffusionモデルをローカルで実行するために、Hugging Faceで設定する必要があることが二つあります:
モデルにアクセスするためには、ユーザーネームとメールアドレスをHugging Faceと共有することに同意する必要があります。
また、Hugging Faceトークンを設定する必要があります。読取専用トークンを作成したら、それをconfig.jsonファイルのhf_tokenキーの値としてコピー&ペーストしてください(そして、ファイルを保存するのを忘れないでください)。
WindowsとLinuxのユーザーの方々、これで準備は整いました!あとはサーバーを起動するだけです:
% python3 server.py
M1 Mac追加の指示
これは非常に実験的であり、すべての方に対して機能するわけではないかもしれません。しかし、次回のPyTorchのリリースにより簡単になる可能性があります。
方法1:ナイトリービルド
Terminalで、Condaのプロンプトにて、sd-api-server環境がアクティベートされた状態で:
% conda install pytorch torchvision -c pytorch-nightly
% conda deactivate
% conda activate sd-api-server
% python3 server.py
はPyTorchとTorchvisionのナイトリービルドをインストールしたことに気づいたかもしれません。
ナイトリービルドは、保証も保証もありません。サーバーが起動し、画像を生成できる場合、あなたはナイトリーロトを勝ち取ったことになります!
そうでない場合は、明日もう一度試すことができます。これは一時的な状況であり、次のPyTorchのリリースで必要なくなる可能性があります。
方法2:環境変数
ナイトリービルドが機能しなかった場合、または単にナイトリービルドにアレルギーがある場合、PyTorchにMPSに加えてCPUを使用するよう指示することができます。
すでにナイトリービルドをインストールしている場合は、上記のコマンドを使用してConda環境を削除し、再度始めから行い、ナイトリービルドのステップをスキップし、これを試してみてください
(sd-api-server環境がアクティブな状態で):
% conda env config vars set PYTORCH_ENABLE_MPS_FALLBACK=1
% conda activate sd-api-server
% python3 server.py
もし'ModuleNotFoundError: No module named 'flask''というメッセージが表示された場合、それはおそらくPythonのバージョンが間違っていることを意味します。
python3を使用した場合はpythonを試してみてください。pythonを使用した場合はpython3を試してみてください。(これらは、Macに古いバージョンのPythonがプレインストールされていることによる悦びです。)
カスタムモデルの設定
サーバー(そしてPhotoshopプラグイン)をカスタム訓練モデルと共に使用したい場合、最初に必要なのはカスタム訓練モデルそのものです。
それをする方法についての指示は、このREADMEの範囲を超えていますが、以下にいくつかのリソースを挙げます:
私のカスタムフォークのDreamBoothリポジトリ(大幅に簡略化されています)。
DreamBooth Stable DiffusionのColabノートブック(ローカルで訓練するよりもずっと簡単)。
Colabノートブックの使用に関する良いYouTubeチュートリアル。
オリジナルのDreamBooth論文。
現在、チェックポイントファイルを直接ロードすることはサポートされていませんが、適切に命名されたconvert_original_stable_diffusion_to_diffusers.pyスクリプトを使用して、.ckptファイルをdiffusers形式に簡単に変換することができます。
一旦モデルの訓練が完了したら、残りは簡単です。あなたがやるべきことはすべて以下の通りです:
config.jsonファイルをconfig-custom-models.jsonテンプレートに置き換えます(config-custom-models.jsonをconfig.jsonにリネームします)。
新しいconfig.jsonファイルにHugging Faceのトークンをコピー&ペーストしていることを確認します。
configファイルのcustom_model配列を適切に入力します。
以下はキー/値のペアが何を意味するかの説明です:
model_path:model_index.jsonファイルを含むディレクトリへのフルパス(ディレクトリだけで、ファイル自体は含めない)。スペースをエスケープしないでくださいが、バックスラッシュはバックスラッシュでエスケープしてください
G:\\My Drive\\stable_diffusion_weights\\MyCustomModelOutputui_label:Photoshopプラグインに表示したいモデルの名前。
url_path:エンドポイントパスとして使用されるユニークでURLフレンドリーな値(以下のREST APIセクションを参照)。
requires_safety_checker:カスタムモデルが安全チェッカーを必要とするかどうか。Hugging Faceのdiffusersファイル形式のモデルについては、これは真です;チェックポイントファイルからdiffusersファイル形式にコンパイルされたモデルについては、これはおそらく偽です。
configファイルが準備できたら、サーバーを(再)起動します。Photoshopプラグインがすでにロードされている場合は、再起動するか(または、「Generate」タブの右下隅の「Reload Plugin」リンクをクリックすればよい)。
config.jsonファイルのcustom_modelセクションが配列であることに注意してください。つまり、必要なだけカスタムモデルを含めることができます。以下は、複数のカスタム訓練モデルの場合の見た目です:
{
"hf_token": "your_hugging_face_token",
"custom_models": [
{
"model_path": "/path/to/directory/containing/model_index.json",
"ui_label": "My First Model",
"url_path": "my_first_model",
"requires_safety_checker": true
}
],
[
{
"model_path": "/path/to/another/directory/containing/model_index.json",
"ui_label": "My Second Model",
"url_path": "my_second_model",
"requires_safety_checker": true
}
]
}
Stable Diffusion PhotoshopプラグインのGenerateタブでカスタムモデルを表示するには、API Keyタブでローカル推論サーバーを設定していることを確認してください。
APIリセット
すべてのPOSTリクエストはapplication/x-www-form-urlencodedのコンテンツタイプを使用し、すべての画像はbase64でエンコードされた文字列であることに注意してください。
GET /ping
レスポンス
{'status':'success'}
GET /custom_models
レスポンス
[
{
"model_path": "/path/to/directory/containing/model_index.json",
"ui_label": "My First Model",
"url_path": "my_first_model",
"requires_safety_checker": "true | false"
}
], [...]
(カスタムモデルが設定されていない場合、空の配列が返されます。)
POST /txt2img
パラメーター
prompt:テキストの説明。
seed:数値の種(seed)。
num_outputs:取得したい画像の数。
width:結果の幅。 height:結果の高さ。
num_inference_steps:ステップの数(ステップが多いほど品質が高くなります)。
guidance_scale:プロンプトの強度。
レスポンス
{
'status':'success | failure',
'message':'Only if there was a failure',
'images': [
{
'base64': 'base64EncodedImage==',
'seed': 123456789,
'mimetype': 'image/png',
'nsfw': true | false
}
]
}
POST /img2img
パラメーター
prompt:テキストの説明。
seed:数値の種(seed)。
num_outputs:取得したい画像の数。
num_inference_steps:ステップの数(ステップが多いほど品質が高くなります)。
guidance_scale:プロンプトの強度。
init_image:初期入力画像。
strength:画像の強度。
レスポンス
{
'status':'success | failure',
'message':'Only if there was a failure',
'images': [
{
'base64': 'base64EncodedImage==',
'seed': 123456789,
'mimetype': 'image/png',
'nsfw': true | false
}
]
}
POST /masking
パラメーター
prompt:テキストの説明。
seed:数値の種(seed)。
num_outputs:取得したい画像の数。
num_inference_steps:ステップの数(ステップが多いほど品質が高くなります)。
guidance_scale:プロンプトの強度。
init_image:初期入力画像。
strength:画像の強度。
mask_image:置き換えるべきピクセルを表すマスク。
レスポンス
{
'status':'success | failure',
'message':'Only if there was a failure',
'images': [
{
'base64': 'base64EncodedImage==',
'seed': 123456789,
'mimetype': 'image/png',
'nsfw': true | false
}
]
}
POST /custom/<url_path>
url_pathは、config.jsonファイルで定義したurl_pathキー/値ペアを指します。
パラメーター
prompt:テキストの説明。
seed:数値の種(seed)。
num_outputs:取得したい画像の数。
width:結果の幅。
height:結果の高さ。
num_inference_steps:ステップの数(ステップが多いほど品質が高くなります)。
guidance_scale:プロンプトの強度。
レスポンス
{
'status':'success | failure',
'message':'Only if there was a failure',
'images': [
{
'base64': 'base64EncodedImage==',
'seed': 123456789,
'mimetype': 'image/png',
'nsfw': true | false
}
]
}