SDXL系のプロンプトを一から組み立てる — 何個まで書けて、なぜ順序が効くのか
目次(9 項目)
PixAI の公式ドキュメントにある「プロンプトの基本」は、自然言語で1〜2文書くやり方を教えています。ところがこれは Tsubaki 系(DiT)向けの書き方で、Haruka v2 や Hoshino v2 のような SDXL 系には噛み合いません。公式自身も別のページで、アーキテクチャによってプロンプトの形式が違うと書いています。
そこで、SDXL 系のプロンプトの書き方をモデルの仕組みから組み立て直します。決めることは3つです。何で書くか・何個まで書けるか・どう並べるか。
何で書くか:タグ
SDXL 系のアニメモデル(Illustrious、NoobAI、Animagine、Pony、およびそれらの派生)は、Danbooru というイラスト投稿サイトのタグ体系で学習されています。モデルカードにそう明記されています。
学習時に画像へ付いていたのが 1girl long hair looking at viewer といったタグなので、モデルが確実に意味を知っているのはそのタグです。「銀髪の少女が微笑んでいる」と文章で渡しても、モデルは学習した語に置き換えて理解し直すことになり、間に一段挟まるぶん狙いがぼやけます。
なぜ Danbooru なのかは別の記事にまとめました。
Danbooru 系のサイトでは、人数を 1girl 2girls 1boy のように数で書く決まりになっています。「女の子」ではなく「女の子が1人」。
検索のための工夫です。「女の子が2人いる絵」を探したいとき、girl としか付いていないと絞り込めません。最初から人数を分けておけば、タグひとつで狙った構図に辿り着ける。
この「検索のために厳密に付ける」文化が、そのまま画像生成の語彙になりました。プロンプトの先頭が 1girl, solo から始まりがちなのは、もともと検索用に作られた語順の名残でもあります。
何個まで書けるか:本当の上限は「個数」ではない
PixAI 公式のチートシートは「タグが20個を超えると干渉する」としています。ただ、20という数字の根拠は書かれていません。モデル側の仕組みを見ると、上限は個数ではありませんでした。
SDXL はプロンプトを CLIP というテキストエンコーダで数値に変換します。この CLIP が一度に読める長さが 77トークンです。うち2つは開始と終了の印なので、実質75トークンが中身に使える分になります。
トークンは単語でもタグでもありません。 短い語は1トークン、長い語は分割されて2つ3つになります。区切りのコンマも消費します。つまり同じ20個でも、消費するトークン数はタグによって変わります。
CLIP が一度に読めるのが77トークン、というのは画像生成のために決められた数字ではありません。CLIP はもともと「画像と説明文を結びつける」ために作られたモデルで、その学習に使われたのがネット上の画像とキャプションの組でした。
キャプションは短いものです。写真に添えられた1行の説明に、100語も200語も要りません。77という長さは、その用途には十分だったわけです。
その CLIP が画像生成に転用され、いまは何十個もタグを並べる使われ方をしている。上限が窮屈に感じるのは、もともと想定されていない使い方をしているからとも言えます。
75トークンを超えるとどうなるか
一般的な実装では、75トークンごとに区切って別々にエンコードし、結果をつなげます。
ここが重要です。区切られた前後は、別の文脈として処理されます。「20個を超えると干渉する」という現象の正体は、おそらくこれです。個数の問題ではなく、境界をまたいだ語の関係が弱くなる問題です。
⚠️ PixAI は「プロンプトは最大4096文字」としていますが、これは入力欄の上限であって、モデルが一度に読む単位ではありません。長く書けることと、長く読まれることは別です。
だから実務的な結論は「20個まで」ではなく、「短く保つ」です。 数えるべきは個数ではなく、モデルに一度に読ませたい語の量。
⚠️ ただし 20 という数字が75トークンの境界を指しているわけでもありません。 数えると20個は50トークン台で、境界にはまだ距離があります(下の「まだ分かっていないこと」に計算を置きました)。
75トークンという枠は、SDXL が CLIP を使っていることの帰結です。テキストエンコーダを替えれば枠も変わります。
実例があります。アニメ系の NovelAI は 2025年2月の V4 で、こう書いています。
we had to extend the prompt context size to 512 tokens and replaced our CLIP text encoder with the T5 text encoder
75 が 512 になり、7倍近く広がりました。
⚠️ 注目すべきは、V4 が U-Net のままだということです。 同じ記事は「our improved U-Net architecture」と書いていて、モデルの骨格は SDXL と同じ系統のまま、テキストエンコーダだけを替えています。つまり「長く書けない」のはアーキテクチャの問題ではなく、CLIP を使うか使わないかの問題です。
だからこの記事の「75トークン」も「20個」も、SDXL 系を使うかぎり有効な制約であって、画像生成そのものの上限ではありません。2026年9月の時点では、新しい世代のモデル(PixAI なら Tsubaki 系)は自然文を前提にしていて、この枠の外にいます。
どう並べるか:前が強いのには理由がある
大事なタグを前に置く。この並べ方には仕組みの裏づけがあります。
CLIP のテキストエンコーダは causal attention(因果マスク)を使っています。これは「後ろのトークンは前を見られるが、前は後ろを見られない」という制約です。
その結果、層を重ねるほど、早い位置のトークンの影響が蓄積していきます。前に置いた語ほど、最終的にモデルへ渡される表現を強く左右する。これが「前が強い」の中身です。
したがって並べ方は、確定させたいものから順になります。
品質タグ → 人数・主体 → キャラの永続的な特徴 → 表情・視線
→ ポーズ → 衣装 → 構図・カメラ → 背景・ライティング → 画風
人数と主体を先に置くのは、それが決まらないと他のタグがどこに掛かるか曖昧になるからです。髪色や目の色のような変えたくない特徴を早めに置くのは、キャラを固定したいときに効きます。逆に画風や背景は、多少弱くても破綻しません。
具体例です。
masterpiece, best quality, amazing quality,
1girl, solo,
long hair, grey hair, blue eyes,
smile, looking at viewer,
standing,
school uniform,
upper body,
simple background,
anime coloring,
very aesthetic, newest
重み付けより先に、順序を整えてください。 (tag:1.2) のような記号は最後の手段で、前に動かすほうが確実です。
そのタグは実在するか
ここが最初の関門です。Danbooru に存在しない語は、学習されたタグとしての意味を持ちません。
定型としてよく貼られる語を Danbooru の API で1件ずつ確認したところ、こうなりました。
| 語 | 実態 |
|---|---|
silver hair |
項目はあるが非推奨で0件。Danbooru 自身が「grey hair か white hair を使え」としている(grey hair は102万件) |
hands on hips |
項目はあるが0件。使われているのは hand on own hip(22万件) |
mutated hands |
タグ自体が存在しない |
poorly drawn hands |
タグ自体が存在しない |
ugly text error extra limbs |
項目はあるが付与件数0件 |
⚠️ 「存在しない」と「0件」は別のことです。 mutated hands は綴りとして無く、silver hair は項目として登録されているのに誰も付けられない(非推奨)。どちらも学習データには現れないので効きませんが、silver hair のように公式が代替を指定している場合はそれに従えます。
「銀髪」を出したくて silver hair と書いても、学習されたタグとしては効きません。ただし絵が変わらないという意味ではありません。 0件のタグを足しても画像は動きます(このサイトでも medium shot で確認しました → 構図の記事)。動いたことを「効いた」と読まないのが要点で、狙って出したいなら grey hair を使います。
件数が効きの強さの目安になる
実在するタグでも、付与件数によって効きが大きく違います。
| タグ | 件数 |
|---|---|
long hair |
617万 |
looking at viewer |
489万 |
smile |
415万 |
simple background |
284万 |
bad anatomy |
1.8万 |
bad hands |
3,357 |
extra digits |
530 |
username |
94 |
⚠️ ただし「件数が多いほど強く効く」ではありません。 このサイトの実測では、383件の golden hour が 39,287件の sunset と同じくらい効きました(構図・ライティングの記事)。件数は「効かない語を弾く」フィルタとして使えますが、「どれだけ効くか」の尺度にはなりません。
そのうえで、0件は確実に効きません(学習データに現れないため)。
⚠️ ただし bad hands(3,357件)でネガティブに入れても手が直らないのは、件数の少なさが主な理由ではありません。Hand1000 の論文がこう報告しています。
the model struggles to associate this with corresponding hand images, indicating its inability to accurately comprehend text containing hand-related information
手に関する記述そのものを、モデルが正確に理解できていない。 つまり語で手を指示する方式が根本的に不利なので、綴りを直しても語を増やしても届きません(破綻の直し方)。件数の話とは別の壁があります。
このサイトのプロンプトビルダーには、各タグに件数を表示してあります。
品質タグとネガティブは別の話
同じプロンプトでも、品質タグとネガティブは仕組みがまったく違います。長くなるので別の記事にしました。
- 品質タグの正体 —
masterpieceは品質を上げる語ではない - ネガティブプロンプト — 定型に3種類が混ざっている
やりがちな失敗
- 自然文で書く — 公式の入門どおりに1〜2文で書いてしまう。SDXL 系ではタグにする
- 存在しないタグを使う — 確認せずに定型をコピーしている
- 長く書きすぎる — 75トークンで区切られ、前後が別の文脈になる
- 矛盾するタグを同時に入れる —
close-upとfull bodyなど - 順序を考えずに並べる — 前ほど強いので、確定させたいものから置く
- 重み付けに頼る — 先に順序を整えるほうが確実
実際に数えました(2026年9月10日)
「20個は75にぶつかる数字ではない」という見立てを、CLIP 公式リポジトリのトークナイザ(BPE)をそのまま動かして確かめました。推測ではなく実測です。
- 上の例文(17タグ): 語数29+区切りのコンマ16で下限45トークン。実測は46トークン(
1girlが1とgirlの2トークンに割れるため、下限をわずかに超えます) - 20個: このビルダーの語彙178タグの実測平均は1タグ1.50語(⚠️ 以前の版で使っていた「1.63語」は、ビルダー改修で語彙が増えたあとの実態と合っていませんでした)。この語彙から20個をランダムに10回選んで実測すると、平均52.8トークン、最大でも58トークンでした
- ⚠️
sidelocks→sidel+ocks、thighhighs→thigh+highs、mutated→mut+atedのように、Danbooru 特有の複合語や過去形はよく分割されます。一般的な英単語(solosmilesunsetなど)は1トークンで済みます
結論は変わりません。20個は50〜58トークンあたりで、75にはまだ距離があります。
まだ分かっていないこと
- PixAI が75トークン超をどう扱っているか。一般的な実装では区切って連結しますが、PixAI の実装は公開されていません
- causal attention による前方優位が、実際どれくらいの差になるか。仕組みとしては説明できますが、同じタグを前後に入れ替えた比較はしていません
出典
- プロンプトの仕組み(PixAI公式) — アーキテクチャごとにプロンプト形式が違う、最大4096文字
- プロンプトの基本(PixAI公式) — 自然言語の型(DiT 向け)
- プロンプトチートシート(PixAI公式) — 「20個超は干渉」
- Overcoming the 77 token limit in diffusers(GitHub Issue) — 77トークン制限と、区切って連結する扱い
- openai/CLIP の
simple_tokenizer.py(GitHub) — 公式の BPE 実装。このサイトで実際に動かして17タグ・20タグのトークン数を実測(2026年9月10日) - NovelAI Diffusion V4 の発表(NovelAI 公式・2025年2月28日) — CLIP を T5 に替えてコンテキストを512トークンに拡張したこと、U-Net のままエンコーダだけを替えていること
- How can I input a prompt that is longer than 77 tokens?(SDXL 公式リポジトリの議論) — SDXL でも同じ制限
- Artist style becomes inconsistent with longer prompts(HuggingFace の議論) — CLIP の causal attention と前方優位
- Illustrious-XL モデルカード / NoobAI-XL モデルカード — Danbooru タグ体系での学習
- Danbooru tags API — タグの実在と件数(2026-09-03 取得、2026年9月7日に再検算)
- silver hair(Danbooru wiki) — 非推奨タグで「
grey hairかwhite hairを使え」と案内されていること
2026年9月4日確認、9月7日に件数と実在判定を引き直し。9月10日にトークン数を実測し直した(ビルダー改修で平均語数が変わっていたため「1.63語」を「1.50語」に訂正。結論は変わらず)。