AUTOMATIC1111(stable-diffusion-webui)には、WebUI本体とは別にREST APIを公開する機能が標準で搭載されています。起動オプションに --api を追加するだけで http://localhost:7860/sdapi/v1/ 配下にエンドポイントが現れ、Pythonスクリプトや外部アプリから画像生成を自動化できます。
この記事では、Ubuntu 24.04 LTS 上で AUTOMATIC1111 を API サーバーとして起動し、requests ライブラリや公式クライアント webuiapi(v0.9.17、実測)を使って画像生成を呼び出す手順を解説します。GUIを全く開かずにStable Diffusionを利用したい開発者・自動化したい方に向けた内容です。
この記事のポイント
python launch.py --apiまたは./webui.sh --apiで即座にAPIサーバーが立ち上がる- APIクライアントは
requests 2.34.2+Pillow 12.2.0+webuiapi 0.9.17のみで動作(Ubuntu 24.04 実測) - 主要エンドポイントは
/sdapi/v1/txt2img(テキストから画像)・/sdapi/v1/img2img(画像から画像)の2種 http://localhost:7860/docsでSwagger UIが開き、ブラウザからAPIを試験実行できる- 公開サーバーに置く場合は
--api-auth user:passwordで認証を必須にする
目次
- AUTOMATIC1111 APIとは
- 前提環境と必要スペック
- AUTOMATIC1111 のインストール
- APIモードで起動する
- APIクライアント環境のセットアップ
- txt2img API — テキストから画像生成
- webuiapi ライブラリを使う
- 主要エンドポイント一覧
- API認証の設定
- よくあるエラーと解決策
- まとめ
AUTOMATIC1111 APIとは
AUTOMATIC1111 は Stable Diffusion の WebUI として有名ですが、起動オプション --api を付けると同時に HTTP REST API サーバーとしても機能します。

APIを使うメリットは主に3点です:
- Pythonスクリプトから画像生成を完全自動化できる(プロンプト変更・バッチ処理・モデル切替なども)
- 別サーバーやコンテナで動いているStable Diffusionにネットワーク越しにアクセスできる
- WebUIを起動しないヘッドレス環境(VPS・Dockerコンテナ・CI/CD)でも使える
APIは FastAPI で実装されており、http://localhost:7860/docs でインタラクティブなSwagger UIも自動生成されます。

前提環境と必要スペック
GPUが必須です
Stable Diffusion の画像生成にはNVIDIA GPU(VRAM 4GB以上)が実質必須です。CPUでも動作しますが、1枚の生成に数分〜数十分かかります。VPSで本格的に使うなら GPU インスタンスを選びましょう。
この記事で検証した環境は次の通りです:
- OS: Ubuntu 24.04.4 LTS(docker run –rm ubuntu:24.04 で実測)
- Python: 3.12.3(Ubuntu 24.04 標準)
- pip: 24.0
- GPU: NVIDIA RTX シリーズ(VRAM 6GB以上推奨)、または CPU モード
- RAM: 8GB 以上
- ストレージ: モデルファイル込みで 20GB 以上の空き
| 構成 | GPU VRAM | 1枚生成目安 | 備考 |
|---|---|---|---|
| NVIDIA RTX 40 系 | 8GB〜 | 2〜8秒 | 最速。SDXL・ControlNetもフル活用可 |
| NVIDIA RTX 30 系 | 6GB〜 | 5〜20秒 | SD 1.5系は快適。SDXLは要メモリ節約設定 |
| CPU only | — | 3〜30分 | 動作確認・デバッグ用途に限定 |
AUTOMATIC1111 のインストール
AUTOMATIC1111 は Git で公式リポジトリをクローンしてインストールします。まず必要な依存パッケージを入れます。
手順1:依存パッケージをインストールする

次のコマンドで必要なシステムパッケージをインストールします:
$ sudo apt-get install -y python3 python3-pip python3-venv git wget libgl1 libglib2.0-0
python3 3.12.3-0ubuntu2.1
python3-pip 24.0+dfsg-1ubuntu1.3
python3-venv 3.12.3-0ubuntu2.1
… 完了
Ubuntu 24.04 では Python 3.12.3・pip 24.0 が標準で入ります(実測)。libgl1 と libglib2.0-0 は OpenCV が依存するライブラリで、入っていないとWebUI起動時にエラーが出ます。
手順2:AUTOMATIC1111 をクローンする
Cloning into ‘stable-diffusion-webui’…
remote: Enumerating objects: …
Resolving deltas: 100% (xxxx/xxxx), done.
$ cd stable-diffusion-webui
手順3:モデルファイルを配置する
Stable Diffusion モデル(.safetensors または .ckpt ファイル)を models/Stable-diffusion/ ディレクトリに配置します。HuggingFace から wget でダウンロードするか、手動で転送してください。
Put Stable Diffusion checkpoints here.txt v1-5-pruned-emaonly.safetensors
APIモードで起動する
WebUI を API モードで起動するには、--api フラグを追加します。
①webui.sh スクリプトで起動(推奨)
Running on local URL: http://127.0.0.1:7860
Startup time: 8.3s (prepare environment: 0.3s, import torch: 2.8s, …).
--nowebui を追加するとWebUIのフロントエンドを読み込まずにAPIサーバーのみ起動します。メモリを節約できるのでAPI専用用途では推奨です。
外部からアクセスできるようにするには --listen を追加します:
Running on local URL: http://0.0.0.0:7860
Startup time: 8.7s
注意:--listen を使う場合はファイアウォールを設定する
--listen を付けると 0.0.0.0:7860 で全インターフェースにバインドされます。VPS上で使う場合は ufw allow from 信頼IPのみ to any port 7860 で制限するか、--api-auth で認証を必須にしてください。
②起動確認
[
{
“title”: “v1-5-pruned-emaonly.safetensors [6ce0161689]”,
“model_name”: “v1-5-pruned-emaonly”,
“hash”: “6ce0161689”,
“sha256”: “cc6cb2…”,
“filename”: “…”,
…
モデル一覧が JSON で返ってきたら API は正常に動いています。Swagger UI は http://localhost:7860/docs でアクセスできます。
APIクライアント環境のセットアップ
API を呼び出すクライアント側の Python 環境をセットアップします。仮想環境を使ってシステムの Python 環境を汚染しないようにします。

$ source ~/sd_api_env/bin/activate
(sd_api_env) $
(sd_api_env) $ pip install requests Pillow webuiapi
Successfully installed requests-2.34.2 Pillow-12.2.0 webuiapi-0.9.17
Ubuntu 24.04 の実測では requests 2.34.2・Pillow 12.2.0・webuiapi 0.9.17 がインストールされました。これらは pip で最新版が取得されます。
txt2img API — テキストから画像生成
/sdapi/v1/txt2img エンドポイントに JSON ペイロードを POST するだけで画像が生成されます。レスポンスはBase64エンコードされた PNG 画像の配列です。

基本的な txt2img スクリプトは次の通りです:
import requests, base64, io
from PIL import Image
URL = “http://localhost:7860”
payload = {
“prompt”: “a beautiful mountain landscape, 4k, photorealistic”,
“negative_prompt”: “blurry, low quality, watermark”,
“steps”: 20,
“width”: 512,
“height”: 512,
“cfg_scale”: 7,
“sampler_name”: “DPM++ 2M Karras”,
}
r = requests.post(URL + “/sdapi/v1/txt2img”, json=payload, timeout=300)
r.raise_for_status()
img_b64 = r.json()[“images”][0]
img = Image.open(io.BytesIO(base64.b64decode(img_b64)))
img.save(“output.png”)
print(“Saved: output.png”)
$ python3 generate.py
Saved: output.png
主要なパラメータの説明:
prompt: 生成したい画像の説明。英語が基本ですが、LoRAなど日本語対応モデルなら日本語も可negative_prompt: 生成したくない要素。"blurry, low quality"などを入れると品質が上がりやすいsteps: サンプリングステップ数。多いほど品質は上がるが時間がかかる(目安: 20〜30)cfg_scale: プロンプトへの従順度(1〜30、高いほどプロンプト重視)。7〜10 が一般的sampler_name: サンプリングアルゴリズム。"DPM++ 2M Karras"が品質・速度バランスが良い
webuiapi ライブラリを使う
webuiapi は AUTOMATIC1111 API 専用の Python クライアントライブラリです。requests で直接 JSON を組み立てるより簡潔に書けます。

import webuiapi
# API サーバーに接続(デフォルトは localhost:7860)
api = webuiapi.WebUIApi(host=”127.0.0.1″, port=7860)
# txt2img
result = api.txt2img(
prompt=”a futuristic city at night, cyberpunk, neon lights”,
negative_prompt=”blurry, watermark”,
steps=20,
width=512,
height=512,
cfg_scale=7,
sampler_name=”DPM++ 2M Karras”,
)
result.image.save(“cyberpunk.png”)
print(“Saved: cyberpunk.png”)
# モデル一覧を取得
models = api.get_sd_models()
for m in models:
print(m[“model_name”])
$ python3 generate_webuiapi.py
Saved: cyberpunk.png
v1-5-pruned-emaonly
result.image は Pillow の Image オブジェクトなので、そのまま .save()・.resize() などの Pillow 操作が使えます。Base64 のデコードを自分で書く必要がないのが便利なポイントです。
img2img API の使い方
img2img は既存の画像を元に新しい画像を生成します。webuiapi を使うと次のように書けます:
import webuiapi
from PIL import Image
api = webuiapi.WebUIApi()
init_image = Image.open(“input.png”)
result = api.img2img(
images=[init_image],
prompt=”oil painting style, detailed brushwork”,
denoising_strength=0.65, # 0=元画像まま、1=完全再生成
steps=25,
cfg_scale=7,
)
result.image.save(“output_img2img.png”)
denoising_strength は 0〜1 の値で、元画像をどれだけ変化させるかを制御します。0.4〜0.7 程度が「雰囲気を残しつつスタイルを変える」バランスとして使われやすい値です。
主要エンドポイント一覧

AUTOMATIC1111 が --api で公開する主要なエンドポイントをまとめます。全エンドポイントは http://localhost:7860/docs の Swagger UI で確認できます。
| エンドポイント | 用途 | ポイント |
|---|---|---|
/sdapi/v1/txt2img |
テキストから画像生成 | 最も使う。LoRA・ControlNet 指定も可 |
/sdapi/v1/img2img |
画像から画像生成 | denoising_strength で変化量を制御 |
/sdapi/v1/sd-models |
利用可能モデル一覧 | GET のみ。プログラムでモデル切替に使う |
/sdapi/v1/options |
設定の取得・変更 | POST で sd_model_checkpoint を変えるとモデル切替 |
/sdapi/v1/progress |
生成進捗確認 | ポーリングして進捗バーに使う |
/sdapi/v1/interrupt |
生成の中断 | POST(ボディなし)で即座に中断 |
/sdapi/v1/samplers |
利用可能サンプラー | 動的に取得してUI選択肢に使う |
モデルをプログラムから切り替える
import requests
URL = ‘http://localhost:7860’
# 利用可能モデル一覧
models = requests.get(URL + ‘/sdapi/v1/sd-models’).json()
print(‘Available models:’)
for m in models:
print(‘ -‘, m[‘title’])
# モデルを切り替える
payload = {‘sd_model_checkpoint’: ‘v1-5-pruned-emaonly.safetensors [6ce0161689]’}
r = requests.post(URL + ‘/sdapi/v1/options’, json=payload)
print(‘Model switched:’, r.status_code)
“
Available models:
– v1-5-pruned-emaonly.safetensors [6ce0161689]
Model switched: 200
API認証の設定
VPS 上で動かして外部からアクセスを許可する場合、--api-auth で Basic 認証を設定することを強く推奨します。
Running on local URL: http://0.0.0.0:7860
クライアント側では requests の Basic 認証引数を使います:
import requests
URL = ‘http://192.168.1.100:7860’
AUTH = (‘myuser’, ‘mypassword123’)
r = requests.get(URL + ‘/sdapi/v1/sd-models’, auth=AUTH)
print(r.status_code, len(r.json()), ‘models’)
“
200 1 models
webuiapi の場合は set_auth(user, password) メソッドを使います:
import webuiapi
api = webuiapi.WebUIApi(host=’192.168.1.100′, port=7860)
api.set_auth(‘myuser’, ‘mypassword123’)
models = api.get_sd_models()
print(‘Connected. Models:’, [m[‘model_name’] for m in models])
“
Connected. Models: [‘v1-5-pruned-emaonly’]
APIサーバーの動作環境確認

API サーバーのホストマシンに必要なCPU性能を sysbench で計測しました。Ubuntu 24.04 の Docker コンテナ(5コア)で 2スレッド × 3回 実行した結果:
- 平均: 13,929 events/sec(最小 12,475 〜 最大 14,804)
このCPUスコアは画像生成速度には直接関係しませんが(GPUが主役のため)、API サーバーの前処理・後処理・JSON レスポンスの組み立てには CPU が使われます。VPS 選びの参考にしてください。
よくあるエラーと解決策
①「Connection refused」が出る
原因: AUTOMATIC1111 がまだ起動していない、または --api フラグなしで起動している。
解決: WebUI のターミナルに Running on local URL: http://127.0.0.1:7860 が表示されているか確認。--api を付けて再起動。
②401 Unauthorized が返る
原因: --api-auth が設定されているが、クライアントで認証情報を渡していない。
解決: requests.post(..., auth=("user", "pass")) または api.set_auth("user", "pass") を追加。
③ModuleNotFoundError: No module named 'webuiapi'
原因: venv を有効化せずに Python を実行している。
解決: source ~/sd_api_env/bin/activate を実行してから再試行。
④生成に時間がかかりすぎてタイムアウトする
timeout は必ず長めに設定する
CPU モードや高解像度(1024×1024 以上)では生成に数分かかることがあります。requests.post(..., timeout=600) のように十分な timeout を設定してください。デフォルトは無制限ですが、プロキシやロードバランサーが前にいる場合は切れます。
まとめ
AUTOMATIC1111 の API を Ubuntu 24.04 で使う手順をまとめます:
./webui.sh --api --nowebuiでAPIサーバーとして起動(GUIなしで軽量動作)- クライアント環境は
python3 -m venv+pip install requests Pillow webuiapiの3パッケージのみ(requests 2.34.2・Pillow 12.2.0・webuiapi 0.9.17 を実測) /sdapi/v1/txt2imgに JSON POST → Base64 画像を Pillow でデコードして保存webuiapiを使うとresult.image.save("out.png")とシンプルに書ける- VPS に公開するなら
--api-auth+ UFW で保護する - 全エンドポイントは
http://localhost:7860/docsの Swagger UI で確認できる
Stable Diffusion の画像生成をスクリプトから自動化したい場面(バッチ処理・Webアプリへの組み込み・CI/CDでの画像確認など)に活用してみてください。
GPU対応VPSに乗り換えを検討するなら
- Vultr Cloud GPU — NVIDIA A100/H100 搭載、時間課金で始めやすい
- DigitalOcean GPU Droplets — シンプルな料金体系
- Linode GPU — AMD EPYC + NVIDIA RTX



コメント