Operation
Nodes that test values to split the flow, count, or select. 13 in total. Where Math “changes values”, Operation decides “which way to send them”.
Logical operations (4)
All of them take a float and return 1 or 0.
| Node | Condition for the result to be 1 |
|---|---|
| And | A and B are both 1.0 or greater |
| Or | Either A or B is 1.0 or greater |
| Xor | Only one of A and B is 1.0 or greater |
| Not | A is less than 1.0 |
The true/false boundary is 1.0, not 0. Because the test is
A >= 1.0f, 0.5 counts as “false”. If you plug in a continuous 0 to 1 value (the output of a Slider or an LFO) directly, it is only true at the instant it reaches 1.0. Put a Ceil or Round from Math in front of it, or state the threshold explicitly with IFFilter.
Not’s B port is unused as well. It only appears because the node inherits the binary operation base class; the implementation only looks at A (the same situation as Abs in Math).
Testing and branching
IFFilter
Compares A and B and switches the output destination based on the result.
Pick the comparison type from the dropdown on the node: > < == != >= <=.
| Port | What it is |
|---|---|
True Output / False Output | Depending on the result, both emit the value of A |
True Trigger / False Trigger | A trigger fires at the same moment |
What comes out is always A. B is only used for the comparison. It will not behave as “send B when the condition is met”, so when you want to switch the value itself, use Switch.
==/!=are floating-point comparisons, so they are evaluated withMathf.Approximately(approximate match).
The test runs on a change to A or B, on Trigger, or on a change to the condition.
Switch
Index picks one of the slots A / B / C … and sends it to Selected.
Any type passes through (float, string, RenderTexture, trigger and so on). Video and text alike can be switched with the same node.
- There are four slots by default, A-D. When all of them are filled, one empty slot is added automatically, growing up to 16 (A-P). Once there are two or more empty slots at the end they are trimmed automatically (it never drops below four)
- The type is taken from whatever is connected to the first slot you wire up, and is applied to every slot and to
Selected. After that, a different type cannot be connected. Remove all of them and it goes back to the original “anything goes” - Index rounds decimals down and clamps to
0 to the number of slots−1(-5 gives A, 99 gives the last one). Plugging a Counter’s output straight in causes no accidents - When the slot you picked is not connected, it holds the previous output (the previous picture staying on screen is a smaller accident than everything downstream of a video connection going black)
- For triggers, only those arriving at the currently selected slot pass through
There are also the outputs Index (the current number after rounding) and Count (the number of slots up to the last one that has a connection; 0 if nothing is connected). Plug Count into a Counter’s wrap-around value and you get a selector that cycles over exactly as many as you have connected. The label on the node shows the selected slot, the slot count and the type, like A (1/4) float.
Projects made with the earlier float-only Switch open and run just as they are.
Counting and timing
Counter
Counts every time Count Trigger arrives and emits an integer to Count Output.
Reset Trigger returns it to Min Value (not to 0).
If Max is smaller than Min, it counts down. The counting direction is determined by which of Max and Min is larger.
When Loop is OFF, the value does not stop. Out-of-range handling is only implemented for the looping case, so with Loop OFF it keeps increasing past Max. If you want it to stop at an upper limit, place Min / Max from Math after it to clamp the value.
Init Trigger
Fires once, Delay seconds after the project loads or the node is created. Use it as the entry point for pushing in initial values or resetting state. Delay exists to avoid the few messy frames right after loading; negative values are rounded to 0.
Random
When Trigger arrives, it emits one random number from the range A to B.
Moving A or B re-rolls the value too. Because it inherits the binary operation base class, the output also updates the moment an input changes. If you want it to roll only on Trigger, keep A / B at values that do not move.
Strings and media
Combine
Joins two strings with Separator and appends Suffix at the end.
When B is empty, the Separator is not added either (you get just A and Suffix).
Useful for assembling file paths.
Text Format
It fills {0} {1} {2} {3} in the template written on the node body with the strings from A / B / C / D and sends the result to Out.
Replacement happens only on an exact match of these four spellings, and format specifiers (such as {0:F2}) cannot be used.
Turning URL encode ON URL-encodes each of the input values before filling them in (the template itself is left alone).
See Text Format for details.
JSON Path
From the JSON string arriving at JSON, it pulls out one value by path (digging with . and [n], as in key / [0].key / a.b[2].c), and
emits it to Out (a string), Number (a number) and Found (whether it could be pulled out). If the path is empty, the whole JSON comes out of Out.
When it could not be pulled out, Out becomes an empty string, Number 0 and Found false.
See JSON Path for details.
MediaBrowserIndex
For the MediaBrowser folder selected in the dropdown, it emits the
file path at position Index and the item count of that folder.
Combined with Counter, you can build a flow that switches clips on every beat.
Related
- Arithmetic, rounding and interpolation are in Math
- StepSequencer has moved to the Tempo category, and Easing / Curve / ADSR / LFO to the Signal category










