LoRA Trigger Injector
Auto-Inject LoRA Triggers Into Your Prompt
- lora_stack
- lora_stack
- positive_prompt
- injected_triggers
The most annoying part of a LoRA workflow isn't the LoRA - it's the trigger word. The card says "use risu in your prompt," and you either remember to type it or you don't, and when you're stacking six LoRAs you definitely don't. The LoRA Trigger Injector (NoelLoRATriggerInjector) is a small text utility that reads which LoRAs are actually active in your workflow and splices their trigger words into your positive prompt for you. Configure each LoRA's trigger once; from then on, flipping LoRAs on and off in your stack updates the prompt automatically. No more cross-checking CivitAI cards mid-batch.
Keeping track of trigger words across a growing LoRA folder is a real, constant community pain - it's half the reason rgthree's Power Lora Loader reads them off files for you. This node is the "set it and forget it" version of that idea, aimed squarely at the Efficiency Nodes crowd.
How it works
The node sits between your LoRA stacker and the sampler. It takes a LORA_STACK - the exact type emitted by LoRA_Stacker_ED, which is why the pack's README tips its hat to NyaamZ's efficiency-nodes-ED fork - plus a positive_prompt. You define slots: pick a LoRA in lora_1_name and type its trigger words into lora_1_triggers (comma or space separated). On every run it walks the incoming stack, finds entries whose name matches one of your configured slots, collects their triggers, and appends (or prepends) them to the prompt. Then it passes both the stack and the enriched prompt downstream.
Note what it does not do: it never applies a LoRA. It edits text only, and passes your LORA_STACK through untouched, so you still wire the stack from your stacker into whatever actually loads it.
Inputs that matter
lora_count(default 5, 1–50) - how many slots to show. The frontend (a bundledlti.js) hides and shows slots live, so crank it to 8 and a slot appears.dedupe(default on) - skips a trigger that's already in your prompt.mode-append(end of prompt) orprepend(start).lora_stack+positive_prompt- technically optional, practically the whole point. No stack connected, no injection; you just get a passthrough.lora_X_name/lora_X_triggerspairs - your trigger library, per slot.
Outputs: lora_stack (pass-through), positive_prompt (the enriched one), and injected_triggers - a single space-joined string of what got added, handy for a text-display node if you want to see the node working.
Installing it
It's part of the ComfyUI-NoelTextUtil pack, so install that once:
cd ComfyUI/custom_nodes
git clone https://github.com/noelkim12/ComfyUI-NoelTextUtil
then restart ComfyUI - or just search ComfyUI-ComfyUI-NoelTextUtil in ComfyUI Manager (the title is double-prefixed, don't let that throw you) and click Install. Zero model downloads and no Python dependencies beyond ComfyUI itself; the only thing to install separately is a stacker that emits LORA_STACK, i.e. Efficiency Nodes (ED) or a compatible fork.
Where people get burned
- Exact-filename matching. The dropdown is populated from your
lorasfolder, and matching compares the stack entry's name against it exactly. A renamed file or a stack built from a different name string silently produces no trigger - and withdedupeon you won't even see a duplicate to tip you off. - The trailing comma. The source appends a comma to the output prompt unconditionally, and
injected_triggersis a plain string, not a list. Both are harmless in practice; just don't expect a typed list out of the third output. - It's niche by design. If you're on rgthree's Power Lora Loader, which already pulls trigger words off files and CivitAI, this node is redundant. Reach for it when you're living inside LoRA stackers and want prompts to stay honest with the stack.
Inputs (105)
| Name | Type | Default | Description |
|---|---|---|---|
| lora_count | INT | 51–50 | 사용할 LoRA 슬롯 수 |
| dedupe | BOOLEAN | true | 중복 트리거 제거 (프롬프트에 이미 있는 트리거는 추가하지 않음) |
| mode | COMBO | append | 트리거 삽입 위치 |
| lora_stackopt | LORA_STACK | LoRA_Stacker_ED로부터 받은 LORA_STACK | |
| positive_promptopt | STRING | 트리거를 주입할 positive prompt | |
| lora_1_nameopt | COMBO | 2 options: None, | |
| lora_1_triggersopt | STRING | LoRA 1 트리거 (콤마나 공백으로 구분) | |
| lora_2_nameopt | COMBO | 2 options: None, | |
| lora_2_triggersopt | STRING | LoRA 2 트리거 (콤마나 공백으로 구분) | |
| lora_3_nameopt | COMBO | 2 options: None, | |
| lora_3_triggersopt | STRING | LoRA 3 트리거 (콤마나 공백으로 구분) | |
| lora_4_nameopt | COMBO | 2 options: None, | |
| lora_4_triggersopt | STRING | LoRA 4 트리거 (콤마나 공백으로 구분) | |
| lora_5_nameopt | COMBO | 2 options: None, | |
| lora_5_triggersopt | STRING | LoRA 5 트리거 (콤마나 공백으로 구분) | |
| lora_6_nameopt | COMBO | 2 options: None, | |
| lora_6_triggersopt | STRING | LoRA 6 트리거 (콤마나 공백으로 구분) | |
| lora_7_nameopt | COMBO | 2 options: None, | |
| lora_7_triggersopt | STRING | LoRA 7 트리거 (콤마나 공백으로 구분) | |
| lora_8_nameopt | COMBO | 2 options: None, | |
| lora_8_triggersopt | STRING | LoRA 8 트리거 (콤마나 공백으로 구분) | |
| lora_9_nameopt | COMBO | 2 options: None, | |
| lora_9_triggersopt | STRING | LoRA 9 트리거 (콤마나 공백으로 구분) | |
| lora_10_nameopt | COMBO | 2 options: None, | |
| lora_10_triggersopt | STRING | LoRA 10 트리거 (콤마나 공백으로 구분) | |
| lora_11_nameopt | COMBO | 2 options: None, | |
| lora_11_triggersopt | STRING | LoRA 11 트리거 (콤마나 공백으로 구분) | |
| lora_12_nameopt | COMBO | 2 options: None, | |
| lora_12_triggersopt | STRING | LoRA 12 트리거 (콤마나 공백으로 구분) | |
| lora_13_nameopt | COMBO | 2 options: None, | |
| lora_13_triggersopt | STRING | LoRA 13 트리거 (콤마나 공백으로 구분) | |
| lora_14_nameopt | COMBO | 2 options: None, | |
| lora_14_triggersopt | STRING | LoRA 14 트리거 (콤마나 공백으로 구분) | |
| lora_15_nameopt | COMBO | 2 options: None, | |
| lora_15_triggersopt | STRING | LoRA 15 트리거 (콤마나 공백으로 구분) | |
| lora_16_nameopt | COMBO | 2 options: None, | |
| lora_16_triggersopt | STRING | LoRA 16 트리거 (콤마나 공백으로 구분) | |
| lora_17_nameopt | COMBO | 2 options: None, | |
| lora_17_triggersopt | STRING | LoRA 17 트리거 (콤마나 공백으로 구분) | |
| lora_18_nameopt | COMBO | 2 options: None, | |
| lora_18_triggersopt | STRING | LoRA 18 트리거 (콤마나 공백으로 구분) | |
| lora_19_nameopt | COMBO | 2 options: None, | |
| lora_19_triggersopt | STRING | LoRA 19 트리거 (콤마나 공백으로 구분) | |
| lora_20_nameopt | COMBO | 2 options: None, | |
| lora_20_triggersopt | STRING | LoRA 20 트리거 (콤마나 공백으로 구분) | |
| lora_21_nameopt | COMBO | 2 options: None, | |
| lora_21_triggersopt | STRING | LoRA 21 트리거 (콤마나 공백으로 구분) | |
| lora_22_nameopt | COMBO | 2 options: None, | |
| lora_22_triggersopt | STRING | LoRA 22 트리거 (콤마나 공백으로 구분) | |
| lora_23_nameopt | COMBO | 2 options: None, | |
| lora_23_triggersopt | STRING | LoRA 23 트리거 (콤마나 공백으로 구분) | |
| lora_24_nameopt | COMBO | 2 options: None, | |
| lora_24_triggersopt | STRING | LoRA 24 트리거 (콤마나 공백으로 구분) | |
| lora_25_nameopt | COMBO | 2 options: None, | |
| lora_25_triggersopt | STRING | LoRA 25 트리거 (콤마나 공백으로 구분) | |
| lora_26_nameopt | COMBO | 2 options: None, | |
| lora_26_triggersopt | STRING | LoRA 26 트리거 (콤마나 공백으로 구분) | |
| lora_27_nameopt | COMBO | 2 options: None, | |
| lora_27_triggersopt | STRING | LoRA 27 트리거 (콤마나 공백으로 구분) | |
| lora_28_nameopt | COMBO | 2 options: None, | |
| lora_28_triggersopt | STRING | LoRA 28 트리거 (콤마나 공백으로 구분) | |
| lora_29_nameopt | COMBO | 2 options: None, | |
| lora_29_triggersopt | STRING | LoRA 29 트리거 (콤마나 공백으로 구분) | |
| lora_30_nameopt | COMBO | 2 options: None, | |
| lora_30_triggersopt | STRING | LoRA 30 트리거 (콤마나 공백으로 구분) | |
| lora_31_nameopt | COMBO | 2 options: None, | |
| lora_31_triggersopt | STRING | LoRA 31 트리거 (콤마나 공백으로 구분) | |
| lora_32_nameopt | COMBO | 2 options: None, | |
| lora_32_triggersopt | STRING | LoRA 32 트리거 (콤마나 공백으로 구분) | |
| lora_33_nameopt | COMBO | 2 options: None, | |
| lora_33_triggersopt | STRING | LoRA 33 트리거 (콤마나 공백으로 구분) | |
| lora_34_nameopt | COMBO | 2 options: None, | |
| lora_34_triggersopt | STRING | LoRA 34 트리거 (콤마나 공백으로 구분) | |
| lora_35_nameopt | COMBO | 2 options: None, | |
| lora_35_triggersopt | STRING | LoRA 35 트리거 (콤마나 공백으로 구분) | |
| lora_36_nameopt | COMBO | 2 options: None, | |
| lora_36_triggersopt | STRING | LoRA 36 트리거 (콤마나 공백으로 구분) | |
| lora_37_nameopt | COMBO | 2 options: None, | |
| lora_37_triggersopt | STRING | LoRA 37 트리거 (콤마나 공백으로 구분) | |
| lora_38_nameopt | COMBO | 2 options: None, | |
| lora_38_triggersopt | STRING | LoRA 38 트리거 (콤마나 공백으로 구분) | |
| lora_39_nameopt | COMBO | 2 options: None, | |
| lora_39_triggersopt | STRING | LoRA 39 트리거 (콤마나 공백으로 구분) | |
| lora_40_nameopt | COMBO | 2 options: None, | |
| lora_40_triggersopt | STRING | LoRA 40 트리거 (콤마나 공백으로 구분) | |
| lora_41_nameopt | COMBO | 2 options: None, | |
| lora_41_triggersopt | STRING | LoRA 41 트리거 (콤마나 공백으로 구분) | |
| lora_42_nameopt | COMBO | 2 options: None, | |
| lora_42_triggersopt | STRING | LoRA 42 트리거 (콤마나 공백으로 구분) | |
| lora_43_nameopt | COMBO | 2 options: None, | |
| lora_43_triggersopt | STRING | LoRA 43 트리거 (콤마나 공백으로 구분) | |
| lora_44_nameopt | COMBO | 2 options: None, | |
| lora_44_triggersopt | STRING | LoRA 44 트리거 (콤마나 공백으로 구분) | |
| lora_45_nameopt | COMBO | 2 options: None, | |
| lora_45_triggersopt | STRING | LoRA 45 트리거 (콤마나 공백으로 구분) | |
| lora_46_nameopt | COMBO | 2 options: None, | |
| lora_46_triggersopt | STRING | LoRA 46 트리거 (콤마나 공백으로 구분) | |
| lora_47_nameopt | COMBO | 2 options: None, | |
| lora_47_triggersopt | STRING | LoRA 47 트리거 (콤마나 공백으로 구분) | |
| lora_48_nameopt | COMBO | 2 options: None, | |
| lora_48_triggersopt | STRING | LoRA 48 트리거 (콤마나 공백으로 구분) | |
| lora_49_nameopt | COMBO | 2 options: None, | |
| lora_49_triggersopt | STRING | LoRA 49 트리거 (콤마나 공백으로 구분) | |
| lora_50_nameopt | COMBO | 2 options: None, | |
| lora_50_triggersopt | STRING | LoRA 50 트리거 (콤마나 공백으로 구분) |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| lora_stack | LORA_STACK | — |
| positive_prompt | STRING | — |
| injected_triggers | STRING | — |