今回は、2023年4月6日に実装されました、「Permutation」について解説していきます。
実装当初は「Proプラン」のみの機能でしたが、現時点では「Standardプラン」の方でも使用可能です。
Pro、Standard プランどちらも「fastモード」でのみ動作します。
「Permutation」は使いこなせると、時短になると思いますし、面白い機能ですのでご紹介していきます。
Permutationについて
Permutation(パーミュテイション)とは「順列」のことです。
高校数学Aで順列を習った方もいらっしゃると思います。
Permutation機能を使うことにより、数Aの順列の様に、いくつかのプロンプトを組み合わせて並べていくことが出来ます。
{}が必須
必要なプロンプトは {} です。
{}の中にテキストを複数挿入したり、複数の{}を使用することで、組み合わせを指示することができます。
例えば、
{A,B} {C, D}
とプロンプトを書いた場合、
- AC
- AD
- BC
- BD
の4種類のプロンプトが実行されて、画像出力されることになります。
左に配置されたAは常に左側に位置します。CAやDAのような順番にはなりません。
同じくCB、DBという順番にもなりません。
「,」で分割
{A,B} {C, D} において、{}内の「,」が重要な役割を担っています。
「,」が{}内の要素を分割しています。
分割されたそれぞれの要素が、他の{}内の独立した要素と組み合わさるという流れです。
具体例
具体例を見ていきましょう。
「Japanese woman」というプロンプトの後に、{20歳、40歳} {笑っている、怒っている}
という意味のプロンプトを入れてみます。
英語にしてみます。
Japanese woman {20 yeas old, 40 years old} {smile, angry}
となります。
当然ですが、Permutation機能が適用されるのは、{}の中身に対してのみです。
この場合ですと、「Japanese woman」は{}の中に入っていませんので、常に固定されたプロンプトとなります。
Japanese woman {20 yeas old, 40 years old} {smile, angry} の組み合わせは以下の様になります。
{20 yeas old, 40 years old} で2通り。
{smile, angry}で2通り。
2×2=4となり、上記のように4通りの組み合わせが出来ます。
これを実行すると、
生成コマンド「Japanese woman 20 years old smile」
生成コマンド「Japanese woman 20 years old angry」
生成コマンド「Japanese woman 40 years old smile」
生成コマンド「Japanese woman 40 years old angry」
という風に4通りのジョブが実行されます。
4種類のボタンについて
{}を使って、Permutation機能を使用する際に限って、上図のように4つのボタンが表示されます。
左から「Yes」「No」「Show Prompts」「Edit Template」となっています。
Yesボタン
「Yes」ボタンを押すと、そのままジョブが同時に実行されます。
Noボタン
「No」ボタンを押すと、上記の様にプロンプトに横線が引かれて、プロンプトが無効になります。
Show Prompts
Permutation機能は、一度実行してしまうと、複数のジョブが同時に始動するため、fastモードの残り時間がたくさん削られてしまいます。
間違ったプロンプトに気づかずに、大量の組み合わせを始動させると大変なことになります。
始動後には「Cancel All」というボタンも出現しますが、押しても上手くキャンセルできないこともあります。
予防策として、「Show Prompts」ボタンを押すと、上図のように、実行するコマンド全てを記載してくれます。
Permutation機能を使用する際には、プロンプトや組み合わせに間違いがないか確認するために「Show Prompts」ボタンを押すのをオススメします。
Edit Template
「Edit Template」ボタンを押すと、上図のようにプロンプトが表示されます。
自由に修正・追記することが可能です。
例えば、「40 years old」を「80 years old」に変えて、「送信」ボタンを押してみます。
すると、上図のように「80 years old」に修正されています。
{}単独で使用することも可能
{}を複数使用して、それぞれを組み合わせる方法が一般的ですが、{}単独でも機能します。
Japanese woman {20 yeas old, 40 years old, 80 years old}.
というように、{}はひとつだけで、その中に3つの単語を入れてみました。
そうすると、上記のように3通りのプロンプトが生成されます。
{}内の独立した3つの要素が使われてプロンプトができています。
スタイライズ値やカオス値をいくつか試してみたりなど、色々と便利な使い方があるかもしれません。
半角スペースの入れ方
Permutation機能の細かい注意点として、半角スペースの挿入があります。
基本的には、{}の両外側に半角スペースを入れておくと無難です。
例えば、
Japanese woman {20 years old, 80 years old} {smile, angry}
というコマンドであれば、
Japanese woman「半角スペース」{20 years old, 80 years old}「半角スペース」{smile, angry}「半角スペース」
としておくと良いでしょう。
もし、
Japanese woman{20 years old, 80 years old}{smile, angry}
という風に{}の前後がぎゅうぎゅう詰めになっていると、
上図のように、「woman20」や「oldsmile」というなぞの単語を生み出してしまいます。
生成コマンド「Japanese woman20 years oldangry」
上の画像は「oldangry」という謎のプロンプトによって、本来の「20歳の日本女性が怒っている」という意味の画像とは違うものが出力されてしまいます。
よって、基本的には{}の前後に半角スペースを置く様にしておきましょう。
パラメーター「--」は例外
ただし、パラメーターを使用する場合は、「--{」 のように、「--」と「{」をくっつけておく必要があります。半角スペースは不要ということです。
また、--{A, B}のように、「{」の直後にも半角スペースは不要となりますのでご注意ください。
つまり、「--」を使用する場合は、{ の前後は半角スペース不要ということです。
「,」の直後には半角スペースがあっても無くても大丈夫です。
結論として、--{A, B}もしくは--{A,B}という記述で大丈夫です。
ProプランとStandardプラン、Basicプランの違い
Proプラン
月額60ドル(年額576ドル)で加入できるProプランに加入している場合、Permutation機能のジョブを40個始動可能です。
生成コマンド「Very {cute, cool} {dog, cat, bird, turtle, rabbit} is {walk, run} on {road, expressway}.」のように、{}を多数使用して、{}内の要素も多数分割して、合計40通りのジョブまで生成することが出来ます。
ちょうど40語のジョブが確認できます。
Standardプラン
月額30ドル(年額288ドル)で加入できるStandardプランに加入している場合は、Permutation機能で出力できるジョブは10個までとなります。
10個を超える組み合わせをスタートさせようとすると、上記の表示が出現して実行させてもらえません。
Basicプラン
月額10ドル(年額96ドル)で加入できるBasicプランに加入している場合は、Permutation機能で出力できるジョブは4個までとなります。
a {dog, cat} in the style of {vaporwave, art deco} のような形が限界となります。
Standardプラン、Basicプランでは使用できなくなる可能性もある
また、本来はPermutation機能はProプランのみの機能です。
現在Standardプラン、BasicプランでもPermutation機能を使用できますが、サーバーにかかる負荷状況等によってはProプランのみに制限される可能性があります。
Fastモード限定
Proプラン、Standardプランともに、Permutation機能を使用するには「fastモード」でなければなりません。
「relaxモード」では使用できない機能となっていますので、「fastモード」の残量にはご注意ください。
{}の中に{}を入れることも可能
Permutation機能では、{}の中にさらに{}を入れて分割することが出来ます。
たとえば、
Japanese woman {20 yeas old, 40 years old}, {smile, angry}
というプロンプトの{smile, angry}の部分に{}を入れてみます。
{smile {with a cat, with a dog}, angry {with a bird, with a pig}}
という風にしてみました。
Japanese woman {20 yeas old, 40 years old}, {smile {with a cat, with a dog}, angry {with a bird, with a pig}}
{20 yeas old, 40 years old}で2通り。
{smile {with a cat, with a dog}で2通り。
angry {with a bird, with a pig}で2通り。
2×2×2で合計8通りのプロンプトが作成されます。
ということで、ちょっと難しいですがより細かくパターンを作る際に試してみてはどうでしょうか。
エスケープ機能
Permutation機能には、エスケープ機能というものがあります。
エスケープ機能は、{}内の「,」を分割の意味で使用せずに、そのままの「,」の意味で使用するためのものです。
エスケープ機能に必要な記号としては「\」となります(スラッシュ「/」ではなく、バックスラッシュ「\」です)。
そのバックスラッシュ「\」を「,」の直前に配置すると、エスケープ機能が発動します。
つまり、「,\」とすれば、その「,」は分割の機能を果たさなくなります。
具体例を示します。
Japanese woman {20 yeas old, 40 years old}, {smile, angry, cry}
というコマンドでは、
2通り×3通りの合計6通りのプロンプトが生成されます。
Japanese woman {20 yeas old, 40 years old}, {smile, angry, cry}
このプロンプトの右端のcryの前にある「,」に対してエスケープ機能を使ってみます。
Japanese woman {20 yeas old, 40 years old}, {smile, angry \, cry}
こうなります。
これで実行すると、
このように、4通りのプロンプトに減っています。
これは、「angry」と「cry」が元々は分割されていたのが、エスケープ機能を使用したことにより、同一の括りとみなされたということです。
Japanese woman {20 yeas old, 40 years old}, {smile, angry, cry}
色分けすると上記のようになります。
「\」を使って分割をオフにしてみたり、あるいは「\」を削除して分割を再びオンにしてみたりして、色々なパターンを試すといいのかもしれません。
パラメーターもPermutation可能
これまでに少し触れてきましたが、Permutation機能はパラメーターにも対応しています。
アスペクト比(--ar)や、スタイラズ値(--s)、カオス値(--c)やバージョン(--v)など、様々なパラメーターを{}内に入れることが出来ます。
パラメーター使用例
パラメーターの使用例をひとつご紹介します。
今回はアスペクト比「--ar」を取り扱います。
例として以下の様に記述します。
※前述しましたが、「--{」という形をとる時は、「{」の前後に半角スペースは不要となります。
上図の様に、4通りのプロンプトで生成されます。
生成コマンド「Japanese woman 20 yeas old, --ar 1:2」
生成コマンド「Japanese woman 20 yeas old, --ar 2:1」
生成コマンド「Japanese woman 40 years old, --ar 1:2」
生成コマンド「Japanese woman 40 years old, --ar 2:1」
以上の様に、アスペクト比を変えると構図も変わって絵の印象も変化します。
Permutation機能を使うことで、色んなアスペクト比を一気に試すことが出来ます。
他にも、
- --c (カオス値)
- --s (スタイライズ値)
- --v (Midjourneyのバージョン)
- --niji (niji・journeyのバージョン)
- --no (以降のテキストプロンプトを描写しづらくする)
- --seed (seed値)
などがあります。
これらのパラメーターに、様々な数値や語句を入れて大量に実験すると、多くのヒントが得られるかもしれません。
プロンプトウェイトもPermutation機能で使える
「::数字」を使用して、単語の重さを調整することができます。
「::数字」をプロンプトウェイトと呼びますが、Permutation機能もそれに対応しています。
例を示します。
上のコマンドのように、{}内の単語の直後にそれぞれ「::」と数字を記述しています。
「::」の直後の数字が大きいほど、その単語の影響力が大きくなって画像生成に反映されます。
今回の例では、sushi(お寿司)とhamburger(ハンバーガー)を比較しています。
なぜかというと、
sushi and hamburger::2
よりも、
sushi::1 and hamburger::2
のほうが、ハンバーガーの影響力が寿司よりも大きいということが分かりやすい画像になるからです。プロンプトの直後に「::」を置くと、そのプロンプトは独立した概念として認識されます(マルチプロンプト化)。
マルチプロンプトが2つあった場合、両者はプロンプトウェイト(:: 数字)の数値に比例して画像の露出度に影響しやすくなります。
つまり、プロンプトウェイトの比較対象としたい他のプロンプトがある場合は、そちらの方にも「::」を用いてマルチプロンプト化しておくと、プロンプトウェイトの影響が表現されやすいです。
Permutation機能を使って4通りのプロンプトが生成されることになります。
生成コマンド「Looks delicious sushi::1 and hamburger::1」
寿司が1、ハンバーガー1のプロンプトウェイトです。
プロンプトは文章の先頭に近いほど画像生成に影響を与えやすいです。
寿司とハンバーガーでは、寿司のほうが文章の先頭に近いため、寿司が少し優勢に生成されていると思います。
生成コマンド「Looks delicious sushi::1 and hamburger::1.5」
寿司1、ハンバーガー1.5のプロンプトウェイトです。
生成頻度で言えば、ハンバーガーが寿司を逆転しています。
生成コマンド「Looks delicious sushi::1 and hamburger::2」
寿司1、ハンバーガー2のプロンプトウェイトです。
すべてハンバーガーの画像となりました。
左下のハンバーガーは若干寿司っぽさが残っています。
生成コマンド「Looks delicious sushi::1 and hamburger::3」
寿司1、ハンバーガー3のプロンプトウェイトです。
4つの画像すべてが完全なハンバーガーとなっています。
以上の様に、プロンプトウェイトを一斉に試す場合にもPermutation機能は有効です。
ということで、Permutation機能について解説してきました。