Nodes/ComfyTV/Audio Deconvolve (IR)
ComfyUI Node

Audio Deconvolve (IR)

Turn a sine-sweep recording into a usable impulse response

By jtydhr88·Created 3 months ago·Updated about 15 hours ago· 725
Audio Deconvolve (IR)
  • audio
  • video
  • audio
force_run_token0
project_id
parent_output_id0
duration_s5.00
fmin20
fmax20000
amp0.50
ir_len_s2.00

This is the stage that makes convolution reverb feel like a superpower. Audio Deconvolve (IR) takes a recording of a sine sweep played in a room and mathematically extracts that room's impulse response - the "fingerprint" of its reverb - as a clean IR file. Then you feed that IR into the Convolve stage and any dry audio you have now sounds like it was recorded in that room. Your garage, your stairwell, a parking garage, whatever. It's the pack's built-in room-capture pipeline, and it requires nothing but a speaker, a microphone, and a few seconds of patience.

The technique is well-established - the exponential sine sweep (ESS) method is how acousticians do it for real, and the source shows exactly that: the stage generates an ESS test signal across your chosen frequency range, and deconvolves the recording against it with scipy.signal.fftconvolve. If you've ever wanted a "reverb of my apartment" and been told to buy an expensive plugin, here's the free ComfyUI version.

How it works

You don't play anything through this node - you play a test signal and record it, then give the recording to the stage. The inputs are the sweep and capture parameters:

  • duration_s (default 5) - the length of the sweep you played/recorded. Longer sweeps separate the IR from noise better.
  • fmin / fmax (default 20 Hz / 20 kHz) - the sweep's frequency range, matching what you generated and played.
  • amp (default 0.5) - the sweep amplitude, so the deconvolution math knows the level you used.
  • ir_len_s (default 2) - how much of the deconvolved tail to keep. Room reverb tails beyond ~2s are mostly noise; trim here instead of in post.

The recording goes in via the optional audio input (or video if the recording is inside a clip), and the output is audio - a clean, normalized IR you can drop straight into the Convolve stage's ir socket. The internal inputs (force_run_token, project_id, parent_output_id) are frontend plumbing; ignore them.

The workflow, concretely: generate the sweep (a sweep source is part of the pack's audio suite - check the Audio Sweep stage), play it through a speaker in the room, record the result with a mic, load the recording here, and out pops an IR.

Installing ComfyTV

cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV

Full backend restart, then ComfyTV → AudioFX; ComfyUI Manager finds "ComfyTV". Zero extra Python deps - the DSP is numpy + scipy, both bundled with ComfyUI. No model downloads.

The pack-wide install trap: on macOS / ComfyUI Desktop / multi-install machines, cd ComfyUI/custom_nodes can clone into the wrong instance - clone "succeeds," stages never appear. Read the running instance's path from the startup log, clone into that instance's custom_nodes by absolute path (quote paths with spaces/parentheses), confirm ComfyTV/__init__.py is top-level, restart the backend fully.

Common issues

  • The extracted IR is noisy garbage. Your recording has too much background noise or the levels were way off. Record louder (but not clipping), sweep longer (duration_s up), and keep the room quiet while recording.
  • The IR sounds like a thump, not reverb. ir_len_s is too short and you're keeping only the direct-sound transient. Give it 1–2s. Or your sweep fmin was too high and there's no low-end information.
  • The sweep and the recording don't match. fmin/fmax/duration_s must describe the actual sweep you played. If you recorded a different signal than you generated, the deconvolution has nothing clean to extract.
  • Output is quiet. The stage normalizes the IR, but if the recording was quiet, so will the IR be. Gain-staging matters: play the sweep loudly and record with healthy (not clipping) levels.

This is the sort of feature that makes ComfyTV feel less like a node pack and more like a media workbench. Capture once, reuse the IR forever.

CategoryComfyTV/AudioFX

Inputs (10)

NameTypeDefaultDescription
force_run_tokenINT00–2147483647Internal — bumped on Run to invalidate ComfyUI's input cache.
project_idSTRINGInternal — populated by the projectStore on the frontend.
parent_output_idINT00–2147483647Internal — lineage parent set by spawn handlers on the frontend.
duration_sFLOAT5.001–30
fminFLOAT2010–1000
fmaxFLOAT200001000–20000
ampFLOAT0.500.01–1
ir_len_sFLOAT2.000.1–10
audiooptCOMFYTV_AUDIO
videooptCOMFYTV_VIDEO

Outputs (1)

NameTypeDescription
audioCOMFYTV_AUDIO