Animation: Timing Nodes
When things happen matters as much as what happens.
A circle that appears instantly feels different from one that fades in over two seconds. A flash on every beat feels different from a flash on every other beat. Timing is the difference between something that looks programmed and something that feels alive.
Timer
Count up or down, fire when done. Three modes: one-shot (counts once and stops), loop (resets and goes again), and ping-pong (counts up then back down).
The timer outputs its current progress as a 0 to 1 value, which makes it perfect for driving easing curves. Start a timer, feed its progress through an Ease node, and you’ve got a shaped transition that runs for exactly the duration you want.
Metro
The clock. Regular bangs at a BPM or interval. 120 BPM gives you a bang every half second. 60 BPM gives you one per second.
Metro is the conductor of a patch. Connect it to counters, sequencers, sample-and-holds, and suddenly your whole patch is moving in rhythm. Change the BPM and everything speeds up or slows down together.
Delay
Delays a signal by N frames. The input goes in now, it comes out later. Simple concept, surprisingly useful.
Stagger a spread of delays and you get wave effects. Delay one copy of a signal and subtract it from the original and you get rate of change. Delay a trigger and you get a follow-up event.
I capped the buffer at 65536 frames. At 60fps that’s over 18 minutes of delay, which should be enough for anyone. And it means nobody accidentally fills their RAM by setting the delay to a million frames.
Debounce
Ignores rapid triggers and only fires after things settle. If you get a burst of bangs within the debounce window, only the last one counts.
This is for real-world input. A physical button that bounces. A sensor that flickers. Network messages that come in bursts. Debounce cleans up the noise and gives you one clean event.
Throttle
Rate limiting. A value passes through at most once per interval, no matter how fast the input changes.
Different from debounce. Debounce waits for things to stop changing, then fires once. Throttle fires immediately and then ignores further changes until the cooldown expires. Debounce is “wait for silence.” Throttle is “fire, then chill.”
OnChange
Only fires when the input value actually changes. If the same number comes in frame after frame, nothing passes through. The moment it’s different, the new value goes out.
This turns continuous signals into events. A counter that ticks from 5 to 5 to 5 to 6? OnChange catches that transition. A smoothed value that’s still settling? OnChange fires on every frame where it moves. A static value? Silence.
Useful for triggering animations only when something actually happens, instead of re-triggering 60 times per second.