FlashSR Processing Settings
One settings node to drive both FlashSR filters (and not fight itself)
- pre_preset
- pre_cutoff_hz
- pre_order
- pre_phase
- pre_bypass
- pre_settings_json
- post_preset
- post_cutoff_hz
- post_order
- post_phase
- post_bypass
- post_settings_json
- flashsr_lowpass_input
When a workflow has the same filter settings living in two or three separate node widgets, they will drift apart - you'll tune the PRE low-pass in one node, forget the other, and wonder why your render sounds different from yesterday. FlashSR Processing Settings exists to make that impossible. It's a pure configuration node: you set the PRE and POST low-pass values once, here, and its outputs wire directly into the override inputs of the FlashSR Lowpass Lab nodes (and the FlashSR node itself) so every stage reads the same effective settings. It also emits JSON receipts so the exact configuration lands in your metadata sidecar.
Don't expect any audio to pass through this node - there's no AUDIO input or output. It's the pack's "control panel," and it's the node you actually tune while the filter nodes become dumb slaves of their override inputs.
What the inputs do
The widget set mirrors what you'd set on a FlashSR Lowpass Lab, but twice: a pre_* block and a post_* block, each with _preset, _custom_cutoff_hz, _custom_order, _custom_phase, and _bypass.
The defaults are worth respecting. PRE defaults to PRE 12 kHz - recommended, the stated starting point for a 32 kHz MiniMax source, with zero_phase (avoid phase rotation before enhancement). POST defaults to POST 19 kHz - slightly stronger with causal phase - a gentle one-way roll-off to hide artificial air. The phase defaults differ intentionally: pre-filtering prefers zero-phase so FlashSR sees an unrotated spectrum; post-filtering defaults to causal for a natural roll-off.
There's one flag that trips people up: flashsr_lowpass_input. This passes a lowpass_input switch to the FlashSR node itself. Keep it OFF when you're already doing an explicit PRE low-pass in the chain - the tooltip is blunt about it: "enabling both can apply unintended extra filtering." Double-filtering is the classic silent mistake this node was built to prevent.
Outputs and wiring
It emits 13 outputs: pre_preset, pre_cutoff_hz, pre_order, pre_phase, pre_bypass, pre_settings_json, and the same six for POST, plus flashsr_lowpass_input. In the example workflow, the *_preset/*_bypass outputs drive the matching override inputs on your FlashSR Lowpass Lab instances, and the two settings_json outputs feed MiniMax Song Metadata. You don't have to wire every output - connecting just the ones your graph needs is fine.
Installing it
Standard pack install via ComfyUI Manager (search "MiniMax Music Production Toolkit") 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
Uses your ComfyUI Python. Dependencies: scipy, soundfile, imageio-ffmpeg, mutagen, Pillow. No model weights. Restart and hard-refresh.
Gotchas
The big one is the flashsr_lowpass_input double-filter trap described above - leave it off unless you've deliberately skipped the explicit PRE low-pass. Second, remember this node only configures: if you wire it to nothing, it does nothing but sit there looking authoritative. And if your FlashSR node is missing entirely, that's the separate Egregora audio super-resolution pack this toolkit expects you to install - this node can't conjure FlashSR on its own.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| pre_preset | COMBO | PRE 12 kHz - recommended | Preset for the low-pass stage before FlashSR. Lower cutoffs remove more original high-frequency content and force FlashSR to reconstruct more; use stronger presets only when the source top end is already problematic. |
| pre_custom_cutoff_hz | FLOAT | 1200020–96000 | Custom PRE low-pass cutoff used when pre_preset=CUSTOM. Lower values discard more source treble before FlashSR; do not lower it unnecessarily on cymbal-rich material. |
| pre_custom_order | INT | 21–12 | Butterworth order for the custom PRE filter. Higher orders make the cutoff steeper; zero-phase processing effectively doubles magnitude attenuation. |
| pre_custom_phase | COMBO | zero_phase | Phase mode for the custom PRE filter. zero_phase is normally preferred before FlashSR because it avoids phase rotation; causal applies a one-way filter. |
| pre_bypass | BOOLEAN | false | Disable the explicit PRE low-pass while leaving the rest of the FlashSR chain connected. Useful for testing whether original source highs are already cleaner without filtering. |
| post_preset | COMBO | POST 19 kHz - slightly stronger | Preset for the low-pass stage after FlashSR. It gently removes extreme reconstructed high-frequency energy; lower cutoffs sound darker but can better hide artificial 'air' or shimmer. |
| post_custom_cutoff_hz | FLOAT | 1900020–96000 | Custom POST low-pass cutoff used when post_preset=CUSTOM. Lower values hide more reconstructed extreme treble but can make the release darker. |
| post_custom_order | INT | 21–12 | Butterworth order for the custom POST filter. Higher values produce a steeper roll-off near the selected cutoff. |
| post_custom_phase | COMBO | causal | Phase mode for the custom POST filter. causal is intentionally available for a natural one-way roll-off; zero_phase avoids phase rotation but changes the effective magnitude slope because filtering is applied twice. |
| post_bypass | BOOLEAN | false | Disable the explicit POST low-pass for A/B comparison while preserving the rest of the chain. |
| flashsr_lowpass_input | BOOLEAN | false | Passes the lowpass_input switch to the FlashSR node. Keep OFF when you already perform the explicit PRE low-pass in this workflow; enabling both can apply unintended extra filtering. |
Outputs (13)
| Name | Type | Description |
|---|---|---|
| pre_preset | STRING | — |
| pre_cutoff_hz | FLOAT | — |
| pre_order | INT | — |
| pre_phase | STRING | — |
| pre_bypass | BOOLEAN | — |
| pre_settings_json | STRING | — |
| post_preset | STRING | — |
| post_cutoff_hz | FLOAT | — |
| post_order | INT | — |
| post_phase | STRING | — |
| post_bypass | BOOLEAN | — |
| post_settings_json | STRING | — |
| flashsr_lowpass_input | BOOLEAN | — |