
こんにちは、スタジオ真榊です。こちらの記事は、画像生成の基本であるプロンプトの記述方法について、必要な知識を網羅的に解説する特集記事です。プロンプトから画像が生成される仕組みやネガティブプロンプトの使い方といった基礎から、LLMに依頼してプロンプトを作ってもらったり、ランダムにプロンプトを組み合わせ...
こんにちは、スタジオ真榊です。こちらの記事では、画像生成(text2image)の基本であるプロンプト作成術について、熟達するまでに必要な知識をまとめたいと思います。プロンプトから画像が生成される仕組みやネガティブプロンプトの使い方といった基本部分から、特殊なプロンプト記法、有用なオススメ拡張機能まで、プロンプトを組むことに関わるさまざまな事項について網羅的に紹介していきます。
具体的なタグの一覧については、こちらの「プロンプト超辞典」をご参照ください。

※最新版の「画像生成プロンプト大辞典」(illustriousモデル準拠)が公開されています。この「超辞典」の2倍のボリュームですので、特に理由がなければそちらをご参照ください。 ◆はじめに -この辞典の使い方- この辞典は、StableDiffusionやNovelAIといった画像生成AIモデルにおいて広く採用されているdanbooruタグ準...
・はじめに ~プロンプトはなぜ「効く」のか~
・プロンプト記法の基本
・つまづきポイント
― ①「AIが指示を誤解する」
― ②「思った構図にならない」
― ③「正しいタグが分からない」
・タグのオートコンプリート機能を導入しよう
・ボタンでプロンプトを入力してみよう
・よく分かる「特殊記法」
― ①タグの影響度を強調してみよう
― ②途中で変更「プロンプトエディティング」
― ③タグ同士を混ぜる「オルタネイトプロンプト」
― ④ランダム選択「ダイナミックプロンプト」
・ネガティブプロンプトの仕組み
・Negative Embeddingsとは
・利きにくいプロンプトがあるのはなぜ?
・「Negpip」を使ってみるじゃんよ
・「75トークンの壁」とBREAK構文
・困ったらChatGPTに聞いてみよう
・プロンプティング上達への道
画像生成を始めたばかりのときは「このタグはよく効くけど、このタグは効かないな」と感じる場面が多いのではないでしょうか。例えば、「looking at viewer」はだいたい効くのに「looking away」としてもときどきこっちを見てしまうとか、「hatsune miku」は出るのにこのキャラは出ないとか。これはユーザーのプロンプト指示が悪いわけではなく、その使用しているモデルがどういったデータセットで学習したかが強く影響しています。
例えば学習データの構成上、カメラ目線の女性キャラクターイラストの方が目線を外しているイラストよりも圧倒的に多かった場合、そのモデルは何も指示しなくても女の子をカメラ目線で生成しがちです。「1girl」とタグ付けされた教師画像の多くに「looking at viewer」というタグがついてくるため、「女の子は普通こちらを見てくるものなんだな」とAIが思い込んでいるようなイメージです。AIは被写体がどういう存在か、生き物なのかすら理解しておらず、潜在空間というおもしろ空間上のベクトルによって「概念」だけを学習している宇宙人のような存在なのです。
画像生成モデルはtext2imageモデルと呼ばれるように、画像だけで学習しているのではなく「テキストと画像の組み合わせ」によって学習しています。そのモデルの製作者によるデータセットの構成とタギング(教師画像にそれぞれどういう説明文をつけたか)によって、ユーザーがどう指示すると通じるかが変化することを念頭に、この記事を読み始めていただけるとよいでしょう。
まずはプロンプトの基礎である「記法」について見ていきましょう。プロンプトには「ポジティブプロンプト(PP)」と「ネガティブプロンプト(NP)」があり、各モデルが学習したテキスト様式に従ってPPに入力したものが生成されます。逆に、NPに入れたテキストはできるだけ生成結果に反映されないような力が働きます。この二つの組み合わせによって生成画像をコントロールするのがプロンプトの基本です。
▲NovelAIのプロンプト(PP)と除外したい要素(NP)欄
NovelAIやローカル用StableDiffusionモデルの場合、danbooruタグ(通称:danbooru語)と呼ばれる様式で学習されているため、「1girl」や「looking at viewer」といったタグをカンマ「,」で区切って、重要視してほしい順に箇条書きで並べていくのが基本です。例えば「1girl,solo,standing,smile,school uniform,sky,sea,masterpiece」といった具合ですね。
自然言語でも学習しているモデルであれば、「A girl in a school uniform is standing with a smile. Background is the sky and the sea.」のように、自然な文章でもちゃんと認識してくれます(▽下図)。mid journeyやniji journeyなどはこのタイプです。
初心者向けのコツは、まず「必須要素:これが抜け落ちたらその時点で生成失敗になるタグ」を最初に書くこと。続いて、「メイン要素:被写体は何人でどんな構図か、どんな見た目の誰がどこで何をしているか、どんな画風か、背景はどんなものか」を指定し、次に「サブ要素:なくてもよいけどキャンバス内に描かれていると嬉しいもの」をそれぞれ単語で列挙。最後に「クォリティタグ」と呼ばれる、イラストの品質に関するものを入れるやり方がオススメです。
【必須要素】制服を着て赤いめがねを掛けたポニーテールの女の子1人のイラストをぜったい生成したい
→ 1girl,solo,red glasses,school uniform,ponytail,
【メイン要素】笑顔で立っている上半身のイラスト。目は紫、髪は黒、赤いリボン。背景は海と空。スカートはプリーツタイプ(※これを入れることで腹部から上だけのイラストになりにくくなる)
→ smile,standing,upper body,purple eyes,black hair,red ribbon,sky,sea,pleated skirt,
【サブ要素】日差しや雲、スクールバッグが描かれていると嬉しい。
→ sunshine,school bag,cloud,
【クォリティ】品質を高めたい、スケッチ風にしたい
→ masterpiece, best quality, very aesthetic, absurdres, sketch
【完成プロンプトと生成例】
1girl,solo,red glasses,school uniform,ponytail,smile,standing,upper body,purple eyes,black hair,red ribbon,sky,sea,pleated skirt,sunshine,school bag,cloud,masterpiece, best quality, very aesthetic, absurdres, sketch
<効かないタグがあったら>
さて、こちらの画像、よく見ると下半分の2枚はいずれも赤い眼鏡が生成されていないことがわかります。これは「red glasses」があまり強く印象付けられているタグではないことを示しています(逆に言うと、このモデルは"1girlと言えば眼鏡がない女の子"と印象付けて覚えているとも言える)。「sketch」の効果もやや弱めで、よく見るとざかざかした線にはなっているのですが、もっとしっかりスケッチ風にしたいときもありますね。
こういう場合は、後述する「タグを強調する」手法で解決できます。
<除去したい要素があったら>
プロンプト欄のすぐ下にあるネガティブプロンプト欄には、生成されてほしくない要素を入力します。例えば、スーツ(suit)というタグにはシャツやネクタイが強く印象付けられているので、suitと入れるだけでそれらがセットで出てくることが多いですが、suitをPPに、necktieをNPに入れるとネクタイなしのスーツを出しやすくなります。
同じように、ショートヘアにしたい場合はlong hairと入れればよいですし、高品質な画像にしたければlow qualityと入れても効果があります。
初期はたくさん低劣な画像を示すタグをNPに並べる風潮がありましたが、最近流通しているモデルはあまりこうしたネガティブプロンプトを必要としないモデルが多いです。モデル配布者はたいていオススメのネガティブプロンプトを公開しているので、よく説明を読んで参考にしましょう。
<プロンプトは"語順"も重要>
プロンプトには反映されやすい「強いもの」と「弱いもの」があり、前の方に書いたものほど反映されやすいので、欠けてはいけない重要要素は前の方に、ニーズの低いものや品質関連のものは後ろの方に置くと良いとされています。自然言語表記だと重要な単語が後ろのほうに行くことがあるので注意。DeepL翻訳でざっくり英文化して放り込んでもたいてい理解してくれますし、スペルが間違っていても意外と通じます。
▲「初音ミケ(hatsune mike)」さん。わざとスペルミスするテクニックもある
注意したいのは、モデルが学習していない要素は生成できないということ。たとえば、「モナリザ」や「初音ミク」は教師データに豊富に含まれているので生成できますが、モデルが学習していない最新アニメのキャラクターは再現することができません。どうしても生成したい場合はLoRAなどの「追加学習」をする必要があります。
プロンプトの書き方によっては、AIが誤解してしまうことがあります。こちらは、さきほどのred ribbonを「red hair ribbon」に変えて生成した例。
「red hair ribbon」というタグが「red hair + ribbon」と理解され、その手前の「black hair」と合わせて判断された結果、黒と赤の髪の女の子が生成されてしまっていますね。
<カンマや否定語を妄信しない>
カンマやスペースは完全にタグ同士を引き離してくれるわけではないので、特に色に関する概念は混じりがち(色移り、色汚染などと呼ばれます)。同じ理由で「cowboy shot」(太ももから上が移っている構図)を入れたらカウボーイ衣装の女の子が出たとか、鉛筆画風を意味する「graphite(\medium)」と指示したら女の子が鉛筆を持ってしまった…ということもあるあるです。
「no humans(無人)」「small breasts(控えめな胸)」「no shoes」というタグは一応効きますが、タグの中に「humans(人)」「breasts(胸)」「shoes(靴)」という、タグの指定と逆の意味のタグが入っているので、効きが悪くなる現象が起こります。
まずは頭の中で理想の画像を想像し、「どうすればそれに近い画像が出るか」、同時に「どうすれば見当違いな画像生成を防げるか」の両面から考えていくのが上手なプロンプトの考え方。さきほどの例で言えば、「red hair ribbon」をどうしても通したいなら「red hair」をネガティブに入れたり、「red ribbon」や「red bow(ヘアリボン)」を使いましょう。
キャラの全身像を出したくて「full body」と指示しているのに、なぜか全身が描かれないことがあります。プロンプトの効きには強弱があるため、効きの弱いタグは無視されがち。そういうときは、考えを逆転させてみましょう。描いて欲しい絵を頭の中で想像して、それを抽象的ではなく、部分ごとの被写体を具体的にタグにしてみると良いです。
例えば、キャラクターの全身を描いてほしいのに脚が見切れてしまうのなら、抽象的に「全身(full body)」と指示するだけではなく、「skirt」「socks」「shoes」「feet」といった下半身に関するタグを多く入れてみるのがオススメ。背景があまり描き込まれないようなら、「detailed background(詳細な背景)」と強調するだけでなく、「beautiful blue sky」「detailed cloud」「summer」「road」「sun flower」などと、思い浮かんだイメージを基に、具体的なワードをどんどん並べてみるのがよいでしょう。「指示された被写体を忠実に描いたら、結果的に望んだ構図にならざるを得ない」ような指示が理想です。
※もちろん、プロンプトだけで完全に構図を支配することは不可能ですので、細かなポーズや位置を完璧に再現したい場合は素直にControlnetを使いましょう!
プロンプトに慣れないうちはもちろん、ある程度慣れてきても「あの概念、なんてタグを使えばいいんだ?」と悩んでしまうことはよくあります。例えば両手でハートマークを作るポーズは、何と指示したら良いでしょうか。「make heart with fingers」?「heart shape hands」?
困ったときは「danbooruタグ」を探してみましょう。現在流通しているイラスト調の画像生成モデルの多くは、「daanbooru」という海外のイラストタギングサイトで使われている英語のタグを使って学習しています。つまり、適当な英文テキストで指示するよりも、danbooruタグと同じ表記で指示したほうが理解しやすく、画像の再現度も高くなる傾向にあります。例えば、金髪のキャラを出したいなら「gold hair」よりも「blonde hair」、こっちを見て欲しいなら「look me」などではなく「looking at viewer」といった具合です。
こちらのリンク先でDanbooruタグを検索することができます。さきほどの「手でハートマーク」を調べたいので、heartと打ち込んでみると、「ハートの形の瞳孔」や「ハート型の髪飾り」などに混じって「heart hands」があることがわかります。
横に「13k」とあるのは、danbooruに登録されている画像のうち約13000枚もの画像にこのタグが付けられているということですので、比較的メジャーなタグと言えるでしょう。学習モデルによってどんな画像を教師データにしているか、ペアになっているテキストデータがどんな表記かは異なるものの、多くの画像につけられているメジャーなタグほどAIが再現しやすい傾向にあるのは確か。逆に、滅多に使われないようなマニアックなタグを入れても、期待通りの画像はなかなか生成できないはずです。
また、img2img画面にある段ボールのボタン(📦:DeepBooru解析)を使うことで、ある画像から予測されるdanbooruタグを検出することができます。やり方は簡単で、タグ検出したい画像をimg2img画面で読み込んで「📦」ボタンをクリックするだけ。少し待つと、ポジティブプロンプト欄に予測されるタグが自動で表示されます。
これは、セーター姿の女の子の画像を放り込んで解析した結果。以下のようなタグが一気に検出されました。
1girl, arm support, bangs, bench, black hair, black legwear, blue eyes, breasts, bush, cable knit, closed mouth, day, dress, eyebrows visible through hair, flower, forest, garden, grass, grey sweater, large breasts, long hair, long sleeves, looking at viewer, nature, outdoors, plant, ribbed sweater, sitting, sky, smile, solo, sweater, sweater dress, thighhighs, tree, turtleneck, turtleneck sweater, white sweater
セーターに関するタグが複数出ているので、そのまま生成に使うというより、この中からお目当てのタグをピックアップして本番生成に使うイメージでしょうか。もちろんAI画像でなくても検出できるので、「こういう概念をどうプロンプトで表現したらいいのか!」と悩んだらこの方法でも解決することが可能です。
danbooruタグについて触れたので、ここで少し脱線。タグ選びに有用な拡張機能を二つご紹介します。
初心者ほど早めに入れておきたいのが、タグを自動で補ってくれる拡張機能「Booru tag autocompletion」です。
【インストール方法】
拡張機能(Extensions)タブを開く→Available タブを開く→"Load from:" をクリック→リストの中から「Booru tag autocompletion」を探して、右端のインストールをクリック→WebUIを再読込、でインストールできます。
インストールに成功していれば、プロンプトを打ち込むとこのようにタグの候補が自動表示されます。上下キーで選んでENTERキーを押すか、クリックすることでプロンプト欄に反映されます(たまに読み込みにタイムラグが生じることがある模様)。学習した画像が多いタグほど上に表示されるので、例えば視線に関する主要タグを探したいときは「look」と打ち込んでみると良いでしょう。
【予備知識① WildcardやLoRAも呼び出せる!】
プロンプト欄に「__」 (ダブルアンダースコア) を打ち込むと、登録してあるWildcardを直接呼び出すことができます。LoRAやLyCORIS、embeddingsを呼び出したい場合は「<」と打ち込んだ後、呼び出したいものの頭文字を打ち込めば自動で候補が表示されます。例えばFLAT2 LoRAを呼び出したければ「
【予備知識② Chant(詠唱)って何?】
画像生成のたびに、(masterpiece, best quality, high quality, highres, ultra-detailed)といったクォリティタグの連打をよく使うという人は多いでしょう。オートコンプリートを使って、こうした定番の呪文を一発呼び出しすることもできます。「<」もしくは「
詳しいやり方は公式の説明をご覧下さい。
「Easy Prompt Selector」は、生成画面にプロンプト入力用のボタンを表示してくれる便利な拡張機能。いちいち呪文を手で打ち込まなくても、マウスで「1girl」「solo」などのボタンをぽちぽち押していくだけでプロンプトが簡単に作れてしまいます(リンク先動画を参照)。
ボタンの選択肢は自分でカスタムすることができ、オレンジ色のボタンを押すことで、そのカテゴリ内のタグをランダムで選択してくれる機能も。生成のたびにいちいちタグを打ち込むのが面倒な方は、自分用のボタンを整備してしまうのがオススメです。
さて、プロンプトの基本と便利な拡張機能について抑えられたので、次にStableDiffusionモデルにおける「特殊なプロンプト記法」について解説していきます。
特殊記法のうち、誰もが最初に触れるのがプロンプトの「影響度」を強めるもの。次のようなルールでプロンプトをくくることで、そのタグを強調することができます。
・(word) 半角丸カッコでくくると、単語の影響度が1.1倍になる
・((word)) 二重にすると、単語の影響が1.21倍になる(1.1の2乗)
・[word] こちらのカッコでくくると、単語の影響度が0.91倍に(1.1分の1)
・[[word]] 単語の影響度を0.83倍にする(1.1分の1の2乗)
※3つ以上重ねても同じ倍率で強弱が付きます
・(word:1.5) 単語の影響度を数値で指定する。この場合は1.5倍に強まる
・(word:0.25) 単語の影響度を数値で指定する。この場合は4分の1に弱まる
・\(word\) ()を強調の意味ではなく、プロンプトの一部として理解させる
→sakura(character)のように、()もコミになっているdanbooruタグを正しく認識してもらうのに必要な記法
(long hair:1.2)のようにプロンプト中にスペースが入っても、()内の単語全体に効果がかかります(この場合hairだけでなくちゃんとlong hairの影響度が上がります)
強調したいタグをドラッグで選択し、Ctrlキーと上/下キーを押すことで強調度を変更することもできます。いちいち数字をぽちぽち打ち込むのは面倒なので、このやり方を早めに身に着けておくとプロンプト表記が早くなります。注意点として、プロンプトは一定の限度を超えて強調すると画面全体を破壊してしまうので、せいせい1.5くらいまでを目安にしましょう。
こちらは「1girl,smile」で生成した画像の例ですが、「smile」を強調していくとどんどん崩壊していくのが分かると思います。
視線やポーズが思い通りにならないからといって、「looking away:3」などと安易にプロンプト指定するのはやめておきましょう。経験則的には、強度が「1.5」を超えるとだいたいよくない結果になります。突然めちゃくちゃに崩壊した画像が生成されるようになったら、プロンプトのどこかで強調の数字部分がおかしくなっていることが多いので、よく見直してみましょう。
カッコによる強調以外に、特殊なプロンプト記法をさらに3つ紹介します。常用する必要はありませんが、これを知っているとプロンプト活用の幅が広がるので、初心者のうちは存在だけ覚えておけばOKです。
[A word:B word:X.X]
このような特殊な記法を使うことで、画像生成の途中からプロンプトを切り替えることが可能です。例えば[dog:cat:0.5]とした場合、画像生成までの全ステップのうち、前半まではdogが効き、後半にさしかかるとdogの影響が消えてcatのみになります。こちらが実際の生成例。
途中でプロンプトが入れ替わったことで、AとBの要素両方を兼ね備えた犬猫フュージョンな画像が生成されます。(※数字はプロンプトに変化を起こすステップ数です。0.8ならステップの最後の20%にさしかかると変化が生じますし、1以上の整数を指定した場合、その数字のステップで変化が生じます)
また、複数のプロンプトではなく[blue hair:0.5]のように単一プロンプトで指示すると、途中までは青い髪についての指示が存在しないものとして生成され、全ステップの半分にさしかかってからblue hairプロンプトの効果を生じさせることもできます。さらに、コロンを二つにして[blue hair::0.5]とすると、逆に前半部分だけプロンプト指示がなされ、後半にさしかかるとそのプロンプトが除去されます。
これをうまく使えば、ステップ途中で「wearing clothes(着衣)」→「naked(裸)」と変化させることで服を透けさせたり、「泣き笑い」のように複数の表情を混ぜたり、色が別の部位に移ってしまう「色汚染」を防いだりすることがプロンプトのみで指示できます。
【色移りを防止するには】
ところで、「black hair」「blue eyes」と指定したとき、黒髪の内側(インナーカラー)が青く染まる経験をしたことはありませんか?複数の色が登場するプロンプトを組むと、よく起きてしまうのがこの「色移り」現象です。
生成画面を眺めていると分かるように、AIの画像生成はステップの前半で大雑把な描画を、後半で細部の描画をしていきます。おおざっぱな描画の段階で広い範囲に強い色が塗られてしまうと「色移り」が起こるので、さきほど紹介した「プロンプトエディティング」を使うことで、ステップの前半で範囲の大きい部分にA色を着色し、詳細な部分のB色は後半に塗ると、指定していない場所への「色移り」を防ぐことができます。
例えば[black::0.5] hair, [blue:0.5] eyeとすることで、前半ステップで髪を黒く塗り、後半ステップでは目を青く塗るので、髪の一部が青くなる現象を防ぐことができます。もちろん、ネガティブにblue hairを入れるだけでもこうした現象は防げますが、たくさんの色を部位ごとにより細かく指定したい場合には役立ちます。
[frog:cat:0.5] と[cat:frog:0.5]では、それぞれ「ほぼカエル、ちょっとネコ」「ほぼネコ、ちょっとカエル」と生成結果が変わります。前半でカエルを描くかネコを描くかによって大まかな形状が決まり、その後詳細を描く段で「これはカエルだ(or ネコだ)」と指示するので、ステップの前後によって結果に差が出るというわけです。
複雑な色指定をしたいときは「sd webui cutoff」という拡張機能も便利です。プロンプトエディティングはちょっと難解という方は、こちらを試してみて下さい。

こんばんは、スタジオ真榊です。今日はレタッチ機能の掘り下げ記事を更新する予定だったのですが、新たに公開された拡張機能が非常にエキサイティングな内容だったため、順番を差し替えてお送りします! 今回登場したのは、プロンプトの影響を狭めて色移りを起こりにくくしてくれるという拡張機能「sd-webui-cutoff」。 ...
半角コロンを使う「プロンプトエディティング」はあるステップを特定してプロンプトを切り替える記述法ですが、コロンではなく縦線「|」を使うと、1ステップごとにプロンプトを交互に切り替えることもできます。例えば[frog|cat] というプロンプトでは、奇数ステップではカエル、偶数ステップではネコを描くので、さきほど説明したようなステップの前半/後半における影響の差異が起こらず、より各要素が混じり合います。ただ、あまりに形状が違うものを交互に描くと、当然良質なものはできないので注意が必要です。
こちらはカエルと猫が交互に描かれた「カエル猫」。2人の画家が一筆ずつ交代してそれぞれ別のものを描いた感じになります。
こちらは、拡張機能をインストールすることで使えるようになる特殊記法。非常に使い勝手が良いので、入れておくことをオススメします。
簡易的なWildcardのような記法で、{Aword|Bword|Cword}と記述すると、{}内部のプロンプトがランダムで一つ選択されるというもの。これによって、画像を大量生成するときに、雰囲気を統一しながらさまざまな風合いのキャラクターを生成できるというわけです。1girl have {blue|red|blonde}hairのように利用する。
下記のような指定も可能。
{2$$A|B|C}:3つのプロンプトのうち、どれか2つがランダムで選択される
{1-3$$A|B|C}:3つのプロンプトのうち、1~3つがランダムで選択される
{2$$ and $$ A|B|C}:A, B, C のうちどれか2つが選択され、「and」で結合される。【2023/09/18訂正:andの左右に半角スペースが必要です】
これを使いこなすことで、例えばシチュエーションだけを固定して、描かれるキャラだけを変えたり、服装だけを変えたり、ポーズだけを変えたりすることが可能になります。Wildcardはたくさんの選択肢からランダムに選ぶものですが、こちらはもっと少ない選択肢から気軽にランダム選択したい場合に使うとよいでしょう。
こちらの記事は、「嫌な顔しながらスカートをめくってくれるメイドさん」をさまざまな髪型・髪色・瞳色・服色でランダム生成した例です。(えっち注意)
生成したいシチュエーションはしっかり固定しつつ、それぞれの個性をランダムにしているので、大量生成したときに似たようなイラストばかりにならない利点があります。

めいど! 本日も午前3時半のスタジオ真榊からお送りします。ところで皆さんも素敵なプロンプトが組めたら時間の許す限りGenerate Foreverしていると思いますが、せっかく数百、数千枚の画像ができてもキャラクターの造形にバリエーションがなくて面白くないな~~~と思うことはないでしょうか?賢木はあります! こち...
「wild card」は、タグのランダム化をもっと本格的に行うことができる拡張機能。例えば、ポーズに関するタグを無数に登録して置いたタグを「__pose__」の一語で呼び出して、その中から生成するたびに違うものをランダム選択することができます。こちらも非常に面白く、応用するとさまざまな試みができる機能なので、ぜひチェックしておきましょう。

こんばんは、スタジオ真榊です。この記事は、プロンプトをジャンルごとにテキストファイルで管理してランダム化し、一括呼び出しできる拡張機能「Wildcard」についての解説記事です。 {blue eyes|red eyes|yellow eyes}のように記述すると、このうち一つをランダムで採用してくれるのが「DynamicPrompt」でしたが、wildc...
さて、プロンプトと同等、もしかするとそれ以上に重要なのがネガティブプロンプトです。ざっくり「描いて欲しくないものを注文する欄」とか「ここに書いたものは『生成元』から除外されるので、出てこなくなる」と認識されがちですが、実態はもうちょっとだけ複雑なようです。
「超入門」で少し触れた通り、拡散モデルの画像生成AIはノイズ除去の繰り返しによって、人間には見えない超空間で絵を描きます(そのとき、最後に人間に分かる絵に「翻訳」してくれるのがVAEでしたね)。人間が「こういう絵を描いて」とAIに手渡すプロンプトには、タグごとにそれぞれ異なる「ベクトル」の概念があり、AIはこれを参考に正解の絵を導き出します。イメージとしては、AIは学習に基づいて形作られた広大な「テキストの地図」の上で、人間の指示(プロンプト)のベクトルを頼りに目的地(人間がイメージしている正解の絵)へと向かっていくわけですが、実際には「プロンプトで生成した画像とプロンプトなし(空白)で生成した画像の差異を計算して、CFGスケールの値に従ってその違いを倍増させる」という工程を行います。
そしてネガティブプロンプトは、空白プロンプトで生成した画像の変わりに、ユーザーの指定した文字列で生成した画像を利用するという仕組みで動作するものです。例えば(low quality,worst quality:1.4)で生成した低劣な画像と、ポジティブプロンプトで生成した目的の画像のベクトルの差を計算して、その差をCFGスケールに従って増幅する・・・ということが行われます。
このような仕組みによって、広大なテキストの地図の中で低劣な画像(と誰かがみなしたもの)が位置するエリアをネガティブ指定すると、結果的にイラストの品質がアップするという現象が起きるわけです。単に低劣な概念を除去するだけなら、ネガティブプロンプトを入れなかったのと同じような画像が出るはずですが、逆向きの力が掛かっている(低劣化をなくすだけではなく、高品質化を連れてくる)ことが分かります。
タグの効果は学習モデル(checkpoint)によって異なりますが、例えばlow qualityやworst quality(低クオリティ)、lowres(低解像度)、blurry,bokeh(ぼけた画像)といったものを入れることで、クォリティが高くはっきりした画像が生成されるようになります。こうした仕組みを理解しておくと、モデルの学習傾向によって出にくい画像があったとき、「逆向きの力」を意識的に掛けることで望ましい結果を導くことができるようになります。
例えば、「1girl and 1boy」を生成したいのに1boyが弱すぎてうまく生成されない場合、「1girl,solo」をネガティブ指定してやれば、男女が均等に描かれやすくなるということ。見た目上ポジティブにもネガティブにも1girlが存在して変に思うかもしれませんが、こうした考え方をすることでよりAIとの会話がスムーズになるはすです。
2022年10月にNovelAIが登場した当初は「プロンプトが全て」という時代が続き、ハイクォリティな画像を出せる長い長い呪文を編み出すことが最重要視されていましたが、次第にさほど長大なプロンプトの必要がない高機能モデルが普及していきました。そんな中、人気を集めたのが、手足や指が崩壊していたり、低劣だったりする画像ばかりを学習させた軽量なファイルをネガティブプロンプトに「埋め込む(embedding)」ことで、一つのタグでイラストを高品質化させる「Negative Embeddings」という試みです。
「stable-diffusion-webui\embeddings」フォルダーにファイルを放り込み、ネガティブプロンプトに拡張子を除いたファイル名を書き込むだけで動作します。例えば、「easynegative.safetensors」をフォルダに入れたなら、ネガティブ欄に「easynegative」と入れるだけでOK。
LoRAのように、教師データにない概念を高品質に生成させることはできませんが、よりスマートに低劣な画像のベクトルを避けられる方法としていまでも人気が高いです。ただ、毎回同じベクトルを強調するわけですから、顔立ちやタッチがどうしても似てしまうのが欠点。特に人気な「easy negative」を常用しているとよく見掛ける顔立ちを「easy negative顔」などと呼ぶことがあります。
SD1.5用の人気の高いファイルをいくつか紹介します。適用すると画面全体に影響が及ぶため、タッチや画質などが変化することに留意しつつ使うようにしましょう。
EasyNegative
▼左4枚が元画像、右4枚が「EasyNegative」を適用したもの。構図はほぼ同じですが、ディティールに差異が見て取れます。
bad prompt version 2
EasyNegativeと同様に低劣な画像を学習したもの。EasyNegativeより修正力が高い代わりに、絵柄への影響も強い(新たな破綻を呼ぶこともある)ように感じます。
▼左4枚が元画像、右4枚が「bad_prompt version2」を適用したもの。右下の一枚は破綻を強力に修正できていますが、右上の1枚は別のキャラに見えますし、よく見ると波打ち際のラインがおかしくなっています。
badhandv4
こちらは低劣な手のパターンを学習したもの。手の崩壊をある程度防ぐ効果がありますが、画面全体の絵柄に影響するのでこちらも注意が必要。(※Inpaintなどと併用して手にだけ掛ける手法があります)
「princess」というプロンプトを入れると、指定していないのに「tiara」や「long hair」「blonde hair」の要素がついてくることがよくあります。
これは、教師データに基づいて描かれた「テキストの地図」上で、これらのタグが「princess」に近い座標にあるため。要するにAIが「プリンセスと言えば…」という感じで金髪・長髪・ティアラといった要素を近いベクトルに学習しているわけです。プロンプトにprincess、ネガティブにtiara,long hair,blonde hairを入れることで、こうしたバイアスはある程度回避することができます。
が、今度は「プリンセス感」が失われてしまいましたね。我々人間が思う「プリンセス」のイメージも、ティアラなどの記号に託されていたことがなんとなく分かります。言葉と画像の概念はやはり「言語地図」のようなイメージで広がっているので、ある言葉が似た地域の属性を「連れてくる」現象が起こるのです。
こうした現象はあらゆるタグに生じます。例えば「large breasts(豊かなバスト)」が「cleavage(胸の谷間)」を強力に連れてきてしまうとか、さきほども例に出したように「1boy and 1girl」のイラストを作ろうとしても、girlのほうが強くてboyが消えてしまうといったケースがよく起きます。男の子より多く女の子のイラストをみんな描いてきましたから、その傾向がデータセットにも自然と表れているわけですね。
単純なプロンプトなら回避できても、さまざまなプロンプトが混じり合ったり、LoRAを併用していたりすると、どうしてもネガティブプロンプトだけではうまく不要要素を除去し切れません。それを回避する方法の一つが、ポジティブプロンプトをマイナス適用できる「Negpip」という拡張機能です。
「negpip」は、負の効果を持つポジティブプロンプトと、正の効果を持つネガティブプロンプトを使えるようにしてくれる拡張機能。「URLからインストール」画面の「拡張機能のリポジトリのURL」にhttps://github.com/hako-mikan/sd-webui-negpip/と入力してインストールすればOKです。
インストールに成功していれば、Controlnetなどと同じ場所にこのようなシンプルなタブが形成され、「active」にすれば効果が発揮されます。
使い方は簡単。プロンプト欄で(looking at viewer:-1.5)などとマイナスの強度で指示すると、その要素を強力に弱めることができます。逆に、ネガティブプロンプト欄で(looking at viewer:-1.5)と入れると、「マイナスのマイナスは正」ということで、強力にこちらを見る働きが加わります。詳しいことは公式に秀逸なReadmeがあるので、ぜひ見てほしいじゃんよ。
左の画像は同シードで「1girl and 1boy」を4枚生成した例。男の子がいるにはいるのですが、ほぼ見切れてしまっています。右はnegpipをオンにして、ポジティブに(solo:-1),(1girl:-1)を加えたもの。さきほどのベクトルの考え方を応用して、女の子が1人で描かれている画像のベクトルから離れるように工夫したところ、男の子がより主体的に描かれるようになりました。
他にも、さまざまな実験を行ってみました。
▼「smile」を弱めた例
▼「large breasts」が連れてくる「cleavage(胸の谷間)」を弱めた例
▼「looking at viewer」を弱めた例
余計な要素を一緒に学習してしまっているLoRAを使うときや、なかなか効果が出ない弱いタグをしっかり強調したりする場面で、negpipは有用だと感じています。また、要素の「スライダー」のように使う方法もあり、アイデア次第でLoRAのように使うこともできそうです。
こちらは「curvy」(むっちり)をマイナス調整して、体型調整タグのように使った例です。マイナス適用するほどにskinny(痩せ)な体型になっていることがよくわかります。
プロンプトが思ったように利かないとき、もう一つ考えられる原因が「75トークンの壁」です。
Stable Diffusionには、プロンプトが「75トークン」ごとに区切られる仕様があります。これは、人間から指示されたプロンプトをAIが分かる形に翻訳してくれる「テキストエンコーダー」というモジュールが、一度に処理できる量が75トークンまでと決まっているため。75トークンを超えるプロンプトが入力されると、いったんそこでプロンプトが分割され、まず75トークンまでの固まりを処理したあとに、新たに76トークン以降の固まりが送られる…という流れで画像生成が行われます。
すると何が起きるか。最初に説明した「前の方のタグほど重視され、後ろにいくほど無視されやすくなる」現象が再び起き、2つ目の塊の最初のタグが強く重視されたり、ちょうど75トークン目に来たタグが途中でぶった切られて意味をなさなくなる(例:red【断絶】hair)といった不具合が起きます。
プロンプト入力欄の右上に表示されているのが、現在入力中のトークン数です。文字数とはリンクしないので、ここを見ながらどこで「壁」を迎えるかを調整する必要があります。
こうした現象を防ぐためにあるのが「BREAK」というワード。プロンプトの途中に「BREAK」(すべて大文字)と入れると、そこで現在のプロンプト群が区切られ、すぐに次の75トークンの固まりを始めることができます。意図と異なる位置でプロンプトが分割されることがないので、予想外の生成結果になることを防ぐことができるわけですね。「長いプロンプトで生成するときは、75トークンに近づいたところでBREAKを挟むと安心」と覚えておきましょう。また、BREAK直後のタグは強めに影響することも意識してプロンプトを組むと良いでしょう。
自分でプロンプトを組むのがなかなか大変という人は、思い切ってChatGPTに聞いてみるのも良いでしょう。例えば、こんなプロンプトで聞いてみます。
#あなたにはこれから、私が日本語で伝えるイメージをもとに、画像生成AIのプロンプトを記述してもらいます。以下のルールを守ってください。
#全て半角英数。danbooruタグをカンマで区切って記述します。それぞれの要素と倍率は半角の()でくくってください。
#(danbooruタグ:倍率), (danbooruタグ:倍率), ...といった形式で記述します。倍率には重要度に応じて0.5~1.5の範囲で数字を入れて下さい。特に強調も弱めもしない場合は倍率を1.0として下さい。
#プロンプト内のタグは最低15個、最多で30個以内におさめるようにしてください。
#被写体に関する重要なタグは前の方に、画質やタッチ、光源など、画面全体に関わるタグは後ろの方に記述してください。
#プロンプトの最後に(masterpiece, best quality, high quality, highres, ultra-detailed:1.0)と書き加えてください。既に記述したタグは除去して構いません。
#必ずプロンプトのみを端的に回答してください。他の説明は必要ありません。
#以上が理解できたら「イメージを入力して下さい」と回答して下さい。
実際のやりとりは次のようになります。これは有料版のChatGPT-4を使っています。
無料で使えるGPT-3.5だと、danbooruタグが正確でなかったり、クォリティタグを適切に入れられなかったりするようなので、指示文章をもう少し平易にする必要がありそうです。また、このまま生成しても「何か違う」感じになってしまうことが多々あるので、あくまで参考程度に。足りなければ「30個ほどのタグに増やすとどうなりますか」と聞いたり、生成してみて足りないものや邪魔なものがあればその都度口語で頼むことで、かなり柔軟に対応してくれますので、ご自身の生成環境に合わせてカスタマイズしてみるとよいでしょう。
※残念なことに、23年8月ごろからGPT-4はセンシティブ系の指示にほぼ回答を控えるようプロテクトされており、nsfwなプロンプトを手伝ってもらうことは難しいようです…。
2023年2月にControlnetが登場すると、プロンプトだけで画像を生成しなければならなかった状況は一変しました。学習モデルやLoRAなどが多数流通するにつれて、ユーザーそれぞれの生成環境は多様化し、automatic1111版SDwebUI以外のローカル生成用UIを使うユーザーも増えてきている印象があります。
それにつれて、プロンプト自体の重要性もやや薄れた感はあるのですが、特に画質やタッチ、ライティング、色彩などのクォリティ部分については、やはりどれだけプロンプトを知っているかどうかで引き出しの数、表現の多彩さが変わってくるので、緻密なイラストを生成されている方ほど、プロンプトをしっかり研究されている印象があります。
実践的なプロンプト用法は、やはり上級者から勉強させていただくのが最も上達が早いです。特に、Civitaiで配布されているモデルにはプロンプト付の生成サンプルが掲示されていることが多く、モデル配布者や上手なユーザーさんがどんなプロンプトを使っているかを読み取る格好の教材となっています。もちろん、プロンプトの「効き」は学習モデルの出自によって大きく異なるため、同じプロンプトを使えばどんな学習モデルでも高品質なイラストが生成できるわけではないのが難しいところではありますが、「chichi-pui」さんなどプロンプト公開されているAIイラスト投稿サイトなども併せて回遊することで、いろいろな発見があると思います。
あらためてこちらのプロンプト辞典を眺めてみたり、使ったことがなかった特殊記法や拡張機能を試してみたりすることでも、生成イラストのクオリティアップにつながるかもしれません。

NovelAIの最新画像生成モデル「NAI DiffusionV3」が公開されたことを記念して、「完全にプロンプト忘れた」という皆様向けに、画像生成AI用プロンプト辞典を一時的に全公開します。StableDiffusionやNiji journey、そしてDALL-E3のテキスト指示の容易さ完全にNAIプロンプトを忘れた皆さま、もう一度基本からタグに向き合...
AIイラストの品質は、「学習モデル選び」×「プロンプト術の巧みさ」×「効果的なアップスケール術」+「LoRAやConrolnetなどを活かした各種テクニック」で決まるのではないかと感じています。プロンプト術はさまざまな技術の登場でやや押しやられてきた感はありますが、各モデルの力を最大限引き出すためには、優れたプロンプティングが不可欠なはず。Negative Embeddingsやクォリティタグ選びも含めて、「自分流」が確率されている方のイラストには、ひとめで見てその人の作品と分かる一貫した魅力が感じられると思います。
ながなが書いてきましたが、今回の記事がこれからAIイラストを楽しむ方にとって、何かの役に立てばと思います。読んで下さってありがとうございました!
スタジオ真榊【AIイラスト術解説】
2023-10-16 13:01:45 +0000 UTCあかさならは
2023-10-16 07:44:20 +0000 UTCスタジオ真榊【AIイラスト術解説】
2023-10-13 14:51:54 +0000 UTCあかさならは
2023-10-13 14:17:48 +0000 UTCスタジオ真榊【AIイラスト術解説】
2023-09-18 10:01:47 +0000 UTCohyamanobuko
2023-09-18 08:39:41 +0000 UTCz-kumagon
2023-09-10 11:44:08 +0000 UTCohyamanobuko
2023-09-08 23:20:56 +0000 UTCスタジオ真榊【AIイラスト術解説】
2023-09-08 05:10:08 +0000 UTCさのけん
2023-09-08 04:22:23 +0000 UTC