見出し画像

AI画像生成超入門 その5.5.1

BREAK構文について

今回は、その5.5のプロンプト紹介で少し触れたBREAK構文について解説というか紹介をしていきます。

BREAKという特殊な命令文はStable Diffusionの実行環境のひとつであるAUTOMATIC1111で実装された機能でプロンプトの中にBREAK(必ず大文字で)という単語を入れると現在のチャンクを埋め尽くして、次のチャンクをスタートするとなっています。

BREAK keyword

Adding a BREAK keyword (must be uppercase) fills the current chunks with padding characters. Adding more text after BREAK text will start a new chunk.

https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Features

なぜ、そのようなことをする必要があるのか?
プロンプトを書くときに、例えば

1girl, solo

と書いたとします。そうするとこれは3トークンと計算されます。1単語が1トークンでカンマも1トークンとして数えられます。これが75トークンで1チャンクとなります。
今まで説明していませんでしたが、プロンプトは先頭にあるほうが優先度が高くなりますので、75トークン目の単語よりも1トークン目の単語を重要視します。
しかし、76トークン目は新たなスタートとして扱われるので75トークン目よりも優先度が上がります。
(ただし、1トークン目と76トークン目を比べると1トークン目のほうが上のようです。)

この状況を強制的に作り出すのがBREAK構文です。
通常1〜75トークンまで書いてから76トークンになるところを、BREAKと入れることで、例えば

1girl, solo, loli, smile
BREAK red ribbon, yellow hat

のように書くことで、最初の7トークンで1つ目のチャンクが終了し(8〜75は自動で埋められました)、76トークン目としてred ribbonが認識されます。
このように短いプロンプトではあまり効果はありませんが、プロンプトが長くなってくると意図的にBREAKを使って優先度の調整が必要になってくる場合があります。

おまけ:
で、今までTensorArtでもBREAK使っていたけど、これってA1111の機能なので使えていたんでしょうかね?
最近SD Web UI Parserなる機能が追加されたけど、ANDもBREAKも無効らしいのでよく分かりません。ちょっと今TensorArt自体がいろいろ内部構造をいじってるみたいで公式アナウンスもないので完全に手探りです。
Samplerも表記が変わってSchedulerと分かれたみたいですし。
Euler Aはeuler_Ancestral + normalになったと思います。
また、なにか分かったことがあれば追記します。

この記事が気に入ったらサポートをしてみませんか?