
【副業実験記#5】Stable Diffusion web UIのAPIでテキストから画像を生成してみた話
/ 13 min read
Table of Contents
参考記事【副業実験記#4】VOICEVOX ENGINEのAPIでテキストから音声を生成してみた話
つづき。
はじめに
引き続き、雑学動画自動生成ツールを自作できないか、検討してみているお話です。
今回は、テキストから画像を生成できるという「Stable Diffusion web UI」について、雑学動画自動生成ツールで使えるか検証してみた話です。
検証準備
Pythonのインストール
「Python」で雑学動画自動生成ツールを作るつもりなので、検証でも同様に使います。
詳細は以下の記事にまとめていますので、ご興味ある方は、そちらをご覧ください。
PyCharmのインストール
Pythonでの開発を楽にしてくれる統合開発環境「PyCharm」を使います。
Pythonで雑学動画自動生成ツールを作る際に使うつもりなので、検証でも同様に使います。
詳細は以下の記事にまとめていますので、ご興味ある方は、そちらをご覧ください。
検証用Pythonプロジェクトおよびvenvの作成
検証用「Pythonプロジェクト」を作成します。
PyCharmで簡単に作成できます。
Pythonプロジェクトを作成したら、その中で「venv」(Python仮想環境)を作成しておきます。
詳細は以下の記事にまとめていますので、ご興味ある方は、そちらをご覧ください。
https://sepapalab.com/why-use-venv-in-python/
Requestsのインストール
「Requests」は、WebサイトやAPIと通信するためのHTTPリクエストをPythonで簡単に使えるようにしてくれるライブラリです。
このライブラリを使用し、APIを実行します。
検証用Pythonプロジェクトでvenvを起動し、「Requests」のパッケージをインストールします。
ターミナルでコマンド実行してインストールする方法やPyCharm上で画面を操作してインストールする方法がありますが、今回は、PyCharm上で画面を操作し、venvに「Requests」パッケージをインストールします。
詳細は以下の記事にまとめていますので、ご興味ある方は、そちらをご覧ください。

Stable Diffusion web UIのインストール
「Stable Diffusion web UI」を手元のWindowsパソコンにインストールして使用する方法はいくつかあるようですが、今回はPythonとGitを使用する方法を選びます。
「Stable Diffusion web UI」をダウンロード(インストール)および使用するまでの流れは以下の通りです。
(英語ですが、公式ドキュメントにも書いてあります)
LISTPH_INVALID_1
GitHubから「Stable Diffusion web UI」をダウンロード(インストール)する場合、任意のフォルダに移動して以下のコマンドを実行すれば良いです。
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git詳細は以下の記事にまとめていますので、ご興味ある方は、そちらをご覧ください。
検証してみた
Stable Diffusion web UIのAPIモードを設定
Stable Diffusion web UIのAPIを利用したい場合、初期状態では利用できないようになっているので、設定が必要です。
設定はとても簡単で、起動バッチ(webui-user.bat)の中で環境変数(COMMANDLINE_ARGS)にAPIを使うための値(—api)を設定するだけです。
今回は、「—api」の他に「—api-server-stop」を設定します。
「—api-server-stop」は、API経由で「Stable Diffusion web UI」を停止/再起動/終了させられるようにする設定値です。
他にもAPI関連の値としては「—api-auth」や「—api-log」がありますが、詳細については、公式ドキュメントをご確認ください。
例)
・「webui-user.bat」設定“前(初期状態)”
@echo off
set PYTHON=set GIT=set VENV_DIR=set COMMANDLINE_ARGS=
call webui.bat・「webui-user.bat」設定“後(例)”
@echo off
set PYTHON=set GIT=set VENV_DIR=set COMMANDLINE_ARGS=--api --api-server-stop
call webui.bat「Stable Diffusion web UI」のAPIモード設定方法については、以下の記事にまとめていますので、ご興味ある方は、そちらもご覧ください。
https://sepapalab.com/how-to-launch-the-stable-diffusion-web-ui-on-windows/#toc8
Stable Diffusion web UIの起動
「Stable Diffusion web UI」では、指定のPythonのバージョン(3.10.6)を使うため、手元パソコンの他Pythonと共存できるように、Python標準搭載の仮想環境(venv)を使って起動します。
「Stable Diffusion web UI」のフォルダ内に仮想環境(venv)を作成
まず、ターミナル(PowerShell)を起動して、以下のように、「Stable Diffusion web UI」のフォルダ内で「venv」を作成します。
(自分が「Stable Diffusion web UI」をダウンロードしたフォルダは「D:\stable-diffusion-webui」です)
例)
・「Stable Diffusion web UI」フォルダ内で「venv」仮想環境を作成する例
PS C:\Users\sepapa> cd D:\stable-diffusion-webui
PS D:\stable-diffusion-webui> python -m venv .venv#### 仮想環境(venv)で起動バッチを実行
次に、以下のように、**作成した「venv」仮想環境を有効にして、「webui-user.bat」を実行**します。
例)
・「venv」仮想環境を有効にする例PS D:\stable-diffusion-webui> .venv/Scripts/Activate.ps1
PS D:\stable-diffusion-webui> .\webui-user.bat
:::caution※PowerShellではなく、コマンドプロンプトで実行する場合は、以下のように読み替えてください。D:\stable-diffusion-webui> .venv\Scripts\activate.bat
D:\stable-diffusion-webui> webui-user.bat
:::・結果
ターミナルが自動で起動し、以下のようなメッセージが表示され、「Stable Diffusion web UI」が起動します。
venv "D:\stable-diffusion-webui\venv\Scripts\Python.exe"
<div class="ellipsis-marker">~ 省略 ~</div>
Launching Web UI with arguments: --api --api-server-stop
<div class="ellipsis-marker">~ 省略 ~</div>
Running on local URL: http://127.0.0.1:7860
<div class="ellipsis-marker">~ 省略 ~</div>「Stable Diffusion web UI」の起動方法については、以下の記事にまとめていますので、ご興味ある方は、そちらもご覧ください。
参考記事Stable Diffusion web UIの起動方法【Windows】【初心者向け】
Stable Diffusion web UI APIを使用したテキスト画像変換の流れ
「Stable Diffusion web UI」起動時に表示されたIPアドレスとポート番号に対して、生成したい画像に関するテキストを含めてHTTPリクエストを送信すれば、それによって生成された画像が含まれたHTTPレスポンスが返ってきます。
APIの公式ドキュメントが出ているので、そちらを確認しながら検証していくと良いですね。
調べてみると、テキストを画像に変換する場合、単にAPI「/sdapi/v1/txt2img」経由で画像生成をリクエストするだけで良く、とても簡単でした。
Stable Diffusion web UI APIを使用したテキスト画像変換の試し
今回はシンプルにテキストから画像を生成してみます。
「/sdapi/v1/txt2img」を使う
では実際に、「/sdapi/v1/txt2img」を使って、テキストから画像を生成してみます。
以下は、公式ドキュメントに記載のあるPythonサンプルコードですが、そのまま流用して検証します。
「/sdapi/v1/txt2img」を使ったPythonサンプルコード
import requestsimport base64
# Define the URL and the payload to send.url = "http://127.0.0.1:7860"
payload = { "prompt": "puppy dog", "steps": 5}
# Send said payload to said URL through the API.response = requests.post(url=f'{url}/sdapi/v1/txt2img', json=payload)r = response.json()
# Decode and save the image.with open("output.png", 'wb') as f: f.write(base64.b64decode(r['images'][0]))この中の「payload = { ~ }」の部分で、生成したい画像の情報を指定するようです。
HTTPリクエストボディに含められて送られます。
「prompt」に設定している値が、生成したい画像の指示テキスト(プロンプト)になります。
サンプルコード内「payload = { ~ }」の部分で指定できる設定項目と既定値
{ "prompt": "", "negative_prompt": "", "styles": [ "string" ], "seed": -1, "subseed": -1, "subseed_strength": 0, "seed_resize_from_h": -1, "seed_resize_from_w": -1, "sampler_name": "string", "scheduler": "string", "batch_size": 1, "n_iter": 1, "steps": 50, "cfg_scale": 7, "width": 512, "height": 512, "restore_faces": true, "tiling": true, "do_not_save_samples": false, "do_not_save_grid": false, "eta": 0, "denoising_strength": 0, "s_min_uncond": 0, "s_churn": 0, "s_tmax": 0, "s_tmin": 0, "s_noise": 0, "override_settings": {}, "override_settings_restore_afterwards": true, "refiner_checkpoint": "string", "refiner_switch_at": 0, "disable_extra_networks": false, "firstpass_image": "string", "comments": {}, "enable_hr": false, "firstphase_width": 0, "firstphase_height": 0, "hr_scale": 2, "hr_upscaler": "string", "hr_second_pass_steps": 0, "hr_resize_x": 0, "hr_resize_y": 0, "hr_checkpoint_name": "string", "hr_sampler_name": "string", "hr_scheduler": "string", "hr_prompt": "", "hr_negative_prompt": "", "force_task_id": "string", "sampler_index": "Euler", "script_name": "string", "script_args": [], "send_images": true, "save_images": false, "alwayson_scripts": {}, "infotext": "string"}各項目値の詳細は、内部ドキュメントを参照して確認することになりますね。
サンプルコードで生成された画像
基本的な機能だけで十分に、雑学動画自動生成ツールで使えると感じました。
おわりに
「Stable Diffusion web UI」ですが、確かにテキストから画像を生成できることが分かりました。
APIの使い方も、とてもシンプルで扱いやすそうです。
これで、テキストから画像を生成するツールは「Stable Diffusion web UI」を使えば良いことが分かったので、次の技術やツールの検証に移ろうと思います。
今回の記事も、同じように副業に悩んでいる人、手探りで取り組んでいる人にとって、何かの参考になれば嬉しいです。
これからも記録を続けていく予定なので、よければフォローしてもらえると嬉しいです。
つづき。
参考記事【副業実験記#6】Python+GiNZAで形態素解析して日本語テキストを自動改行してみた話