WAVE GEN (JOV) π
Sine, square, sawtooth β make your animation breathe
- π
- π
WAVE GEN (JOV) is the node that turns a static animation into one with a pulse. It computes a waveform - sine, square, sawtooth, whatever you pick from sixteen types - and hands you the current value as both a float and an int. Wire that number into a TRANSFORM's angle, a BLEND's strength, a seed, a denoise or any numeric input, and your parameter starts oscillating on its own. It's the difference between a workflow that does the same thing every frame and one that feels alive.
How it works
The math is the boring-but-reliable kind: each wave type is a function of frequency Γ 2Ο Γ time + phase, scaled by amplitude and lifted by an offset. The important part for you is the Time (π) input. Leave it at 0 and the node outputs a single static number - you want it wired to a frame counter so each queue run advances the phase. Pair it with Jovimetrix's own TICK node and you get a per-frame time source for free; wire TICK's output into Time and WAVE GEN's output into whatever you want to animate, and every frame of a batch gets a slightly different value.
The waveform dropdown (βΏ) has the full set: SIN, COS, TAN, sawtooth, triangle, square, pulse, ramp, step, exponential, logarithmic, noise, plus a few curve variants (haversine, rectangular pulse, gaussian, chirp). Square and pulse are the ones for hard, beat-like switching - perfect for strobing a blend on and off. Sine and triangle are your smooth, gentle loops. Noise is the chaotic one, and it's great when you want organic jitter rather than a clean cycle.
The inputs that matter
- Wave (βΏ) - the waveform shape. This is the character of your motion.
- FREQ - frequency, how many cycles per time unit. Higher = faster oscillation.
- Amplitude (π) - how big the wave swings. Default 1.
- PHASE - where in the cycle you start. Two WAVE GENs with a phase offset on the second are how you make something drift, not just wobble.
- OFFSET - the vertical lift, so your wave oscillates around something other than zero.
- Time (π) - the input to advance per frame, usually from TICK.
- Invert (π³) - flips the wave upside down.
Outputs
Two: FLOAT (the continuous wave value - this is the one you'll wire everywhere) and INT (the same value truncated to an integer, for seeds, indices and int-only inputs).
Install and the naming note
It's part of Jovimetrix: git clone https://github.com/Amorano/Jovimetrix.git into ComfyUI/custom_nodes, then pip install -r requirements.txt (Windows portable: .\python_embed\python.exe -s -m pip install -r requirements.txt), or search "Jovimetrix" in ComfyUI Manager. No model downloads.
If your search bar shows "WAVE GENERATOR (JOV) π" instead of "WAVE GEN (JOV) π", that's the older name for the same node - current releases list the shorter one with a bigger waveform menu. The classic beginner mistake is forgetting to advance Time, which produces a dead constant; hook up a TICK or frame counter first, then tune FREQ and AMP until the motion feels right.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| βopt | COMBO | SIN | Wave Function |
| FREQopt | FLOAT | 1.000β9223372036854776000 | Frequency |
| πopt | FLOAT | 1.000β9223372036854776000 | Amplitude |
| PHASEopt | FLOAT | 0.0000β1 | Phase |
| OFFSETopt | FLOAT | 0.0000β1 | Offset |
| πopt | FLOAT | 0.00000β9223372036854776000 | Time |
| π³opt | BOOLEAN | false | Color Inversion |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| π | FLOAT | β |
| π | INT | β |