Audio Super Resolution (FlashSR, integrated)
FlashSR is built in now — getting sparkle back on MiniMax Music 3's raw output
- audio
- audio
- settings_json
Ever render a track from a local music model and feel like the top end is… missing? That's not always your ears. Generative music output tends to be clean but a little dull on top - the high-frequency sparkle that separates a demo from a finished track isn't really in the source. MiniMaxFlashSRAudio is the fix: an integrated audio super-resolution (FlashSR) stage that reconstructs that high-frequency content at 48 kHz and delivers your audio at up to 96 kHz, with 48 kHz as the sensible default.
This node is the "integrated" replacement for a piece of external tooling. If you've been around ComfyUI audio since late 2025, you may know FlashSR from the standalone ComfyUI-Egregora-Audio-Super-Resolution node (lucasgattas' pack) that brought FlashSR to music enhancement workflows. v2.0.0 of this toolkit vendored the inference code in and made it a first-class node, so the full example workflow no longer needs that external dependency at all.
How it works
FlashSR is generative bandwidth extension - it doesn't just resample, it invents plausible high-frequency content. Mechanically: your audio is normalized and resampled to 48 kHz (FlashSR's design target), chopped into fixed 5.12-second chunks with a 0.5-second overlap, run through the model, and stitched back together with Hann-windowed overlap-add so you don't hear seams. The inference code ships with the pack in flashsr_inference/ (vendored from the upstream FlashSR_Inference and TorchJaekwon projects). Only the three weight files - student_ldm.pth, sr_vocoder.pth, vae.pth - are fetched on first use from the jakeoneijk/FlashSR_weights HuggingFace dataset into models/audio/flashsr, with progress logged.
That word "invents" is the whole caveat, and the pack is refreshingly honest about it. Reconstructed high-frequency energy is not guaranteed to equal what was originally there. The workflow doesn't blindly trust a full FlashSR replacement - it routes your output through a hybrid-crossover stage that blends the cleanly-resampled original with the FlashSR air, plus HF cymbal/shimmer repair and low-pass stages to keep the result from sounding synthetic.
Inputs that matter
audio(AUDIO) - the signal to super-resolve. Straight from the source branch (after declip/PRE low-pass in the example chain).output_sr-48000,44100or96000. FlashSR always infers at 48 kHz; other rates are a clean resample afterwards. The example workflow uses 48000 and handles final delivery rate later.lowpass_input- FlashSR's internal low-pass flag. The example keeps it OFF, because a separate PRE low-pass node already controls input bandwidth. Leave it off unless you know why you want FlashSR filtering too.auto_download- ON means missing weights download automatically on first use. Disable it to fail fast instead, which is handy when you want to know now that files are missing.
Outputs
audio- the super-resolved signal at your chosen rate.settings_json- a report (inference rate, chunk/overlap sizes, low-pass flag, output rate, device) that you wire into the pack's Save Production JSON node so every run is reproducible.
Installing
Clone the pack and install its requirements, then restart and hard-refresh:
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
The node needs a GPU with enough room for the three weights plus your source audio, but FlashSR is deliberately small and fast compared to the generation stage before it.
Where people get burned
The classic complaint, echoed in the pack's own troubleshooting: cymbals and hi-hats sound watery after FlashSR. When that happens, more reconstructed bandwidth isn't the answer - A/B lighter PRE filtering, drop flashsr_hf_mix in the hybrid crossover, or switch HF repair to Gentle. Loaded FlashSR models are cached per process; the LLM Unload node can release them with its unload_flashsr toggle if you're short on VRAM. And if you disable auto_download and then get a missing-weights error, the fix is putting those three .pth files into models/audio/flashsr/ yourself - the code, remember, is already on disk.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | Audio signal to super-resolve. FlashSR reconstructs high-frequency content at 48 kHz; the hybrid crossover later combines it with the original signal. | |
| lowpass_input | BOOLEAN | false | When enabled, FlashSR applies an internal low-pass to its input first. The example workflow keeps this OFF because the PRE low-pass node already controls the input bandwidth. |
| output_sr | COMBO | 48000 | Sample rate of the delivered audio. FlashSR itself always works at 48 kHz; other rates are produced by a clean resample afterwards. The example workflow uses 48000 and handles delivery rate later. |
| auto_download | BOOLEAN | true | When enabled, the missing FlashSR weights (student_ldm.pth, sr_vocoder.pth, vae.pth) are downloaded automatically on first use (see models_config.json) and logged with progress. Disable to fail fast instead. The inference code itself is bundled with the toolkit in flashsr_inference/ and is never downloaded. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| settings_json | STRING | — |