この記事は内容の古くなったアーカイブ記事です。特に理由がなければ、こちらのアップデート版をお読みください。
こんにちは、スタジオ真榊です。こちらの記事では、画像生成(text2image)の基本であるプロンプト作成術について、熟達するまでに必要な知識をまとめたいと思います。プロンプトから画像が生成される仕組みやネガティブプロンプトの使い方といった基本部分から、特殊なプロンプト記法、有用なオススメ拡張機能まで、プロンプトを組むことに関わるさまざまな事項について網羅的に紹介していきます。
具体的なタグの一覧については、こちらの「プロンプト超辞典」をご参照ください。
はじめに ~プロンプトはなぜ「効く」のか~
画像生成を始めたばかりのときは「このタグはよく効くけど、このタグは効かないな」と感じる場面が多いのではないでしょうか。例えば、「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が指示を誤解する」
プロンプトの書き方によっては、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を使いましょう!






