Keyword FaceID Settings
Let the prompt pick your FaceID preset
- preset
- weight
- weight_type
- preset_faceid
- lora_strength
- weight_faceid
- weight_faceidv2
- weight_type_faceid
- matched_keyword
- matched_index
- settings_text
- preset_number
"FaceID" is really four nodes and eight numbers. This node is the light switch.
FaceID in ComfyUI is not one node. It's a small subgraph: an IPAdapterUnifiedLoader, an IPAdapterSimple, an IPAdapterUnifiedLoaderFaceID, and an IPAdapterFaceID wired together - those live in cubiq's ComfyUI_IPAdapter_plus pack, not in AUN. Every loader has a preset dropdown, and each adapter takes weights, weight types, a FaceID LoRA strength... If you've built a couple of character workflows you know the ritual: to switch from "portrait of Alice" to "style transfer of Bob" you click through four nodes and hand-type eight numbers, then misremember what you used last time.
AUNKeywordFaceIDSettings is a lookup table for that ritual. You define up to six rows - each row is a keyword plus the eight settings those four IPAdapter nodes consume - and the node picks a row by scanning whatever reference_phrase you feed it. One wire in, a bundle of typed settings out, and your whole FaceID stack follows along.
This is squarely the AUN pack's philosophy: index-driven prompting where one value drives a whole bundle. It makes zero sense until you have a real character-batch workflow, and then you never want to go back to clicking.
How it works
The mechanism is simple (the source is worth a skim if you like that sort of thing): every run it lowercases reference_phrase unless case_sensitive is on, walks the rows top to bottom, and activates the first row where any of its keywords appears as a substring. First match wins is the whole engine - no fuzzy scoring, no priorities, just order. Each keywordN field can hold a comma-separated list, so alice, bob, carol is one row sharing one preset; the matched_keyword output tells you which specific one fired.
Rows are numbered 1–6. visible_inputs (2–6) controls how many are live. The three global controls you actually set:
manual_preset(1–6): your default row. It always has a value - there's no separate "default bundle" anymore, this is the fallback.match_keywords(Yes/No): Yes lets keywords overridemanual_preset; No ignores keywords entirely and always uses the manual row.case_sensitive: off by default. Leave it off unless your keywords genuinely collide on case.
The node returns NaN from IS_CHANGED, so it re-evaluates on every single run. That's the always-rerun trick from the node-plumbing world, and here it's the feature: when the phrase changes between generations, the settings follow it.
What comes out and where it goes
The eight settings outputs are typed to match the exact dropdown options and float ranges of the IPAdapter nodes, so they plug straight into converted widget inputs: preset/weight_type → IPAdapterSimple, weight → its weight, preset_faceid → the FaceID loader, and lora_strength, weight_faceid, weight_faceidv2, weight_type_faceid → IPAdapterFaceID.
Three bonus outputs earn their keep: matched_keyword and matched_index (which row won), settings_text (the active bundle as a Python-style tuple - hand it to AUNPathFilenameV2 or a Show Any node for filenames), and preset_number ("FaceIDPreset-3" if you name presets that way).
Install
Same as the rest of AUN:
cd ComfyUI/custom_nodes
git clone https://github.com/loz2754/AUN-ComfyUI-Nodes
or ComfyUI Manager → search "AUN" → install → restart. The pack's requirements.txt (piexif, opencv-python-headless, imageio-ffmpeg, requests) is for the whole collection - this node is pure Python and needs none of it. What it does need upstream: ComfyUI_IPAdapter_plus installed, the actual IPAdapter/FaceID model files, and for FaceID specifically the insightface package - the perennial install headache. If insightface trips you up, follow IPAdapter_plus's own install notes.
Where people get burned
- SD1.5-only presets on an SDXL workflow.
LIGHT - SD1.5 only,FULL FACE - SD1.5 only,FACEID PLUS - SD1.5 onlyandFACEID PORTRAIT UNNORM - SDXL onlyare all in the same dropdowns. The names say it, but when you're configuring six rows fast it's easy to grab the wrong one. - Nothing matches, silently. With
match_keywords=Yesand no hit, you fall back tomanual_preset- a great safety net, until you forget it's there and wonder why Alice got Bob's settings. Checkmatched_indexor the node's compact footer (it shows the active bundle) when output looks off. - Substring false positives. A keyword like
facematchesinterface. Order rows specific-first - first match wins - and use distinctive keywords. - The node always re-runs (that
NaN). It's cheap string matching, so this is fine; just know it's deliberate if you ever see it defeating a cache.
Inputs (59)
| Name | Type | Default | Description |
|---|---|---|---|
| visible_inputs | INT | 52–6 | How many keyword/settings presets are active (2-6). Row N uses keywordN + its settings. |
| case_sensitive | BOOLEAN | false | If enabled, keyword matching is case-sensitive. |
| manual_preset | COMBO | 1 | Which preset row (1-6) to use as the active bundle. Clamped to visible_inputs. With match_keywords=No, this is always used. With match_keywords=Yes, keywords can override it when they match. |
| match_keywords | COMBO | Yes | Yes: keywords in reference_phrase are matched; the first matching row's settings are used, falling back to manual_preset when nothing matches. No: keywords are ignored; manual_preset is always used. |
| reference_phraseopt | STRING | Text to scan for keywords. Keywords are matched as substrings. | |
| keyword1opt | STRING | Keyword 1 to match against the reference phrase. Matched as a substring. Comma-separated to allow multiple keywords on this row (any one matching activates it). | |
| preset1opt | COMBO | PLUS FACE (portraits) | IPAdapterUnifiedLoader preset for keyword 1. |
| weight1opt | FLOAT | 1.00-1–3 | IPAdapterSimple weight for keyword 1. |
| weight_type1opt | COMBO | prompt is more important | IPAdapterSimple weight_type for keyword 1. |
| preset_faceid1opt | COMBO | FACEID PLUS V2 | IPAdapterUnifiedLoaderFaceID preset for keyword 1. |
| lora_strength1opt | FLOAT | 0.600–1 | FaceID LoRA strength for keyword 1. |
| weight_faceid1opt | FLOAT | 1.00-1–3 | IPAdapterFaceID weight for keyword 1. |
| weight_faceidv21opt | FLOAT | 1.00-1–5 | IPAdapterFaceID weight_faceidv2 for keyword 1. |
| weight_type_faceid1opt | COMBO | linear | IPAdapterFaceID weight_type for keyword 1. |
| keyword2opt | STRING | Keyword 2 to match against the reference phrase. Matched as a substring. Comma-separated to allow multiple keywords on this row (any one matching activates it). | |
| preset2opt | COMBO | PLUS FACE (portraits) | IPAdapterUnifiedLoader preset for keyword 2. |
| weight2opt | FLOAT | 1.00-1–3 | IPAdapterSimple weight for keyword 2. |
| weight_type2opt | COMBO | prompt is more important | IPAdapterSimple weight_type for keyword 2. |
| preset_faceid2opt | COMBO | FACEID PLUS V2 | IPAdapterUnifiedLoaderFaceID preset for keyword 2. |
| lora_strength2opt | FLOAT | 0.600–1 | FaceID LoRA strength for keyword 2. |
| weight_faceid2opt | FLOAT | 1.00-1–3 | IPAdapterFaceID weight for keyword 2. |
| weight_faceidv22opt | FLOAT | 1.00-1–5 | IPAdapterFaceID weight_faceidv2 for keyword 2. |
| weight_type_faceid2opt | COMBO | linear | IPAdapterFaceID weight_type for keyword 2. |
| keyword3opt | STRING | Keyword 3 to match against the reference phrase. Matched as a substring. Comma-separated to allow multiple keywords on this row (any one matching activates it). | |
| preset3opt | COMBO | PLUS FACE (portraits) | IPAdapterUnifiedLoader preset for keyword 3. |
| weight3opt | FLOAT | 1.00-1–3 | IPAdapterSimple weight for keyword 3. |
| weight_type3opt | COMBO | prompt is more important | IPAdapterSimple weight_type for keyword 3. |
| preset_faceid3opt | COMBO | FACEID PLUS V2 | IPAdapterUnifiedLoaderFaceID preset for keyword 3. |
| lora_strength3opt | FLOAT | 0.600–1 | FaceID LoRA strength for keyword 3. |
| weight_faceid3opt | FLOAT | 1.00-1–3 | IPAdapterFaceID weight for keyword 3. |
| weight_faceidv23opt | FLOAT | 1.00-1–5 | IPAdapterFaceID weight_faceidv2 for keyword 3. |
| weight_type_faceid3opt | COMBO | linear | IPAdapterFaceID weight_type for keyword 3. |
| keyword4opt | STRING | Keyword 4 to match against the reference phrase. Matched as a substring. Comma-separated to allow multiple keywords on this row (any one matching activates it). | |
| preset4opt | COMBO | PLUS FACE (portraits) | IPAdapterUnifiedLoader preset for keyword 4. |
| weight4opt | FLOAT | 1.00-1–3 | IPAdapterSimple weight for keyword 4. |
| weight_type4opt | COMBO | prompt is more important | IPAdapterSimple weight_type for keyword 4. |
| preset_faceid4opt | COMBO | FACEID PLUS V2 | IPAdapterUnifiedLoaderFaceID preset for keyword 4. |
| lora_strength4opt | FLOAT | 0.600–1 | FaceID LoRA strength for keyword 4. |
| weight_faceid4opt | FLOAT | 1.00-1–3 | IPAdapterFaceID weight for keyword 4. |
| weight_faceidv24opt | FLOAT | 1.00-1–5 | IPAdapterFaceID weight_faceidv2 for keyword 4. |
| weight_type_faceid4opt | COMBO | linear | IPAdapterFaceID weight_type for keyword 4. |
| keyword5opt | STRING | Keyword 5 to match against the reference phrase. Matched as a substring. Comma-separated to allow multiple keywords on this row (any one matching activates it). | |
| preset5opt | COMBO | PLUS FACE (portraits) | IPAdapterUnifiedLoader preset for keyword 5. |
| weight5opt | FLOAT | 1.00-1–3 | IPAdapterSimple weight for keyword 5. |
| weight_type5opt | COMBO | prompt is more important | IPAdapterSimple weight_type for keyword 5. |
| preset_faceid5opt | COMBO | FACEID PLUS V2 | IPAdapterUnifiedLoaderFaceID preset for keyword 5. |
| lora_strength5opt | FLOAT | 0.600–1 | FaceID LoRA strength for keyword 5. |
| weight_faceid5opt | FLOAT | 1.00-1–3 | IPAdapterFaceID weight for keyword 5. |
| weight_faceidv25opt | FLOAT | 1.00-1–5 | IPAdapterFaceID weight_faceidv2 for keyword 5. |
| weight_type_faceid5opt | COMBO | linear | IPAdapterFaceID weight_type for keyword 5. |
| keyword6opt | STRING | Keyword 6 to match against the reference phrase. Matched as a substring. Comma-separated to allow multiple keywords on this row (any one matching activates it). | |
| preset6opt | COMBO | PLUS FACE (portraits) | IPAdapterUnifiedLoader preset for keyword 6. |
| weight6opt | FLOAT | 1.00-1–3 | IPAdapterSimple weight for keyword 6. |
| weight_type6opt | COMBO | prompt is more important | IPAdapterSimple weight_type for keyword 6. |
| preset_faceid6opt | COMBO | FACEID PLUS V2 | IPAdapterUnifiedLoaderFaceID preset for keyword 6. |
| lora_strength6opt | FLOAT | 0.600–1 | FaceID LoRA strength for keyword 6. |
| weight_faceid6opt | FLOAT | 1.00-1–3 | IPAdapterFaceID weight for keyword 6. |
| weight_faceidv26opt | FLOAT | 1.00-1–5 | IPAdapterFaceID weight_faceidv2 for keyword 6. |
| weight_type_faceid6opt | COMBO | linear | IPAdapterFaceID weight_type for keyword 6. |
Outputs (12)
| Name | Type | Description |
|---|---|---|
| preset | LIGHT - SD1.5 only (low strength),STANDARD (medium strength),VIT-G (medium strength),PLUS (high strength),PLUS FACE (portraits),FULL FACE - SD1.5 only (portraits stronger) | — |
| weight | FLOAT | — |
| weight_type | standard,prompt is more important,style transfer | — |
| preset_faceid | FACEID,FACEID PLUS - SD1.5 only,FACEID PLUS V2,FACEID PORTRAIT (style transfer),FACEID PORTRAIT UNNORM - SDXL only (strong) | — |
| lora_strength | FLOAT | — |
| weight_faceid | FLOAT | — |
| weight_faceidv2 | FLOAT | — |
| weight_type_faceid | linear,ease in,ease out,ease in-out,reverse in-out,weak input,weak output,weak middle,strong middle,style transfer,composition,strong style transfer | — |
| matched_keyword | STRING | — |
| matched_index | INT | — |
| settings_text | STRING | — |
| preset_number | STRING | — |