Audio Modulation
Phaser, flanger, chorus, and friends — Audio Modulation is the guitar pedal rack
- audio
- video
- audio
- fx_spec
Want your generated music to stop sounding like a dry export and start sounding processed? Audio Modulation is the stage you grab. It's a one-node guitar-pedal rack with six effects - phaser, flanger, chorus, vibrato, tremolo, and pulsator - selected via the mode combo. There's no AI anywhere in here; it's real DSP running on an FFmpeg filter graph, so it's instant, deterministic, and you can stack a whole pedalboard of them without worrying about VRAM.
The honest read: it's not six separate effects, it's six dial sets sharing one node, and only the dials for your chosen mode apply. The ph_ params drive the phaser (delay 0–5ms, decay, LFO speed, triangular vs sinusoidal sweep), the fl_ params drive the flanger (delay, depth, regeneration, width, speed, phase), and chorus_preset swaps between single, double, and triple chorus thickness. Vibrato and tremolo just take an LFO frequency and depth (lfo_f, lfo_d), and pulsator is the trance-gate rhythm effect with rate (pu_hz), pu_amount, pu_width, and an LFO waveform (pu_mode). Set the mode, touch the dials for that mode, leave the rest alone - they're inert when not selected.
Mechanically, each mode maps to a stock FFmpeg filter: aphaser, flanger, chorus, vibrato, tremolo, apulsator. The node builds the filter spec from your widgets and runs it through PyAV. That's why it's fast and why it has no model files. A nice side effect: the stage also emits an fx_spec output alongside audio - that's the metadata ComfyTV's FX Chain uses to stack this effect with others and render them in a single pass. If you're chaining five modulation stages, wire their fx_specs together instead of running five separate renders.
Like every AudioFX stage, the input is audio or video - drop a clip in and it processes the clip's audio track. The three hidden inputs (force_run_token, project_id, parent_output_id) are ComfyTV's per-node Run plumbing; don't touch them.
Where people get burned: the flanger's fl_regen goes negative-to-positive (−95 to +95) and positive values push into self-oscillation territory, which can blow past 0 dB and clip hard. If your output suddenly sounds like a howling modem, check your peak levels after a flanger with high regen, and don't forget that this node outputs raw processed audio - there's no limiter riding shotgun. Keep the phase, start subtle.
Install is the pack-wide story - ComfyUI Manager search "ComfyTV", or git clone https://github.com/jtydhr88/ComfyTV into custom_nodes/, then a full backend restart. On Desktop/macOS with multiple ComfyUI installs, clone into the running instance's absolute path. No dependencies beyond what ComfyUI already ships, no models, no GPU needed.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| mode | COMBO | phaser | 6 options: phaser, flanger, chorus, vibrato, tremolo, pulsator |
| ph_delay | FLOAT | 3.000–5 | — |
| ph_decay | FLOAT | 0.400–0.99 | — |
| ph_speed | FLOAT | 0.500.1–2 | — |
| ph_type | COMBO | triangular | 2 options: triangular, sinusoidal |
| fl_delay | FLOAT | 0.000–30 | — |
| fl_depth | FLOAT | 2.000–10 | — |
| fl_regen | FLOAT | 0-95–95 | — |
| fl_width | FLOAT | 710–100 | — |
| fl_speed | FLOAT | 0.500.1–10 | — |
| fl_shape | COMBO | sinusoidal | 2 options: sinusoidal, triangular |
| fl_phase | FLOAT | 250–100 | — |
| chorus_preset | COMBO | single | 3 options: single, double, triple |
| lfo_f | FLOAT | 5.000.1–20000 | — |
| lfo_d | FLOAT | 0.500–1 | — |
| pu_hz | FLOAT | 2.000.01–100 | — |
| pu_amount | FLOAT | 1.000–1 | — |
| pu_width | FLOAT | 1.000–2 | — |
| pu_mode | COMBO | sine | 5 options: sine, triangle, square, sawup, sawdown |
| audioopt | COMFYTV_AUDIO | — | |
| videoopt | COMFYTV_VIDEO | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| audio | COMFYTV_AUDIO | — |
| fx_spec | COMFYTV_FXSPEC | — |