ComfyUI Node

FlashSR Lowpass Lab

The Butterworth low-pass lab that keeps FlashSR honest

By jplenio·Created about 16 hours ago·Updated about 15 hours ago· 0
FlashSR Lowpass Lab
  • audio
  • audio
  • info
  • preset
  • settings_json
presetPRE 12 kHz - recommended
custom_cutoff_hz12000
custom_order2
custom_phase_modezero_phase
bypassfalse
preset_override
custom_cutoff_override
custom_order_override
custom_phase_override
bypass_override

Super-resolution models have a dirty secret: they reconstruct missing bandwidth from context, so if you give FlashSR a source whose top end is already a mess, it faithfully invents a mess in high fidelity. The fix is to control what FlashSR sees before it runs and what it's allowed to leave behind after. FlashSR Lowpass Lab is a configurable Butterworth low-pass that does both jobs with the same node - pick a PRE preset to clean up before enhancement, or a POST preset to sweep away the artificial air after.

The presets are genuinely useful, not decorative: PRE 12 kHz - recommended is the starting point for a 32 kHz MiniMax source, and the POST presets are gentler, designed to shave extreme reconstructed high-frequency energy without darkening everything. If you want to think of it as a "spectral leash" on the enhancer, you're not far off.

Where it sits

Two copies of this node normally appear in the chain: one before FlashSR (PRE), one after the hybrid crossover and HF repair (POST). The example workflow uses the sibling FlashSR Processing Settings node to drive both consistently, but you can drop standalone copies anywhere you need a clean low-pass with reproducible settings.

How it works

It's a Butterworth low-pass with three knobs plus a master bypass:

  • preset - the seven choices: CUSTOM, four PRE presets (14 kHz light, 12 kHz recommended, 10 kHz strong, 8 kHz aggressive) and two POST presets (20 kHz gentle, 19 kHz slightly stronger). Selecting a preset updates the custom fields to show its effective values, which is a nice touch.
  • custom_cutoff_hz, custom_order, custom_phase_mode - used only in CUSTOM. Cutoff is self-explanatory; order (1–12) steepens the slope; zero_phase runs the filter forward and backward offline to avoid phase rotation (effectively steepening the response further), while causal is a normal one-way filter with phase shift, useful for gentle post-processing.
  • bypass - returns audio unchanged while still emitting settings/info, which is the A/B testing workflow's best friend.

Inputs and outputs

Beyond the widgets, every filter knob has a matching optional override input (preset_override, custom_cutoff_override, custom_order_override, custom_phase_override, bypass_override) meant to be driven from a centralized settings node. When connected, the override wins at execution time. Outputs are audio, info, preset (the effective preset as a string), and settings_json - the last two are exactly the reproducibility receipts this pack loves.

Installing it

Standard pack install - ComfyUI Manager, or:

cd ComfyUI/custom_nodes
git clone https://github.com/jplenio/ComfyUI-MiniMax-Music-Production-Toolkit.git
cd ComfyUI-MiniMax-Music-Production-Toolkit
python -m pip install -r requirements.txt

Dependencies: scipy (which does the filtering), soundfile, imageio-ffmpeg, mutagen, Pillow. Restart ComfyUI and hard-refresh the browser once.

Gotchas

The recurring mistake is picking the strongest filter "to be safe." Cutting too low before FlashSR discards real transient and cymbal information, and the README explicitly says not to do that automatically - for acoustic or cymbal-heavy material, A/B against the lighter presets or a bypass. And remember the difference between the two stages: PRE filters force FlashSR to reconstruct more, POST filters suppress what it invented. They pull in opposite directions, so don't treat them as interchangeable.

CategoryMiniMax Music Production Toolkit/audio restoration

Inputs (11)

NameTypeDefaultDescription
audioAUDIOComfyUI AUDIO signal to process. The node preserves channel layout unless its processing explicitly states otherwise; check the node's Info/JSON output for sample-rate or level changes.
presetCOMBOPRE 12 kHz - recommendedSelect a predefined Butterworth low-pass configuration or CUSTOM. PRE presets are intended before FlashSR; POST presets are intended after FlashSR. The visible custom cutoff/order/phase fields update to the selected preset so the effective values are obvious.
custom_cutoff_hzFLOAT1200020–96000Low-pass cutoff used when preset=CUSTOM. Lower frequencies remove more treble; before FlashSR that forces the model to reconstruct more bandwidth, while after FlashSR it more strongly suppresses artificial air.
custom_orderINT21–12Butterworth filter order used when preset=CUSTOM. Higher order gives a steeper cutoff. In zero_phase mode the filter runs forward and backward, effectively steepening the magnitude response further.
custom_phase_modeCOMBOzero_phaseFilter phase behavior used when preset=CUSTOM. zero_phase uses forward/backward offline filtering to avoid phase rotation; causal is a one-way filter with normal phase shift and is useful for gentle post-processing.
bypassBOOLEANfalseWhen enabled, return the audio unchanged while still providing settings/info outputs. Useful for A/B testing without rewiring the graph.
preset_overrideoptSTRINGOptional connected STRING that overrides the preset widget. Intended for centralized settings nodes; when connected it becomes the effective preset at execution time.
custom_cutoff_overrideoptFLOATOptional connected FLOAT that overrides custom_cutoff_hz. It matters when the effective preset resolves to CUSTOM.
custom_order_overrideoptINTOptional connected INT that overrides custom_order. It matters when the effective preset resolves to CUSTOM.
custom_phase_overrideoptSTRINGOptional connected STRING overriding custom_phase_mode. Use 'zero_phase' or 'causal'; it matters when the effective preset is CUSTOM.
bypass_overrideoptBOOLEANOptional connected BOOLEAN overriding the local bypass widget. This allows one centralized settings node to control whether the filter is active.

Outputs (4)

NameTypeDescription
audioAUDIO
infoSTRING
presetSTRING
settings_jsonSTRING