Isaac's Binary Amplitude Gate
Turn a music curve into a hard on/off switch
- normalized_amp
- normalized_amp
The Binary Amplitude Gate is the node you reach for when you want your animation to react, but only when the music is actually hitting. Feed it a smooth amplitude curve from your track and it snaps every sample to one of two values - loud becomes max, quiet becomes min. That's it. That's the whole trick, and it's exactly the right tool for "only move when the beat drops" workflows.
It lives in Isaac's Nodes, a small pack Isaac Emesowum wrote to support his own audio-synchronized AnimateDiff projects. If you're building one of those audio-reactive setups where the music drives AnimateDiff motion amount or ControlNet strength, this is the piece that turns a noisy, wobbly amplitude signal into a clean yes/no.
How it works
It's a one-liner under the hood. The node takes your normalized_amp array and runs numpy.where(normalized_amp > threshold, max, min) over it. Every amplitude sample above your threshold becomes max, everything at or below it becomes min. So instead of a curve that ramps up and down, you get a square wave: off, on, off, on, matching the hits in your audio.
That NORMALIZED_AMPLITUDE input is the first thing to understand, because it isn't produced by this pack. It's a custom ComfyUI type - an array of amplitude samples normalized to roughly 0–1 - that comes from an upstream audio-analysis node (the kind you get in a Yvann-style audio-reactive setup). This node consumes it, transforms it, and hands back the same type. If you're missing that upstream node, you'll have nothing to plug in here.
The inputs that matter
You really only need to touch two of the four inputs:
- normalized_amp - the amplitude curve from your audio-analysis node. Required, no default.
- threshold (0–1, default 0.3) - the cut line. Raise it and only the loudest peaks get through; lower it and the gate triggers more easily. This is the dial you'll actually fiddle with.
- min (0–2, default 0) and max (0–2, default 1) - the two output levels. Yes, the ranges go above 1, which is handy if whatever you're driving benefits from a boost.
The output is a single normalized_amp of the same type - the gated curve. Wire it into whatever downstream node consumes NORMALIZED_AMPLITUDE (like Isaac's own Amplitude To Weights, to get that binary signal into AnimateDiff-weight form).
How to install it
The pack is on the Comfy Registry, so ComfyUI Manager handles it cleanly:
- Manager → Install Custom Nodes → search "Isaac's Nodes" (or
ComfyUI_IsaacNodes) → install → restart. - Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/iemesowum/ComfyUI_IsaacNodes
cd ComfyUI_IsaacNodes
pip install -r requirements.txt
Then restart ComfyUI. The only real dependency in the whole pack is openunmix[stempeg] - and honestly, this particular node never touches it. It's pure NumPy. The dependency exists because of the pack's audio unmixer; you get it anyway.
Common issues
The big one is conceptual, not technical: a hard gate is steppy. If you're expecting organic motion, a binary on/off curve makes your animation snap between states, which reads as mechanical. That's sometimes exactly what you want for a beat, and sometimes a mistake. If the snap bothers you, smooth the amplitude signal upstream before gating, or keep min above zero so "off" isn't a full stop.
Also worth knowing: this node produces NORMALIZED_AMPLITUDE, it doesn't produce it. Don't come here looking for an audio file loader or amplitude analyzer - those live in the audio node set you're already using. This is a small, opinionated helper in a small, opinionated pack. For its one job - binary gate your amplitude curve - it does it cleanly and predictably.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| normalized_amp | NORMALIZED_AMPLITUDE | — | |
| threshold | FLOAT | 0.300–1 | — |
| min | FLOAT | 0.000–2 | — |
| max | FLOAT | 1.000–2 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| normalized_amp | NORMALIZED_AMPLITUDE | — |