ComfyUI Prompt Order
Stable prompt tag ordering for ComfyUI with model presets, pinned tags, and user dictionaries.
ComfyUI-Prompt-Order
日本語 | English
既存のプロンプトをタグごとに分類し、選択した順番へ並べ替える独立したComfyUIカスタムノードです。先頭・末尾への固定と、ユーザー辞書による分類の追加・上書きに対応します。CPUで文字列だけを処理し、Python標準ライブラリを使用します。
インストール
このフォルダをComfyUIのcustom_nodes/ComfyUI-Prompt-Orderに配置し、ComfyUIを再起動してください。Python 3.10以上を使用します。追加ライブラリやモデルの導入は不要です。
ノード一覧からプロンプト順序整理を追加します。カテゴリはprompt/ordering、登録名はComfyUIPromptOrderです。ComfyUIの言語設定が日本語ならノード名・入力名・出力名・説明を日本語で表示し、その他の言語では英語で表示します。英語のノード名はPrompt Orderです。内部の入力名、プリセット値、カテゴリ名は表示言語によらず共通です。
基本的な使い方
前段のプロンプトノードのSTRING出力をpromptへ接続し、ordered_promptをCLIP Text Encodeのtext入力へ接続します。promptは接続専用です。プロンプトは前段ノードで編集してください。
入力ソケットはpromptだけです。プリセットやカテゴリ順などの設定は、ノード内の設定欄で編集します。
入力: masterpiece, long_hair, smile, 1girl, solo
出力: 1girl, solo, long_hair, smile, masterpiece
以前の直接入力形式で保存したワークフローを使う場合は、プロンプトを前段ノードへ移し、このノードを追加し直してSTRING出力を接続してください。プリセット・カテゴリ順・固定・辞書などの設定も移してください。
設定
| 設定 | 意味 |
| --- | --- |
| prompt | 前段ノードのSTRING出力から受け取るプロンプト |
| preset | Illustrious、Animagine XL 4.0、Customの整理順 |
| category_order | カテゴリ名をカンマ区切りで指定する順番。空欄ならプリセット順 |
| pin_front | 入力中に存在するタグを、指定順に先頭へ固定 |
| pin_back | 入力中に存在するタグを、指定順に末尾へ固定 |
| user_dictionary | 分類を追加・上書きするJSON |
| enabled | falseなら空白と改行を含む入力文字列をそのまま返す |
設定はすべて標準ウィジェットの値としてワークフローに保存されます。ノードごとに設定を受け取り、別のノードへ共有しません。設定値の変更はComfyUIの通常の入力キャッシュ判定に反映されます。組み込みデータファイルを編集した場合はComfyUIを再起動してください。
カテゴリ順とプリセット
category_orderが空欄の場合に使用する順番は次のとおりです。
Illustrious / Custom
subject, character, copyright, rating, artist_style, appearance, clothing, pose_expression, composition, background_lighting, general, quality, score, temporal
Animagine XL 4.0
subject, character, copyright, artist_style, rating, appearance, clothing, pose_expression, composition, background_lighting, general, quality, score, temporal
category_orderを入力すると、その順番を優先します。省略したカテゴリは選択中のプリセット順で末尾へ補います。例えばquality, subjectなら品質、主体の順に置き、その後へ残りのカテゴリを補います。カテゴリの重複、空の項目、不明な名前は設定エラーです。Customの補完基準はIllustriousです。
プリセットを変更しても入力済みのcategory_orderは書き換えません。プリセット順へ戻す場合はこの欄を空にしてください。この適用規則は再読込後も同じです。
| カテゴリ | 内容 |
| --- | --- |
| subject | 人数・主体・solo |
| character | 辞書で指定したキャラクター名 |
| copyright | 辞書で指定した作品名 |
| artist_style | 作者・画風 |
| rating | レーティング |
| appearance | 髪・目・顔・体の特徴 |
| clothing | 衣装・装飾 |
| pose_expression | 姿勢・動作・表情・視線 |
| composition | 画角・視点・構図 |
| background_lighting | 背景・場所・光 |
| general | 未分類・その他 |
| quality | 品質・解像度 |
| score | スコア |
| temporal | 年代 |
Illustriousのカテゴリ順は、このノードの整理ルールです。公式のIllustrious-xl-early-release-v0モデルカードを参照していますが、全カテゴリの厳密な順番を公式推奨として扱いません。派生・マージモデルでは、使用するモデルに合わせて順番を調整してください。
Animagine XL 4.0では、公式ガイドにある主体・キャラクター・作品・作者タグの前方配置と、品質タグの後方配置を反映しています。レーティングの位置や一般属性内の細かな順番は、ノードの整理ルールです。作者名と画風は同じカテゴリにまとめています。これらのカテゴリは整理用であり、学習時の全タグ順の再現を目的としません。
順番による画質向上は保証しません。入力済みのタグの配置だけを変更し、品質・レーティング・年代タグの自動追加、削除、重複除去、翻訳、重み変更は行いません。77トークンを超えた入力も削除・切り詰めません。
先頭・末尾への固定
prompt: long hair, blue eyes, 1girl, long_hair, solo
pin_front: solo, long hair
pin_back: blue eyes
出力: solo, long hair, long_hair, 1girl, blue eyes
固定一覧の順番に配置し、同じ指定に一致する入力が複数ある場合はすべて保持します。その中では入力順を維持します。入力に存在しない指定は無視します。先頭と末尾へ同じタグを指定すると設定エラーになります。
単一タグは重みと外側の括弧を照合時に外すため、long hairの指定で(long_hair:1.2)も固定できます。出力には元の表記を残します。複数タグのグループは、例えば(red dress, white gloves:1.2)全体を同じ表記で指定した場合だけ固定できます。グループの先頭・末尾空白は照合対象から外します。
ユーザー辞書
user_dictionaryに次のようなJSONを入力します。
{
"version": 1,
"tags": {
"my_original_character": "character",
"my_costume_trigger": "clothing",
"my_style_trigger": "artist_style",
"long hair": "general"
}
}
ユーザー辞書は組み込み辞書と人数規則より優先します。空欄、{}、{"version": 1, "tags": {}}はいずれも空の辞書として有効です。versionは整数の1を指定します。JSON形式不正、不明なカテゴリ、余分な項目、重複キー、照合上競合するタグ名は具体的な設定エラーになります。例えばlong_hairとlong hairを両方定義すると、同じカテゴリでも競合します。
照合時だけ、大文字・小文字、アンダースコアと空白、連続する空白、対応するエスケープ済み記号を正規化します。出力のタグは元の表記を維持します。辞書のキーには単一タグを指定してください。複数タググループ、embedding、特殊構文は辞書項目にできません。
分類できる範囲
data/tags.jsonには主体、容姿、衣装、姿勢、構図、背景、画風、品質などの分類を収録しています。正規化後の完全一致で照合し、部分一致は使いません。1girlや3boysのような人数タグだけ、正の整数とgirl、boy、otherおよび末尾のsからなる限定規則で補います。
キャラクター名、作品名、作者名は初期辞書に収録していません。括弧や語形から推測せず、ユーザー辞書で明示します。収録していない属性や複合タグはgeneralとして保持します。同一カテゴリでは入力順を維持します。組み込み辞書はdata/tags.json、整理順はdata/presets.jsonで別々に管理します。
構文と改行の扱い
エスケープと丸括弧・角括弧の深さを確認し、括弧の外にあるカンマと空行で分割します。空行は、間に空白やタブを挟んでもよい2回以上の改行です。(long hair:1.2)、((long hair))、[long hair]、エスケープされたカンマや括弧は、その表記を保持します。単一タグの重み付き表現は内部タグで照合します。固定一覧も同じ分割規則を使います。
(red dress, white gloves:1.2)のような複数タググループは分解せず、一単位としてgeneralに分類します。embedding:nameも一単位のgeneralとして保持します。
安全に整理できる入力は、各単位の前後の空白を取り除き、区切りを, へ統一します。例えばclose-up、自然文の段落、画風タグを空行で区切ると、それぞれの間にコンマを入れます。単一の改行、括弧内の空行、エスケープされた改行は分割せず、各単位の内部表記を保持します。スペースだけで並んだタグ名は推測で分割しません。
次の入力はプロンプト全体を変更せず返し、標準ログに短い警告を出します。ログにプロンプト全文は出しません。
- エスケープされていない
BREAK、AND、ADDCOMM、ADDBASE、ADDCOL、ADDROW、REGION、MASKなどの制御語 - 波括弧、山括弧、
|、__を含む動的プロンプト、ワイルドカード、領域・LoRAなどの構文 [red:blue:0.5]などのスケジュール構文- 数値重みと
embedding:name以外のエスケープされていないコロン構文 - 対応が不正な括弧、閉じていない括弧、末尾の未完了エスケープ、連続・先頭・末尾カンマによる空の単位
対象は一般的なタグ列です。拡張機能ごとの独自構文を完全に解析するものではありません。対応範囲が不明な構文にはenabled=falseを使用してください。安全性確認と無効設定による全文維持は、他の設定の検証より先に行います。安全な入力に対して固定設定の構文が不正な場合は、設定エラーになります。
このノードは受け取った文字列を処理します。接続元で動的プロンプトを展開した場合は、展開後の文字列が処理対象です。
テスト
プロジェクトフォルダで次を実行すると、標準ライブラリの自動テストを実行できます。
python -m unittest discover -s tests -v
テストでは期待する出力、プリセット順、安定ソート、構文保持、固定、辞書上書き、設定エラー、全文維持、再処理時の同一結果、単位の内容と出現数の保持を確認します。
既存のComfyUI環境を使う場合は、その環境のPythonから次の任意チェックを実行できます。ComfyUIのローダーでこのソースを読み込む別プロセスを使用します。
<ComfyUIのPython> tests/check_comfyui.py --comfyui-root <ComfyUIフォルダ>
ブラウザでの確認は、インストール後にノードを追加し、前段からのSTRING接続、CLIP Text Encodeとの接続、設定が異なる複数ノード、ワークフロー保存・再読込を順に確認してください。
公式資料
- Animagine XL 4.0公式ガイドと更新情報。4.0と4.0-Optの作者タグ・品質タグの配置を確認しています。
- Animagine XL 4.0モデルカード。主体・キャラクター・作品と品質タグの推奨を確認しています。
- Illustrious XL early release v0モデルカード。品質タグやベースモデルの使い方を説明しています。
- ComfyUIカスタムノードの入力。標準入力とウィジェットを使用しています。
- ComfyUIカスタムノードの翻訳仕様。ノードの表示言語に使用しています。