Universal Trigger Toggle
A clickable toggle for your LoRA gallery
- filtered_trigger_words
Every LoRA user hits the same wall: you've got twenty adapters in a gallery, each one trained with its own trigger word, and the only record of which word goes with which file is the CivitAI page you scrolled past three weeks ago. Universal Trigger Toggle is the node that makes that pain disappear. It sits between your LoRA loader or gallery and your prompt, turns whatever trigger words are on the wire into clickable pill buttons, and only forwards the ones you leave switched on.
The name is doing honest work, too. "Universal" is because it doesn't care which node feeds it - it takes anything on its trigger_words input, which is typed as a wildcard, so it plays nice with Local Lora Gallery, Lora Info, LoraLoaderTagsQuery, and any loader that emits trigger words as a plain string.
How it actually works
The backend is boring (good), and the frontend does the heavy lifting. The JS watches the upstream node it's wired to, scrapes whatever string or JSON is sitting on the output, and splits it into individual tags. Here's the clever part: when the upstream node hands it a LoRA path or a JSON list instead of literal trigger words, it calls out to the Lora-Manager API (/api/lm/loras/get-trigger-words) and pulls the real trained words for that file. Click a pill to toggle it on or off; the active set is stored in a hidden widget and pushed back to Python, which joins the survivors into a comma-separated string. If the input is JSON it can't make sense of, the fallback returns an empty string rather than leaking garbage into your prompt.
The inputs and outputs that matter
Only two toggles, and they're both Boolean:
group_mode- when on, double-comma separated words ("char, name") are treated as one unit so you toggle them together. Off by default, which is the right call for most people.default_active- whether tags start enabled. On by default; flip it if you'd rather build your prompt from a clean slate.
Then there's the trigger_words input, which is where you wire your gallery or loader, and a single output, filtered_trigger_words (a STRING). Feed that into your text-concat node or straight into the positive prompt of your CLIP Text Encode, and you're done.
Installing it
ComfyUI Manager is the easy path - search for "comfyui-universal-trigger-toggle" and install. Or the manual way:
cd ComfyUI/custom_nodes
git clone https://github.com/revisionhiep-create/comfyui-universal-trigger-toggle
Then restart ComfyUI. One real dependency: the README says to have ComfyUI-Lora-Manager installed, and it means it - that's where the trigger-word database and the API the node calls live. Without it, plain string trigger words still pass through, but path-to-trigger-words resolution quietly fails.
Where people get burned
The README advertises mouse-wheel strength adjustment per tag - ignore it. That feature was removed in v1.3.0 (December 2025), so don't go hunting for a weight slider that isn't there. Also worth knowing: this node composes text. It doesn't load your LoRA, so you still need the loader in your graph; think of it as a prompt-editing layer, not a replacement for anything.
Remember that this node is a helper in a system the community keeps asking for - the recurring question of "how do you keep track of trigger words and configs" is exactly the itch it scratches. It won't fix a LoRA that isn't working for other reasons (wrong base model, wrong weight), but it'll finally get your trigger words organized.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| group_mode | BOOLEAN | false | — |
| default_active | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| filtered_trigger_words | STRING | — |