AUTOMATIC1111 API on Ubuntu — Stable Diffusionを外部APIとして利用

AI/MLツール

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 で認証を必須にする

目次

  1. AUTOMATIC1111 APIとは
  2. 前提環境と必要スペック
  3. AUTOMATIC1111 のインストール
  4. APIモードで起動する
  5. APIクライアント環境のセットアップ
  6. txt2img API — テキストから画像生成
  7. webuiapi ライブラリを使う
  8. 主要エンドポイント一覧
  9. API認証の設定
  10. よくあるエラーと解決策
  11. まとめ

AUTOMATIC1111 APIとは

AUTOMATIC1111 は Stable Diffusion の WebUI として有名ですが、起動オプション --api を付けると同時に HTTP REST API サーバーとしても機能します。

AUTOMATIC1111 Stable Diffusion WebUI 公式 GitHub リポジトリ
AUTOMATIC1111 Stable Diffusion WebUI 公式 GitHub リポジトリ

APIを使うメリットは主に3点です:

  • Pythonスクリプトから画像生成を完全自動化できる(プロンプト変更・バッチ処理・モデル切替なども)
  • 別サーバーやコンテナで動いているStable Diffusionにネットワーク越しにアクセスできる
  • WebUIを起動しないヘッドレス環境(VPS・Dockerコンテナ・CI/CD)でも使える

APIは FastAPI で実装されており、http://localhost:7860/docs でインタラクティブなSwagger UIも自動生成されます。

AUTOMATIC1111 API 公式 Wiki ページ
AUTOMATIC1111 API 公式 Wiki ページ

前提環境と必要スペック

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:依存パッケージをインストールする

Ubuntu 24.04 APIクライアント環境セットアップ(実測)
Ubuntu 24.04 APIクライアント環境セットアップ(実測)

次のコマンドで必要なシステムパッケージをインストールします:




ubuntu@server: ~
$ sudo apt-get update
$ 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 が標準で入ります(実測)。libgl1libglib2.0-0 は OpenCV が依存するライブラリで、入っていないとWebUI起動時にエラーが出ます。

手順2:AUTOMATIC1111 をクローンする




ubuntu@server: ~
$ git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
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 でダウンロードするか、手動で転送してください。




ubuntu@server: ~/stable-diffusion-webui
$ ls models/Stable-diffusion/
Put Stable Diffusion checkpoints here.txt v1-5-pruned-emaonly.safetensors

APIモードで起動する

WebUI を API モードで起動するには、--api フラグを追加します。

①webui.sh スクリプトで起動(推奨)




ubuntu@server: ~/stable-diffusion-webui
$ ./webui.sh –api –nowebui
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 を追加します:




ubuntu@server: ~/stable-diffusion-webui
$ ./webui.sh –api –nowebui –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 で認証を必須にしてください。

②起動確認




ubuntu@server: ~
$ curl -s http://localhost:7860/sdapi/v1/sd-models | python3 -m json.tool | head -10
[
{
“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 環境を汚染しないようにします。

AUTOMATIC1111 APIクライアント依存パッケージ(実測)
AUTOMATIC1111 APIクライアント依存パッケージ(実測)



ubuntu@client: ~
$ python3 -m venv ~/sd_api_env
$ 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.2Pillow 12.2.0webuiapi 0.9.17 がインストールされました。これらは pip で最新版が取得されます。

txt2img API — テキストから画像生成

/sdapi/v1/txt2img エンドポイントに JSON ペイロードを POST するだけで画像が生成されます。レスポンスはBase64エンコードされた PNG 画像の配列です。

Python requests で A1111 API を呼び出す(実測)
Python requests で A1111 API を呼び出す(実測)

基本的な txt2img スクリプトは次の通りです:




ubuntu@client: ~/sd_api_project (sd_api_env)
$ cat generate.py
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" が品質・速度バランスが良い
著者アイコン
著者アイコン

timeout=300 を忘れずに設定してください。CPUモードや高解像度だと生成に数分かかることがあり、デフォルトのタイムアウトでは途中で切れます。

webuiapi ライブラリを使う

webuiapi は AUTOMATIC1111 API 専用の Python クライアントライブラリです。requests で直接 JSON を組み立てるより簡潔に書けます。

webuiapi GitHub リポジトリ(Python APIクライアント)
webuiapi GitHub リポジトリ(Python APIクライアント)



ubuntu@client: ~/sd_api_project (sd_api_env)
$ cat generate_webuiapi.py
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 を使うと次のように書けます:




ubuntu@client: ~/sd_api_project (sd_api_env)
$ cat img2img_sample.py
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 エンドポイント一覧
AUTOMATIC1111 主要 API エンドポイント一覧

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選択肢に使う

モデルをプログラムから切り替える




ubuntu@client: ~ (sd_api_env)
$ python3 -c ”
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 認証を設定することを強く推奨します。




ubuntu@server: ~/stable-diffusion-webui
$ ./webui.sh –api –nowebui –listen –api-auth myuser:mypassword123
Running on local URL: http://0.0.0.0:7860

クライアント側では requests の Basic 認証引数を使います:




ubuntu@client: ~ (sd_api_env)
$ python3 -c ”
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) メソッドを使います:




ubuntu@client: ~ (sd_api_env)
$ python3 -c ”
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サーバーの動作環境確認

Ubuntu 24.04 sysbench CPU ベンチ(実測)
Ubuntu 24.04 sysbench CPU ベンチ(実測)

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」が出る




ubuntu@client: ~
requests.exceptions.ConnectionError: HTTPConnectionPool(host=’localhost’, port=7860): Max retries exceeded

原因: AUTOMATIC1111 がまだ起動していない、または --api フラグなしで起動している。

解決: WebUI のターミナルに Running on local URL: http://127.0.0.1:7860 が表示されているか確認。--api を付けて再起動。

②401 Unauthorized が返る




ubuntu@client: ~
requests.exceptions.HTTPError: 401 Client Error: 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

コメント

タイトルとURLをコピーしました