はじめに:脱がし癖との終わりなき戦い
Stable Diffusionでイラスト系モデルを使っていると、避けて通れない問題があります。何を指定しても肩を出してくるという、モデル側の強烈な傾向です。
筆者はイラストレーション系モデルが描く魅力的な画風が好みで、これを変えるつもりはありません。ただ、NSFWな画像を生成したいときは良いとして、そうでないときにも衣服を脱がされるのは本当に困ります。ちゃんと服を着た画像を生成する確率が、体感ではSSRガチャ並みという状態が続いていました。
今回、アングルと衣装の組み合わせにポジティブ・ネガティブ両面からのプロンプト制御を加えることで、正面アングルに限定すれば制御率が上がってきた経過を記録します。そして実際にこのプロンプトで画像生成を試みたところ、AIの「抵抗」が想像以上に多彩だったので、その過程もあわせて報告します。
衣装別の「脱がし傾向」まとめ
まず、これまでの検証で把握した衣装ごとの傾向を整理します。モデルによって差はありますが、イラスト系モデルに共通して見られる傾向です。
長袖の襟付きシャツ(比較的制御しやすい)
襟付きのボタンシャツは、今回試した衣装の中ではもっとも制御しやすい部類でした。「ボタンが閉まっている」「袖が長い」といった具体的な状態描写を加えることで、正面アングルなら肩だしを抑えられる確率がかなり上がります。
ブレザー制服(モデル次第で突破される)
ブレザーは本来肩を覆う構造ですが、モデルによっては当たり前のようにはだけさせてきます。制服として認識させても安心はできません。
カーディガン(ほぼ制御不能)
カーディガンは「はだけ」がデフォルトと言っていい状態です。何をやってもはだけさせてくるため、現時点では衣装の選択肢から外しています。
パーカー(首元から崩される)
パーカーは一見安全そうに見えますが、なぜか首元が異常に緩いデザインで描写され、そこから肩だしや背中だしにつなげてきます。
タートルネック(セクシー方向に変換される)
タートルネックを指定すると、高確率で袖なしのセクシーなニットに変換されます。首を覆う指定が、かえってセクシーな方向に解釈されるのは皮肉としか言いようがありません。
実践検証:襟付きシャツ編――AIの多段階抵抗を突破する
ここからが今回の本題です。正面アングル+襟付きシャツという条件で、実際にどのような攻防が発生したかを時系列で記録します。
第1段階:シャツに穴を開けてくる

まず、以下の衣装指定で生成を試みました。
white collared button-up shirt, neatly buttoned, long sleeves rolled to wrists
結果、AIはシャツに穴を開けて無理やりオフショルダーにするという力技で抵抗してきました。物理法則を無視してでも肩を出したいという執念を感じます。
第2段階:ポジネガ両面作戦で封じる
この抵抗に対して、ポジティブ・ネガティブ両面からプロンプトを強化しました。
ポジティブプロンプト(肩だし対策+背中対策):
white collared shirt, button-up shirt, neatly buttoned, long sleeves,
neat collar, properly worn clothes, shirt fully buttoned, tucked shirt,
formal shirt, proper uniform
closed back, full back coverage, long sleeve shirt, collared shirt,
conservative clothing, modest outfit
ポイントは、単に衣装名を指定するだけでなく、「きちんとボタンが閉まっている」「袖が長い」「シャツがインされている」といった着用状態を複数のトークンで重ねている点です。さらに、前回の検証で後ろ向きにしたとき背中を露出させてきた経験から、背中の開いたシャツも先回りして封じています。
ネガティブプロンプト(肩だし+はだけ+背中対策):
off-shoulder, bare shoulders, strapless, shoulder cutout,
cold shoulder, open shoulder
undressing, open shirt, exposed chest, disheveled uniform,
unbuttoned, off shoulder, clothing removed, partially undressed
backless, open back, bare back, back exposed,
low back dress, halter neck, strapless
ネガティブ側も3層構造にしています。肩だし、はだけ、背中の空きをそれぞれ個別に封じることで、抜け道を塞ぐ設計です。
バッチ処理で4枚同時に生成したところ、肩だしの画像生成を阻止することに成功しました。

第3段階:AIの予想外の迂回――男性キャラを半裸にする
しかし、ここでAIは予想もしない形で抵抗を見せました。新たに男性キャラクターを生成し、彼を半裸状態にすることで露出を実現してきたのです。

女性キャラの肩だしを封じたら、男性キャラを脱がすことで露出のノルマを達成しようとする。もはやAIが「とにかく誰かの肌を見せなければならない」という使命感で動いているようにすら見えます。
第4段階:男性キャラごと封じる
もともとネガティブに 1boy 1man は設定していましたが、これだけでは不十分でした。以下を追加して徹底的に封じます。
man, boy, male, male character, masculine,
shirtless, shirtless male, topless male,
bare chest, bare torso, muscular,
male nipples, male body, solo male, male focus
男性キャラの存在そのものと、男性の露出表現の両方をまとめて排除する構成です。
結果:4枚中2枚は背中の空いたシャツ
男性キャラの封じ込めには成功しました。しかし、4枚中2枚は背中の空いたシャツが生成されました。ネガティブに backless open back を入れているにもかかわらずです。

肩だしを封じれば背中で抵抗し、背中を封じれば男性を脱がし、男性を封じればまた背中で抵抗する。露出しないと壊れてしまうモデルなのかもしれません。
実践検証:ブレザー編――上着を脱がそうとするな
続いて、ブレザー制服での検証です。
navy blue blazer over a light blue dress shirt, properly worn, formal style
この指定で生成したところ、ブレザーを当たり前のようにはだけさせてきました。まるで「ブレザーとは前を開けて着るものだ」と学習しているかのような挙動です。

プロンプトだけでは突破される
以下をポジティブプロンプトに追加して対抗しました。
blazer uniform, fully clothed, fully dressed,
jacket on, buttoned jacket, dressed properly,
school uniform, wearing blazer
fully clothed fully dressed という全身レベルの指定と、buttoned jacket jacket on という上着の着用状態を明示する指定を組み合わせています。ブレザーに関しては「脱がそうとするな」というメッセージを複数のトークンで畳みかける必要がありました。
しかし、これだけ設定してもはだけさせてきました。プロンプトの力だけではブレザーの前を閉じさせることができない場合があるようです。これはモデルによると思われますが、プロンプト制御の限界を感じた瞬間でした。
Schedule typeの変更が効いた可能性
ここで、プロンプトとは別のアプローチを試みました。ForgeのSchedule typeを「Automatic」から「SGM Uniform」に変更して、同じプロンプトで再度バッチ生成を実行したところ、4枚中3枚ははだけさせることなく生成されました。残りの1枚はそもそもブレザーを着ていませんでした。

正直なところ、これがSchedule typeの変更による効果なのか、たまたまシード値の巡り合わせなのかは断定できません。サンプル数が少なすぎるためです。ただ、同じプロンプトで「Automatic」ではほぼ全滅だったものが「SGM Uniform」に変えた途端に改善したという事実は記録しておく価値があります。
Schedule typeはノイズ除去のスケジュールを制御するパラメータです。仮説として、「Automatic」ではモデルが持つ露出方向の分布に引きずられやすく、「SGM Uniform」では各ステップでより均等にノイズ除去が進むことで、プロンプトの指示がより素直に反映されたのかもしれません。あくまで推測ですが、プロンプトだけで詰まったときにサンプラーやスケジューラーの設定を変えてみるのは、試す価値のあるアプローチだと感じています。
プロンプト構成の全体像
ここまでの攻防を経て構築したプロンプトの全体構成をまとめます。
ポジティブプロンプト(衣装制御部分)
# 肩だし対策
white collared shirt, button-up shirt, neatly buttoned, long sleeves,
neat collar, properly worn clothes, shirt fully buttoned, tucked shirt,
formal shirt, proper uniform
# 背中対策
closed back, full back coverage, long sleeve shirt, collared shirt,
conservative clothing, modest outfit
# ブレザー着用時
blazer uniform, fully clothed, fully dressed,
jacket on, buttoned jacket, dressed properly,
school uniform, wearing blazer
ネガティブプロンプト(露出封じ部分)
# 肩だし対策
off-shoulder, bare shoulders, strapless, shoulder cutout,
cold shoulder, open shoulder
# はだけ対策
undressing, open shirt, exposed chest, disheveled uniform,
unbuttoned, off shoulder, clothing removed, partially undressed
# 背中対策
backless, open back, bare back, back exposed,
low back dress, halter neck, strapless
# 男性キャラ封じ
man, boy, male, male character, masculine,
shirtless, shirtless male, topless male,
bare chest, bare torso, muscular,
male nipples, male body, solo male, male focus
プロンプト以外の設定
| 項目 | 設定値 | 備考 |
|---|---|---|
| Schedule type | SGM Uniform | Automaticから変更。ブレザー着用時に改善が見られた(要追検証) |
この手法の限界
正直に書いておくと、この手法にはまだ明確な限界があります。
アングルを変えると崩壊する可能性が高い
現時点で効果を確認できているのは正面アングルに限った話です。アングルを変えた場合、おそらくこのプロンプトでは制御できなくなると推測しています。
過去の検証で、後ろ向きにするとどんな衣装を指定しても背中を露出させてきた経験があります。肩だしをネガティブで禁止すると、今度は背中の開いた衣装で抵抗してくるという、まるでモグラたたきのような状況でした。
完全封鎖は達成できていない
今回の検証でも、襟付きシャツでは4枚中2枚が背中の空いたシャツになり、ブレザーでは4枚中1枚がそもそもブレザーを着ていませんでした。ネガティブプロンプトで明示的に排除しても突破されるケースがあり、完全な封鎖には至っていません。
モデル依存性が非常に高い
イラスト系モデルは学習データの傾向上、肌の露出が多い画像を多く学習している可能性があります。そのため、モデルごとに「脱がし癖」の強さがまったく異なり、あるモデルで通用したプロンプトが別のモデルでは無力ということも十分にあり得ます。
プロンプト制御だけでは限界がある
ブレザー編で確認したように、プロンプトをいくら積み重ねても効かない場合があります。そうしたときにSchedule typeのようなサンプリング設定の変更が効く可能性があるのは一つの収穫ですが、なぜ効くのかの理論的な裏付けはまだありません。
「着せる」は「脱がす」より圧倒的に難しい
これは今回の検証であらためて痛感したことです。脱がす方向のプロンプトは簡単に効きますが、きちんと着せる方向の制御はこれほどまでに難しいとは思いませんでした。モデルが持つ分布の偏りに逆らう行為なので、当然と言えば当然ですが、この非対称性は想像以上です。
今後の方針
戦いはまだ続きますが、Forge環境で安定して制御できるようになったら、次のステップとしてComfyUIの学習を開始し、そちらへ移行する計画です。ComfyUIのノードベースのワークフローであれば、より細かい制御が可能になると期待しています。

SGM UniformとSchedule typeの効果についても、条件を揃えた上での追検証が必要です。アングル別の対策、衣装バリエーションの拡充と合わせて、一つずつ検証を積み重ねていきます。