つづき。
はじめに
引き続き、雑学動画自動生成ツールを自作できないか、検討してみているお話です。
今回は、テキストから画像を生成できるという「Stable Diffusion web UI」について、雑学動画自動生成ツールで使えるか検証してみた話です。
検証準備
Pythonのインストール
「Python」で雑学動画自動生成ツールを作るつもりなので、検証でも同様に使います。
詳細は以下の記事にまとめていますので、ご興味ある方は、そちらをご覧ください。
PyCharmのインストール
Pythonでの開発を楽にしてくれる統合開発環境「PyCharm」を使います。
Pythonで雑学動画自動生成ツールを作る際に使うつもりなので、検証でも同様に使います。
詳細は以下の記事にまとめていますので、ご興味ある方は、そちらをご覧ください。
検証用Pythonプロジェクトおよびvenvの作成
検証用「Pythonプロジェクト」を作成します。
PyCharmで簡単に作成できます。
Pythonプロジェクトを作成したら、その中で「venv」(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」をダウンロード(インストール)および使用するまでの流れは以下の通りです。
(英語ですが、公式ドキュメントにも書いてあります)
- Python(バージョン:3.10.6)をインストールする
- Gitをインストールする
- GitHubから「Stable Diffusion web UI」をダウンロード(インストール)する
- 「Stable Diffusion web UI」の中にある「webui-user.bat」を実行する
※一般ユーザーで実行する
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モード設定方法については、以下の記事にまとめていますので、ご興味ある方は、そちらもご覧ください。
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・結果
ターミナルが自動で起動し、以下のようなメッセージが表示され、「Stable Diffusion web UI」が起動します。
venv "D:\stable-diffusion-webui\venv\Scripts\Python.exe"
~ 省略 ~
Launching Web UI with arguments: --api --api-server-stop
~ 省略 ~
Running on local URL: http://127.0.0.1:7860
~ 省略 ~「Stable Diffusion web UI」の起動方法については、以下の記事にまとめていますので、ご興味ある方は、そちらもご覧ください。
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 requests
import 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」に設定している値が、生成したい画像の指示テキスト(プロンプト)になります。
ちなみに「steps」は、画像を変換する段階(ステップ)数らしく、値が小さいほど画像が粗く不明瞭になり、大きいほど画像の精度が高くなるようです(代わりに時間がかかる)。
サンプルコード内「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」を使えば良いことが分かったので、次の技術やツールの検証に移ろうと思います。
今回の記事も、同じように副業に悩んでいる人、手探りで取り組んでいる人にとって、何かの参考になれば嬉しいです。
これからも記録を続けていく予定なので、よければフォローしてもらえると嬉しいです。
つづき。










