ワイルドカード構文リファレンス

ワイルドカード構文リファレンス

Prompt・Negative・キャラクター欄で共通して使用できます。例中の # コメントと → の右側は説明用です(入力しません)。抽選結果は一例です。

ファイルの置き場所やWildcardsタブの使い方は、マニュアルのWildcardsを参照してください。

早見表

書き方できること
{A|B|C}候補から1つランダムに選ぶ詳しく →
{3%%A|1%%B}当たりやすさ(重み)を変える詳しく →
{2$$A|B|C} / {1-3$$A|B|C}候補を複数選ぶ詳しく →
{2$$ + $$A|B|C}選んだ候補のつなぎ方を指定する詳しく →
__name__ / __folder/name__TXTファイルから選ぶ詳しく →
__folder/*__ファイル名を検索して選ぶ詳しく →
{2$$__name__}ファイルから複数選ぶ詳しく →
__file/key/subkey__YAML / JSONのキーから選ぶ詳しく →
CHAR:A1: …YAMLからキャラクタープロンプトを追加する詳しく →
[SEQ:__name__] / [SEQ:__name__:2]連続生成で候補を順番に使う詳しく →
<!…!> / <ppp:stn>…<ppp:/stn>Negativeへ移動する詳しく →
[__name__]抽選後も弱調として残す詳しく →

候補を1つランダムに選ぶ

# | で区切った候補から1つ選びます
{red|blue|green} hair          → blue hair

# それぞれ独立に選びます
{shirt|jacket}, {skirt|pants}  → jacket, skirt

# 候補を入れ子にします
{short|{long|very long}} hair → very long hair

当たりやすさを変える

# red と blue の当たりやすさを3対1にします
{3%%red|1%%blue} hair    → red hair

# 小数でも指定できます
{0.5%%red|1.5%%blue}     → blue

# 重みを省略すると1になります
{3%%red|blue}           → red

# 0以下の重みは0として扱います。全候補が0なら均等に抽選します
{0%%red|1%%blue}         → blue

複数の候補を選ぶ

# 2個選びます。同じ候補を再選択せず、抽選順に並べます
{2$$red|blue|green}             → green, red

# 1〜3個選びます
{1-3$$red|blue|green}           → red, blue, green

# 下限を省略すると1個から選びます
{-2$$red|blue|green}            → blue, red

# 上限を省略すると全候補まで選べます。個数は1〜候補数に収まります
{2-$$red|blue|green}            → red, green

# 個数と当たりやすさを組み合わせます
{2$$3%%red|1%%blue|1%%green}    → red, blue

選んだ候補のつなぎ方を変える

# 区切りを省略すると「, 」でつなぎます
{2$$red|blue|green}          → red, blue

# {個数$$区切り文字$$候補|候補} で指定します
{2$$ + $$red|blue|green}     → red + blue
{2$$ / $$red|blue|green}     → red / blue

# 区切り文字を空にします
{2$$$$red|blue|green}        → redblue

TXTから候補を選ぶ

wildcards/tag.txt
# 色の候補です
red
blue
green
wildcards/clothes/top.txt
shirt
jacket
coat
wildcards/clothes/bottom.txt
skirt
pants
shorts
# 保存先は設定のワイルドカードフォルダーです(通常は wildcards)
# UTF-8・1行1候補で保存します。空行と行頭が # の行は除外します
# 設定フォルダーからの相対パスで、拡張子を省略します
# 設定が .../wildcards なら __tag__ と書きます。wildcards/ は付けません
# __wildcards/tag__ と書くと .../wildcards/wildcards/tag.txt を参照します
__tag__ hair                         → blue hair

# サブフォルダーは / で区切ります
__clothes/top__                      → jacket
__clothes/top__, __clothes/bottom__  → shirt, skirt

# 出現箇所ごとに独立に抽選するため、同じ結果にもなります
__tag__, __tag__                     → red, red

ファイル名を検索して選ぶ

# 一致した全ファイルの候補をまとめて抽選します
# YAML内部のキーを検索する指定ではありません
__clothes/*__                        → shorts

# 拡張子も指定できます
__clothes/*.txt__                    → coat

# [tb] は t または b に一致します
__clothes/[tb]*__                    → pants

# **/ は下位フォルダーも対象にします
__clothes/**/*__                     → shirt

ファイルから複数選ぶ

# 参照先の候補一覧から2個選びます
# 一覧に同じ文字列が複数あれば、結果の文字列も重複する場合があります
{2$$__tag__}                       → red, green

# 個数の範囲・区切り文字も指定できます
{1-3$$__tag__}                     → blue
{2$$ + $$__tag__}                  → blue + red

# 複数ファイルからまとめて選びます
{2$$__clothes/*__}                 → shirt, pants

# ファイル参照と直接指定を候補にします
{__tag__|black} hair               → green hair

YAMLのキーから選ぶ

wildcards/pack.yaml
outfit:
  color:
    - white
    - black
  top:
    - "__color__ shirt"
  set:
    - "__top__, __clothes/bottom__"
color:
  - red
  - blue
# __ファイル名/キー/子キー__ で参照します(.yaml / .yml に対応しています)
__pack/outfit/color__      → white

# __color__ は近い階層の white / black を使います
# ルートの red / blue より優先します
__pack/outfit/top__        → black shirt
__pack/outfit/set__        → white shirt, skirt

# キーの候補から複数選びます
{2$$__pack/outfit/color__} → white, black

# ファイル名だけなら全キー配下から選びます
__pack__                  → black shirt

# 従来のキーだけの参照も使えます。ファイルを特定する場合はファイル名から書きます
__outfit/top__             → white shirt

YAMLで複数のキャラクタープロンプトを追加する

wildcards/characters.yaml
# |- で改行を保持し、複数行を1つの候補として保存します
# CHAR: __clothes/top__ のように位置を省略することもできます
# 共通プロンプトを先に書き、CHAR: の行を末尾にまとめます
# CHAR: 以降は、次の CHAR: または末尾までがそのキャラクターの内容になります
scene:
  - |-
    landscape
    CHAR:A1: __clothes/top__
    CHAR:E5: {red|blue} hair
# プロンプト欄には次のワイルドカードを書きます
# CHAR: を含むワイルドカードは、プロンプト全体の末尾に置きます
# 共通タグを追加する場合は cinematic lighting, __characters/scene__ のように前へ書きます
# このワイルドカードの後に入力した通常のプロンプトは、最後のキャラクタープロンプトに吸収されます
# 改行してから入力しても同じです。共通プロンプトにしたい内容は、ワイルドカードの前に書きます
__characters/scene__
# 次のように展開され、CHAR: の内容を各キャラクタープロンプトへ振り分けます
# CHAR: は本アプリの記法です。API送信前に共通プロンプトと各キャラクターへ分離します
# メインは landscape、キャラクターは jacket / blue hair などになります
# 位置指定ON時、A1は左上、E5は右下です(横 A〜E・縦 1〜5)
landscape
CHAR:A1: jacket
CHAR:E5: blue hair

# 構造化キャラクター非対応モデルでは本文へ結合します
# 後ろに追記すると、cinematic lighting は共通ではなく最後のキャラクターの内容になります
__characters/scene__, cinematic lighting

# 改行して追記した場合も、cinematic lighting は最後のキャラクターの内容になります
__characters/scene__
cinematic lighting

# 共通プロンプトとして使う場合は、ワイルドカードの前に書きます
cinematic lighting, __characters/scene__

JSONのキーから選ぶ

wildcards/weather.json
{"sky": ["sunny", "cloudy", "rainy"]}
# YAMLと同じ書式で参照します
__weather/sky__ → cloudy

外部ファイルを明示して参照する

wildcards/external/color.txt
purple
# pack.yaml の outfit 内に追加する例です
external_top:
  - "__external/color__ shirt"
# 存在する外部ファイルへのパスを明記すると、その指定先を優先します
# 短い内部参照は、同じ階層 → 親階層 → 同じYAML内の一意な末尾一致 → 外部の順に探します
# 内部候補が複数で曖昧な場合は、参照を残して警告します
__pack/outfit/external_top__ → purple shirt

ファイル名と先頭キーが同じ場合に参照する

wildcards/wardrobe.yaml
wardrobe:
  top:
    - shirt
    - jacket
# ファイル名と先頭キーの両方を書きます
__wardrobe/wardrobe/top__ → shirt

# 重なった名前を1つに省略する書式も使えます
__wardrobe/top__          → jacket

SEQで順番に選ぶ

# 順番選択には SEQ: を明記します
# tag.txt の red / blue / green を1回ずつ使います
# 最後まで進むと先頭へ戻ります
[SEQ:__tag__]         → red → blue → green → red …

# :2 で各候補を2回ずつ使います。省略時は1回、0も1回として扱います
[SEQ:__tag__:2]       → red → red → blue → blue → green → green …

# YAMLの候補を順番に使います
[SEQ:__pack/outfit/color__] → white → black → white …

# 1候補だけのテンプレートに含まれる参照も順番に展開します
[SEQ:__pack/outfit/top__]   → white shirt → black shirt → white shirt …

# GUI: 入力欄へ直接書くと、生成開始時に先頭へ戻して1周分をキューに用意します
# 複数のSEQは周回数の最小公倍数まで生成します。2,000件を超える場合は開始前に確認します
# CLI: --count で生成枚数を指定します
# 旧 [__tag__:2] はSEQとして扱いません。[SEQ:__tag__:2] に変更します

ネガティブへ移動する

# 以下は Negative が lowres の場合です
# <!…!> は末尾へ移します
portrait <!watermark!>
→ Prompt: portrait
→ Negative: lowres, watermark

# stn は先頭へ移します
portrait <ppp:stn>watermark<ppp:/stn>
→ Prompt: portrait
→ Negative: watermark, lowres

# s は先頭を明示します
portrait <ppp:stn s>watermark<ppp:/stn>
→ Prompt: portrait
→ Negative: watermark, lowres

# e は末尾を指定します
portrait <ppp:stn e>watermark<ppp:/stn>
→ Prompt: portrait
→ Negative: lowres, watermark

# 選ばれた候補の内容だけ移します。ワイルドカードの候補内にも書けます
{red hair <!blue hair!>|blue hair <!red hair!>}
→ Prompt: red hair
→ Negative: lowres, blue hair

# キャラクター内の指定は、そのキャラクターのNegativeへ移します
# Negative欄に書いた移動ブロックは、内容をその場に残します
# V5 Full Medium: 対象をPromptから除去し、内部のワイルドカード・SEQは展開しません
# モデル既定の固定Negativeと、エディタ・YAMLの原文は維持します
# pN・iN、閉じ忘れ、移動ブロックの入れ子は送信前にエラーになります

抽選と強調を区別する

# [] はワイルドカード展開後も残し、NovelAIの弱調として送ります
# 候補は通常どおりランダムに選び、SEQは進めません
[__tag__]       → [blue]
[[__tag__]]     → [[red]]

# | や $$ のない波括弧と、NAIの数値強調はそのまま残ります
{red}           → {red}
1.2::red::      → 1.2::red::

# %% は当たりやすさです。TXTの行頭に単独で書いても抽選重みにはなりません
# {3%%red|blue} のように候補の中へ書きます
3%%red          → 3%%red

# 空の候補は除外されます。空文字を選ぶことはありません
{red|}          → red

# ? を含む参照名には未対応です。ファイル名検索は *・**・[ab] を使います
# 見つからない参照・循環参照は、未解決の参照を残してログへ警告します
# 固定Seedでもランダム抽選の結果は変わることがあります
# SEQの固定Seedは維持します。-1の場合だけ画像生成のSeedをランダムにします