Stable Diffusion プロンプト生成 LLM:Python 環境構築
単語を完全で構造化されたプロンプトに展開する Stable Diffusion プロンプト生成 LLM を求めるなら、テキストモデルと約 30 行の Python だけで十分です。モデルはテキストとしてプロンプトを生成し、画像はレンダリングしないため、結果を SDXL や使用している他の画像ツールに通す必要があります。


主要ポイント
- LLM はテキストのみを生成します。その出力を独自の SDXL、ComfyUI、または Automatic1111 環境にフィードしてください。
- JSON モードは正規表現なしで解析できる正のプロンプトと負のプロンプトを返します。
- 1回の拡張で$0.0001未満のコストなので、1,000件のプロンプトで約$0.09です。
- プロンプトは簡潔に保つ:SDXLのテキストエンコーダーは各チャンクの最初の77トークンのみを読み取ります。
LLM が行うことと行わないこと
画像モデルは密度が高く具体的なプロンプト(被写体、設定、レンズ、照明、メディア、ムード、回避すべき事項のリスト)に良く反応します。多くの人は 3 語を入力して平坦な結果しか得られません。LLM は短いアイデアを受け取り、一貫した形式で長いバージョンを書くことで、このギャップを埋めます。
役割分担を明確にしてください。このサービスは text-only API です。画像、音声、ビデオは生成せず、埋め込みやファインチューニングもありません。画像パイプラインの前に位置し、そのパイプラインが読み取る指示を生成します。これは独立したプロバイダからの 1 つのオープンウェイトモデルを提供する OpenAI 互換のエンドポイントであり、画像モデルベンダーの製品ではありません。
このモデルは法的な成人利用に対してコンテンツ拒否なしで回答するように調整されており、ホラー、フィクションの暴力、大人向けテーマなどの被写体が他でブロックされがちなアーティストやゲーム開発者にとって重要です。未成年者を含む性的コンテンツはハードリミットであり、決して生成されません。
ステップ 1:キーを取得して 1 回の呼び出しをテスト
Googleまたはメールアドレスとパスワードでサインアップし、APIキーページを開きます。ワンクリックのトライアルで$0.50のクレジットが追加され、カード不要で7日間有効です。これはコストセクションで示されているように、数千回のプロンプト拡張に十分です。
curl ですべてが正常に動作するか確認してください:
curl https://api.sdxlapi.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "You write Stable Diffusion prompts."},
{"role": "user", "content": "lighthouse in a storm"}
]
}'
ベース URL とキーを変更すれば、任意の OpenAI SDK が動作します。詳細は ドキュメントをご覧ください。
ステップ 2:安定した出力を得るためのシステムプロンプト
システムプロンプトが品質の源です。ターゲット形式、要素の順序、長さの制限、除外する内容をモデルに指示します。出発点としてよく機能するバージョンは以下の通りです:
短い画像のアイデアをSDXL用のプロンプトに変換します。40〜60語のポジティブプロンプトを1つ作成します:最初に主題、次に設定、構図、照明、メディアまたはスタイル、そしてムードを書きます。カンマ区切りのフレーズを使用し、完全な文は避けてください。次に、最大15の短いフレーズでネガティブプロンプトを作成します。画像にテキスト、透かし、キャプションを追加しないでください。"prompt"と"negative"というキーを持つJSONを返してください。
単語数制限が重要です。SDXL の CLIP テキストエンコーダーは 77 トークンごとのチャンクでプロンプトを読み取り、それ以降は切り捨てられるか、UI のチャンキング機能で処理されます。40〜60 語を目安にすることで、重要な詳細を先頭に配置し、ほとんどのプロンプトを 1 つのチャンク内に収めることができます。
スタイルを一貫させつつ、同じアイデアの 2 回目の実行で差異を生むために、低〜中程度の温度(0.7〜0.9)を使用してください。テストに同じ出力が必要な場合は、固定の seedを渡してください。
ステップ 3:Python スクリプト
このスクリプトはリストからアイデアを読み取り、JSON を要求してプロンプトペアを出力します。ベース URL を変更した公式の OpenAI Python パッケージを使用します。
import json
from openai import OpenAI
client = OpenAI(base_url="https://api.sdxlapi.com/v1", api_key="YOUR_KEY")
SYSTEM = (
"You turn short image ideas into prompts for SDXL. Write one positive "
"prompt of 40 to 60 words: subject, setting, composition, lighting, "
"medium or style, mood, as comma-separated phrases. Then a negative "
"prompt of up to 15 short phrases. Return JSON with keys "
"'prompt' and 'negative'."
)
def expand(idea: str) -> dict:
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": SYSTEM},
{"role": "user", "content": idea},
],
response_format={"type": "json_object"},
temperature=0.8,
max_tokens=400,
)
return json.loads(resp.choices[0].message.content)
for idea in ["lighthouse in a storm", "abandoned greenhouse at dawn"]:
result = expand(idea)
print(idea, "->", result["prompt"])
print("negative:", result["negative"], "\n")
JSONモード(response_formatにjson_objectを指定)により、応答は構造的に正しく解析できます。ただし、max_tokensで応答が途中で切れる可能性があるため、本番環境ではjson.loadsをtryブロックで囲み、失敗した場合は1回再試行してください。
ステップ 4:画像ツールにプロンプトを送信
出力はプレーンな文字列なので、任意のフロントエンドがそれを受け取ることができます。ローカルの Automatic1111 や ComfyUI インストールでは、2 つのフィールドをその API にポストしてください。アイデアの CSV をループするスクリプトでは、結果をファイルに書き込み、バッチとしてキューに入れます。
- アイデア、プロンプト、ネガティブプロンプトを一緒に保存し、良い画像がどの指示によって生成されたかを追跡できるようにしてください。
- 一貫した外観のシリーズを望む場合、ユーザーメッセージに独自のリスト("cinematic photograph"、"ink illustration")からのスタイル行をフィールドとして追加してください。
- 機能したプロンプトの短いライブラリを維持し、システムプロンプトにそれらのうち2〜3つをfew-shot例として提供してください。few-shot例は、形容詞よりもスタイルを一貫させるのに役立ちます。
ロールプレイやゲームプロジェクトでは、同じパターンでストーリーのシーンを描写できます。LLM は最後の数段落を視覚的な説明に変換します。テキストベースのロールプレイシナリオに関する記事がストーリー側をカバーしています。
一般的な問題と修正
ほぼすべてのプロンプト生成プロジェクトでいくつかの問題が発生します。
モデルがコメントを追加する
「こちらがプロンプトです」で始まる応答はパイプラインを壊します。JSONモードはこの問題のほとんどを解消します。プレーンテキストで作業する場合は、「前置きなしでプロンプトのみを出力してください」と指定し、決して表示したくない行のストップシーケンスを追加してください。
すべてのプロンプトが同じように見える
低い温度と厳格なテンプレートは均一な結果をもたらします。温度を 1.0 に上げ、渡すスタイル行を変化させるか、3 つの代替案を要求して 1 つを選択してください。ペナルティ(frequency_penalty、presence_penalty)は通過し、繰り返しのフレーズを壊すことができます。
プロンプトが画像モデルには長すぎる
システムプロンプトに単語数のハードリミットを設定し、コードで長さを確認してください。手動で切り捨てると、通常は最も重要度の低い最後の詳細が失われますが、最初からモデルに短く書かせる方が良いでしょう。
429 に到達する
1分あたりのリクエスト数または同時実行数が多すぎます。数秒間待機して再試行してください。応答にRetry-After: 5が含まれる場合があります。4〜8ワーカーの小さなスレッドプールを持つバッチは、フルキーの制限内に収まります。
1,000 件のプロンプトのコスト
価格は入力トークン 1M あたり $0.15、出力トークン 1M あたり $0.50 です。典型的な展開では、約 150 トークンのシステムプロンプトと 15 トークンのアイデアを送信し(合計 170 トークンの入力)、約 120 トークンの JSON を受信します。
- 入力:170 × $0.15 / 1M = $0.0000255。
- 出力:120 × $0.50 / 1M = $0.00006。
- プロンプトあたり:約 $0.0000855。
- 1,000 件のプロンプト:約 $0.0855、または $0.09。
長いシステムプロンプトやfew-shot例の場合は切り上げてください。例に600トークンを追加すると、入力は770トークンになり、1,000件のプロンプトの入力コストは約$0.1155、出力コストは$0.06で、合計約$0.18になります。いずれにせよ、$0.50のトライアルで数千回の拡張がカバーできます。失敗したリクエストは課金されず、前払いクレジットは期限切れになりません。チャージ($20〜$500、暗号資産)については価格ページをご覧ください。
その他のガイド
質問と回答
LLMはStable Diffusionの画像そのものを生成できますか?
いいえ。テキストのみを生成します。そのプロンプトをSDXL、ComfyUI、Automatic1111、または実行中の他の画像ツールに渡します。
SDXLのプロンプトはどのくらい長くすればよいですか?
テキストエンコーダーは77トークンごとに読み取るため、40〜60語程度が適しており、重要な詳細は先頭に配置します。
大人向けやダークなテーマを拒否しますか?
このモデルは、法的な成人利用に対してコンテンツ拒否なしで応答するように調整されています。未成年者に関連するコンテンツは決して生成されません。
どのモデル名を送信すればよいですか?
モデルIDにuncensoredを指定し、Base URL https://api.sdxlapi.com/v1とAPI キーをBearerトークンとして使用します。
複数のプロンプトを同時に実行できますか?
完全なキーでは同時8リクエスト、1分あたり300リクエストまで許可されます。試用キーでは同時2リクエスト、1分あたり60リクエストです。429応答は、待機して再試行することを意味します。
キーはフォーム 1 つで手に入ります
アカウントを作成し、キーをコピーし、ベースURLを変更します。これでセットアップは完了です。