Difforum · Audio Schedule (reactive)
Turn a band into a curve, plug it anywhere
- params
- audio
- schedule
- values
The Audio Analyzer gives you raw curves - a bass envelope, a beat pulse - but it doesn't tell the graph what to do with them. Difforum · Audio Schedule (reactive) is the glue: pick a band, pick how it modulates a value, and out comes a ready-made DIFFORUM_SCHEDULE that plugs straight into any schedule input - the Feedback Sampler's strength_schedule or cfg_schedule, a camera field, whatever. This is the node the README means when it says "audio reactivity is one node."
Where the Analyzer is the lab instrument, this is the knob on the mixing desk. The inputs read like a formula: take source (one of amp, low, mid, high, onset, beat), apply it in mode (add, subtract, or multiply) with a base value and an amount, and you get a curve for every frame. A bass-pumped zoom is source=low, mode=multiply, base=1.0, amount=0.08. A strength that pulses with the beat is source=beat, mode=add, base=0.4, amount=0.4. The pattern clicks fast: base is the resting value, amount is how hard the music yanks it.
Two details make it more useful than it looks:
multiplyvsaddchange the character. Multiply is great for things that should never go to zero - zoom, cfg - because the base survives. Add is better for strength and intensity where a genuine drop-out reads as a musical rest. Neither is "correct," and switching costs one click, so try both.smoothing(default 0.2) tames the same twitchiness you saw in the Analyzer. If the pulse feels like epilepsy, raise it; if the beat is mushy, lower it.
Outputs are a schedule (the DIFFORUM_SCHEDULE object - wire it into any schedule socket) and values, the same curve as a plain FLOAT list in case you want it outside the Difforum graph. Note what you don't need to do: there's no expression writing here, no keyframe syntax, no t. You get a curve that already spans the whole clip, aligned to your params frame count, and it recomputes itself the moment you change the audio.
Install
Part of the Difforum pack, same zero-friction setup:
cd ComfyUI/custom_nodes
git clone https://github.com/chillithebillis/Difforum.git difforum
Restart ComfyUI, or install via ComfyUI Manager (search "Difforum"). Only dependency is numpy, already present in ComfyUI.
Common issues
- "It says I need DIFFORUM_AUDIO." This node's
audioinput is not a raw AUDIO clip - it wants theaudio_curvesoutput from the Audio Analyzer. Connect Analyzer → this node, not your music loader → this node. Getting them crossed is the #1 mistake. - Curve goes wild or dead. Both
baseandamountrange to ±100, and it's easy to overshoot: amultiplywith base 1.0 and amount 2.0 means a loud section multiplies zoom by 3, which will look like the camera having a seizure. Keepamountmodest (0.1–0.6) and letsmoothingsoak up the spikes. - No beat response. Same story as the Analyzer - check
beat_sensitivityupstream, or switchsourcetoonsetfor tracks without clean kicks.
If you only ever add one audio-reactive node to a Difforum clip, this is the one. The Analyzer feeds it, it feeds the sampler, and suddenly the camera and the denoise strength are playing the song. Two Schedules - bass on zoom, beat on strength - is the entire classic audio-reactive recipe from the README, and it's about as painless as reactive video gets.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| params | DIFFORUM_PARAMS | — | |
| audio | DIFFORUM_AUDIO | — | |
| source | COMBO | low | 6 options: amp, low, mid, high, onset, beat |
| mode | COMBO | add | 3 options: add, subtract, multiply |
| base | FLOAT | 0.40-100–100 | — |
| amount | FLOAT | 0.50-100–100 | — |
| smoothing | FLOAT | 0.200–0.99 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| schedule | DIFFORUM_SCHEDULE | — |
| values | FLOAT | — |