Stable Diffusion v2をバッチファイルで起動したい

Stable Diffusionをインストールすると毎度以下の順にコマンドを実行する必要があります。
少し面倒くさいので、今回はバッチファイルで実行できるようにしてみます。

cd Stable Diffusionのフォルダパス
conda activate ldm
call python scripts/txt2img.py --prompt "a cute himalayan cat" --ckpt checkpoints/v2-1_512-ema-pruned.ckpt --config configs/stable-diffusion/v2-inference.yaml --H 512 --W 512 --n_iter 4 --n_samples 1 --device cuda

今回の記事の内容

  • バッチファイルテクニック
    • 小細工無しでシンプルなバッチファイルの作成
    • SEED値をランダムに発生させたい
    • プロンプトを外部ファイルに出して制御したい
    • 出力先を変更したい
  • 管理者権限で実行したい
    • バッチファイルの管理者権限で実行(ショートカット)
    • バッチファイルに管理者権限で実行(コマンド)

バッチファイルテクニック

小細工無しでシンプルなバッチファイルの作成

とりあえず一番シンプルな方法でバッチファイルにしてみます。

@echo off
rem -- Stable Diffusionのフォルダを指定する ---
set CURRENT_DIR=C:\stablediffusion-main\stablediffusion-main
rem -- Anaconda Promptの実行ファイルパスを指定する --
set CONDA_PATH=C:\ProgramData\Anaconda3\Scripts\activate.bat

call cd %CURRENT_DIR%
call %CONDA_PATH%
call conda activate ldm
call python scripts/txt2img.py --prompt "a cute himalayan cat" --ckpt checkpoints/v2-1_512-ema-pruned.ckpt --config configs/stable-diffusion/v2-inference.yaml --H 512 --W 512 --n_iter 4 --n_samples 1 --device cuda
pause

ファイル名:stablediffusion.bat (ファイル名は適当で構いません)
エンコード:Shift-JIS

バッチファイルを起動する時は管理者権限で実行する必要があります。

SEED値をランダムに発生させたい

以下SEED値をランダムに発生させる場合の処理です。

@echo off
rem -- Stable Diffusionのフォルダを指定する ---
set CURRENT_DIR=C:\stablediffusion-main\stablediffusion-main
rem -- Anaconda Promptの実行ファイルパスを指定する --
set CONDA_PATH=C:\ProgramData\Anaconda3\Scripts\activate.bat

call cd %CURRENT_DIR%
call %CONDA_PATH%
call conda activate ldm
call python scripts/txt2img.py --prompt "a cute himalayan cat" --ckpt checkpoints/v2-1_512-ema-pruned.ckpt --config configs/stable-diffusion/v2-inference.yaml --H 512 --W 512 --n_iter 4 --n_samples 1 --device cuda --seed %random%
pause

ファイル名:stablediffusion.bat (ファイル名は適当で構いません)
エンコード:Shift-JIS

プロンプトを外部ファイルに出して制御したい

@echo off
rem -- Stable Diffusionのフォルダを指定する ---
set CURRENT_DIR=C:\stablediffusion-main\stablediffusion-main
rem -- Anaconda Promptの実行ファイルパスを指定する --
set CONDA_PATH=C:\ProgramData\Anaconda3\Scripts\activate.bat
rem -- プロンプト用ファイルパスを指定する --
set PROMPT_PATH=C:\Work\promptfile.txt

call cd %CURRENT_DIR%
call %CONDA_PATH%
call conda activate ldm
call python scripts/txt2img.py --ckpt checkpoints/v2-1_512-ema-pruned.ckpt --config configs/stable-diffusion/v2-inference.yaml --H 512 --W 512 --n_iter 4 --n_samples 1 --device cuda --seed %random% --from-file %PROMPT_PATH%
pause

ファイル名:stablediffusion.bat (ファイル名は適当で構いません)
エンコード:Shift-JIS

a cute himalayan cat
a cute gray himalayan cat

ファイル名:promptfile.txt (ファイル名は適当で構いません)
エンコード:UTF-8

出力先を変更したい

@echo off
rem -- Stable Diffusionのフォルダを指定する ---
set CURRENT_DIR=C:\stablediffusion-main\stablediffusion-main
rem -- Anaconda Promptの実行ファイルパスを指定する --
set CONDA_PATH=C:\ProgramData\Anaconda3\Scripts\activate.bat
rem -- プロンプト用ファイルパスを指定する(任意で作成) --
set PROMPT_PATH=C:\Work\promptfile.txt
rem -- ファイルの出力先を指定する --
set OUTDIR=C:\result

call cd %CURRENT_DIR%
call %CONDA_PATH%
call conda activate ldm
call python scripts/txt2img.py --ckpt checkpoints/v2-1_512-ema-pruned.ckpt --config configs/stable-diffusion/v2-inference.yaml --H 512 --W 512 --n_iter 4 --n_samples 1 --device cuda --seed %random% --from-file %PROMPT_PATH% --outdir %OUTDIR%
pause

ファイル名:stablediffusion.bat (ファイル名は適当で構いません)
エンコード:Shift-JIS
ファイルの出力先:C:\result

a cute himalayan cat
a cute gray himalayan cat

ファイル名:promptfile.txt (ファイル名は適当で構いません)
エンコード:UTF-8

管理者権限で実行したい

バッチファイルの管理者権限で実行(ショートカット)

毎度右クリック→管理者として実行は面倒くさい。
そういう場合は以下の手順で管理者権限で実行できるようにします。

ショートカット作成 → プロパティ → ショートカット → 詳細設定 → 管理者として実行

バッチファイルに管理者権限で実行(コマンド)

ショートカットをつくるのがイヤとかそういう事情もあるかと思います。知らんけど。
そういう場合は以下のコードを埋め込みます。

@echo off
whoami /priv | find "SeDebugPrivilege" > nul
if %errorlevel% neq 0 (
 @powershell start-process %~0 -verb runas
 exit
)

rem -- Stable Diffusionのフォルダを指定する ---
set CURRENT_DIR=C:\stablediffusion-main\stablediffusion-main
rem -- Anaconda Promptの実行ファイルパスを指定する --
set CONDA_PATH=C:\ProgramData\Anaconda3\Scripts\activate.bat

call cd %CURRENT_DIR%
call %CONDA_PATH%
call conda activate ldm
call python scripts/txt2img.py --prompt "a cute himalayan cat" --ckpt checkpoints/v2-1_512-ema-pruned.ckpt --config configs/stable-diffusion/v2-inference.yaml --H 512 --W 512 --n_iter 4 --n_samples 1 --device cuda
pause

ファイル名:stablediffusion.bat (ファイル名は適当で構いません)
エンコード:Shift-JIS

確認してくれるようになります。

まとめ

毎度手打ちは面倒なのでバッチファイルで実行する方法を記述しました。
あらかじめたくさんコマンドを用意して放置したい場合などにも使えます。
ご参考まで。

おわり

PR

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です