XAudioProcess
Your audio mastering chain, as one ComfyUI node
- audio
- processed_audio
"Audio processing" is usually the part of ComfyUI you duck. The stock story has been load it, save it, hope it's loud enough, which is why a node that actually does something to an AUDIO stream before you hand it to a video encoder is so welcome. XAudioProcess gives you a real little mastering chain - resample, compress, normalize loudness, limit peaks - with the classic ComfyUI twist that you can run each step alone or stack the whole chain in one node.
How it works
You feed in one audio (AUDIO) input and pick a mode from the dropdown. The mode is a dynamic combo, so the node's inputs change depending on what you select:
- Resample - change the sample rate to 44100, 48000, 96000 or 192000 Hz.
- Compress - dynamic range compression with Fast / Balanced / Slow presets, plus an optional custom ratio from 1.0 to 20.0.
- Normalize - loudness normalization to a target in LUFS, default -14.1 (the common streaming standard). Set -70 to effectively skip it.
- Limit - a peak limiter so nothing clips, default -1.1 dB.
- Chain - the whole pipeline in one pass: resample, then compress, then normalize, then limit, each stage individually toggleable.
The output is processed_audio: a standard ComfyUI AUDIO dict, 32-bit float, same format as the input. Wire it straight into XAudioSave or a video node.
One thing worth knowing: only the resample mode is pure PyTorch (torchaudio). Compress, Normalize, Limit and Chain shell out to the ffmpeg binary on your system PATH using FFmpeg's own acompressor, loudnorm (two-pass) and alimiter filters. That's the README's big warning, and it's the difference between "works" and "silent errors."
The inputs that matter
Honestly there's just one: audio. Everything else is the mode dropdown plus the sub-parameters each mode reveals. For a beginner the only other setting you'll touch is target_lufs in Normalize/Chain - -14 LUFS if the audio is going anywhere streaming-ish, something like -23 if you're being polite about dynamic range.
Installing it
This node ships in ComfyUI-Xz3r0-Nodes (by Xz3r0-M), a utility pack that lives under the ♾️ Xz3r0/Workflow-Processing menu. Easiest is ComfyUI Manager - search ComfyUI-Xz3r0-Nodes and hit install. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Xz3r0-M/ComfyUI-Xz3r0-Nodes.git
cd ComfyUI-Xz3r0-Nodes
pip install -r requirements.txt
Then restart ComfyUI. The Python side only needs ffmpeg-python, but the system-level FFmpeg on PATH is the real dependency - install it via your OS package manager or the FFmpeg.org installer and make sure ffmpeg is resolvable from a terminal.
Common issues
- "Audio processing failed" - almost always FFmpeg missing from PATH. Run
ffmpeg -versionin a terminal; if that fails, that's your problem. - "Only supports one audio at a time" - the node rejects a batched AUDIO input (batch size > 1). Split the batch upstream first; this node is deliberately single-clip.
- Silent near-zero output after Normalize - loudnorm can't measure silence; the node handles near-silent input specially, so check your source audio isn't actually empty before blaming the node.
- Wrong output sample rate - only Resample and Chain change the rate; the other modes pass it through unchanged, which is correct behavior but easy to forget mid-workflow.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | Input audio to process | |
| mode | COMBO | 5 options: [object Object], [object Object], [object Object], [object Object], [object Object] |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| processed_audio | AUDIO | Audio after the selected processing (32-bit float, same format as input) |