Audio Post-Processor
The mastering chain nobody thinks to read about
- audio
- AUDIO
Raw HeartMuLa output sounds like raw model output: a little quiet, a little narrow, sometimes with rumble you didn't ask for. The Audio Post-Processor is the one-stop fix - a small mastering chain in a single node that takes any AUDIO in and gives you a cleaned-up, broadcast-ready version out. It's technically part of this music pack, but it works on any audio socket in ComfyUI, which makes it secretly one of the most reusable nodes here.
Think of it as normalize + EQ + width + gain in one pass, applied in a sensible order. If you only ever touch one control, it's normalize (on by default) - it peak-normalizes the whole clip so your track isn't whisper-quiet compared to everything else in your project.
The inputs, in the order they bite
normalize(bool, default on) - peak-normalizes to full scale. Leave it on; it's why your output stops being inaudible.stereo_width(0–2, default 1) - mid/side width. 1 is untouched, >1 widens, <1 narrows, 0 mono. This is the fun knob: generated tracks often sit narrow, and a nudge to ~1.2–1.4 gives them room. Be careful pushing past ~1.5 - wide music starts sounding hollow.high_pass(0–1000 Hz, default 80) - rolls off sub-bass rumble. 80 Hz is the standard "clean up the mud" starting point.low_pass(0–24000, default 18000) - rolls off the top end. Only useful if your source is hissy or aliased; at the default it's mostly a safety net.gain_db(−20 to +20, default 0) - straight gain before the width/normalize stages.
Output is standard AUDIO, so it chains into PreviewAudio, SaveAudio, or whatever you're rendering to. The filters are torchaudio biquads, so they're cheap - this node costs you almost nothing in time or VRAM.
Install
It ships with the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/Crono141/ComfyUI-JK-HeartMuLa.git
cd ComfyUI-JK-HeartMuLa
pip install -r requirements.txt
Restart ComfyUI; it's under JK-HeartMuLa, and it needs a V3-API ComfyUI like the rest of the pack.
Where people get burned
The classic mistake is stacking this node with a loudness problem upstream and expecting the normalize to fix the mix - it normalizes peaks, not loudness, so a track with one loud spike still sounds quiet overall. The other trap is forgetting it in the workflow: the default workflow routes the decoder through here before the preview, so if you bypass it and wonder why your output suddenly got quiet and thin, that's why. Use the defaults, nudge width if you want, and let it do the boring work it's good at.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| normalize | BOOLEAN | true | — |
| stereo_width | FLOAT | 1.000–2 | — |
| high_pass | INT | 800–1000 | — |
| low_pass | INT | 180000–24000 | — |
| gain_db | FLOAT | 0.0-20–20 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| AUDIO | AUDIO | — |