問題の概要:プロンプトウェイト構文のエラーと意図しない生成結果
Stable Diffusionで画像生成を行う際、プロンプトに特定の要素を強調したり弱めたりするためにプロンプトウェイト構文を使用します。しかし、この構文の誤用により、以下のような問題が頻繁に発生します。
- エラーメッセージ: `Error: Unmatched parentheses in prompt.` や `Error: Invalid prompt syntax.` が表示される
- 意図した強調・弱化が反映されず、期待通りの画像が生成できない
- ウェイトの数値が極端すぎて画像が崩壊する(ノイズや意味不明な形状になる)
- 複数のウェイトを組み合わせた際に、全体のバランスが取れない
例えば、`(masterpiece, best quality), 1girl, (red hair:1.3), [green eyes]` のようなプロンプトを入力した際にエラーが出たり、髪の色が思った以上に強調されすぎたりする問題です。本記事では、これらの構文エラーを解決し、意図を正確にモデルに伝える方法を解説します。
原因の解説:3つの主要な構文ルールとその誤解
問題の根本原因は、Stable Diffusionのプロンプトパーサーが解釈する3つの主要なウェイト構文を正しく理解していないこと、またはそれらの組み合わせルールを間違えていることにあります。
原因1: 丸括弧 ( ) と角括弧 [ ] の役割の混同
最も一般的な誤りは、強調の `( )` と弱化の `[ ]` を逆に使ってしまうことです。`(cat)` は「猫」を強調(通常は約1.1倍)しますが、`[cat]` は「猫」の重要性を弱めます(約0.9倍)。この基本を間違えると、生成結果が真逆の方向に進んでしまいます。
原因2: コロン `:` を使った数値指定の構文エラー
具体的な倍率を数値で指定する `(subject:1.5)` という構文では、コロンの前後にスペースを入れてはいけません。`(subject: 1.5)` や `(subject :1.5)` は構文エラーや予期せぬ解釈の原因となります。また、数値の範囲を無視した極端な値(例: `(cat:50.0)`)を使用すると、画像が完全に崩壊するリスクが高まります。
原因3: 括弧のネストと閉じ忘れ
複雑なプロンプトを書く際に、括弧を多重にネストしたり、閉じ括弧を忘れたりすることがあります。例えば、`((masterpiece, best quality), 1girl` のように閉じ括弧が足りないプロンプトは、パーサーエラーを引き起こします。Web UI(AUTOMATIC1111やComfyUI)によってはエラーメッセージを表示し、場合によっては生成プロセスが開始されません。
解決方法:ステップバイステップで学ぶ正しい構文
ステップ1: 基本構文のマスター(単一要素の強調・弱化)
まずは基本となる3つの構文を正確に覚えましょう。スペースの有無に注意してください。
正しい例:
dog // 基本の重み (1.0)
(dog) // 強調 (通常 ~1.1)
((dog)) // さらに強調 (~1.21)
[dog] // 弱化 (~0.9)
[[dog]] // さらに弱化 (~0.81)
(dog:1.35) // 数値を指定して1.35倍に強調
(dog:0.75) // 1.0倍未満で弱化としても機能する
誤った例(エラーの原因):
( dog ) // 括弧内に余計なスペース(動作する場合もあるが非推奨)
(dog: 1.35) // コロンの後にスペースあり
(dog :1.35) // コロンの前にスペースあり
(dog:1. 35) // 数値の中にスペース
ステップ2: 複数要素への適用とカンマ区切り
複数の単語やフレーズにまとめてウェイトを適用する場合は、カンマで区切った全体を括弧で囲みます。
正しい例:
(masterpiece, best quality, detailed) // 3つの要素をまとめて強調
[lowres, bad anatomy, blurry] // 3つのネガティブプロンプトをまとめて弱化(=出現抑制)
(masterpiece, best quality:1.2), (1girl:1.1) // グループごとに異なる重みを設定
重要な注意点: `(masterpiece:1.2, best quality:1.2)` という書き方はできません。コロン構文は直前に来る一つの要素(単語またはフレーズ)にのみ適用されます。複数要素に個別の数値を指定したい場合は、`(masterpiece:1.2), (best quality:1.2)` と分けて書く必要があります。
ステップ3: 構文エラーのデバッグと検証
プロンプトが複雑化し、エラーが発生した場合のデバッグ手順です。
- 括弧の対応チェック: 開き括弧と閉じ括弧の数が一致しているか数える。テキストエディタの括弧ハイライト機能を利用するのが効果的です。
- スペースの削除: コロン `:` の前後、括弧と単語の間の不要なスペースを削除する。
- シンプル化: 一度にすべてを調整しようとせず、プロンプトをシンプルな状態に戻し、構文を一つずつ追加しながら動作を確認する。
- Web UIの機能活用: AUTOMATIC1111の「Extra networks」にある「Prompt matrix」や「X/Y/Z plot」を使って、異なるウェイト値が生成結果に与える影響を視覚的に比較・検証できます。
コード例・コマンド例:実践的なプロンプト構築
以下に、実際の画像生成で使える、正しい構文を用いたプロンプトの完全な例を示します。
例1: キャラクター生成(バランス調整)
プロンプト(Positive):
(masterpiece, best quality, ultra-detailed), 1girl, solo, (long silver hair:1.3),
(blue eyes:1.2), (elegant dress:1.15), serene expression, in a fantasy castle garden
ネガティブプロンプト:
(lowres, bad anatomy, worst quality, low quality:1.4), [blurry, jpeg artifacts],
extra fingers, fewer fingers, (bad hands:1.5)
この例では、髪、目、ドレスを段階的に強調し、ネガティブプロンプトでは「lowres」などのグループを強く抑制しつつ、「blurry」は弱めに抑制しています。
例2: 構文エラーを含むプロンプトとその修正
【エラーが発生する例】
(masterpiece, best quality: 1.3), a cat wearing a (hat:1.4 and glasses:1.2), on a sofa
【エラーの内容】
1. `best quality: 1.3` -> コロンの後にスペースがある(グループ全体への数値指定は不可)。
2. `(hat:1.4 and glasses:1.2)` -> 一つの括弧内で複数要素に個別の数値指定はできない。`and`はプロンプトではカンマと解釈されず、構文が崩れる。
【修正した正しいプロンプト】
(masterpiece:1.3), (best quality:1.3), a cat wearing a (hat:1.4), (glasses:1.2), on a sofa
まとめ・補足情報
Stable Diffusionのプロンプトウェイト構文は、生成画像のクオリティと内容を精密にコントロールするための強力なツールです。基本は `(強調)`、`[弱化]`、`(要素:数値)` の3つであり、これらを組み合わせることで表現の幅が大きく広がります。トラブルを避けるためには、括弧の対応を常に確認すること、コロンの前後にスペースを入れないこと、そして数値は1.0から1.5程度の範囲で徐々に調整することが鉄則です。
補足情報:
- ウェイトの効果は使用するモデル(Checkpoint)によって感度が異なります。新しいモデルを使う際は、簡単なプロンプトで感度テストを行うことをお勧めします。
- 一部の高度なWeb UIやスクリプトでは、`( )` と `[ ]` 以外の独自構文(例: `{ }` によるマルチプライヤー)をサポートしている場合があります。マニュアルを確認してください。
- プロンプトの長さと複雑さが増すと、全体の意味的コヒーレンスが失われる「プロンプトの衝突」が起こる可能性があります。要素が多すぎると感じたら、優先順位の低いものは削除するかウェイトを下げることを検討しましょう。
正しい構文を身につけ、思った通りの創造性をStable Diffusionで発揮してください。