If True 3
Switch three things at once, and skip the dead branches
- if_true_1
- if_true_2
- if_true_3
- fallback_1
- fallback_2
- fallback_3
- out_1
- out_2
- out_3
If True 3 is the triple-barrel version of the pack's If True. Same idea - compare a trigger string to expected - but instead of routing one value it routes three in parallel. Each of the if_true_1, if_true_2, if_true_3 inputs has its own fallback (fallback_1 through fallback_3, all optional), and each slot produces its own output (out_1, out_2, out_3).
How it works
The mechanism is a string equality check, exactly like If True: trigger == expected, case-sensitive, whitespace-sensitive. The difference that actually matters is what happens on an empty branch. If True (the one-output version) returns None - a value that flows downstream and can crash a node that doesn't expect it. If True 3 returns an ExecutionBlocker instead. That's ComfyUI's "don't run this branch at all" signal: nodes downstream of a blocked output are skipped entirely, rather than receiving a phantom None. A failed branch here is a clean skip, not a landmine.
That makes the natural partner the pack's Merge First node. Wire each of the three outputs into Merge First's inputs and you get "use branch 1 if it's live, else branch 2, else branch 3" - blocked outputs are ignored, the first real value wins. This is the pack's own recommended idiom for conditional branches.
Inputs and outputs
trigger(STRING, wired),expected(STRING, default "text") - the shared comparison.if_true_1..3(),fallback_1..3(, optional) - the three routeable values.out_1..3(*) - the results.
Setup behaves like If True: trigger is forceInput so it must be wired; expected is a widget you type into.
When to use it
The realistic use is switching complete groups at once. Want a preset to swap in not just a LoRA but its matching strength and a trigger-word prompt? Put the three values in if_true_1..3, their alternatives in fallback_1..3, and flip the whole bundle with one string. All three slots make the same choice at the same time, because the trigger/expected comparison is shared - there's no per-slot mixing of match and fallback within a single run.
The honest take: you only need If True 3 over If True when you genuinely have three things to swap as a unit. The ExecutionBlocker behavior is the real reason to prefer it - blocking is cleaner than propagating None.
Installing it
Installation is the pack standard - Manager search "Conditional Nodes by Mikudes", or:
cd ComfyUI/custom_nodes
git clone https://github.com/levox00/Conditional-Nodes-Comfy-Ui
Restart ComfyUI. It appears in the conditional category, no dependencies beyond ComfyUI itself.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| trigger | STRING | — | |
| expected | STRING | text | — |
| if_true_1 | * | — | |
| if_true_2 | * | — | |
| if_true_3 | * | — | |
| fallback_1opt | * | — | |
| fallback_2opt | * | — | |
| fallback_3opt | * | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| out_1 | * | — |
| out_2 | * | — |
| out_3 | * | — |