Nodes/ComfyUI · Egregora Audio Super‑Resolution/🎛️ Spectral Enhance (Fat Llama — GPU)
ComfyUI Node

🎛️ Spectral Enhance (Fat Llama — GPU)

The ComfyUI spectral enhancer that adds sparkle — if you can get CuPy to cooperate

By lucasgattas·Created 12 months ago·Updated 7 months ago· 60
🎛️ Spectral Enhance (Fat Llama — GPU)
  • AUDIO
  • AUDIO
â—„target_formatâ–ľâ–ş
â—„max_iterations300â–ş
â—„threshold_value0.60â–ş
â—„target_bitrate_kbps1411â–ş
â—„toggle_normalizetrueâ–ş
â—„toggle_autoscaletrueâ–ş
â—„audio_pathâ–ş
â—„audio_urlâ–ş

Where FlashSR rebuilds missing high frequencies with a diffusion model, Fat Llama does something older-school and frankly more reliable: iterative spectral enhancement. It's the "sharpen the sparkle" step in the Egregora pack, aimed at audio that's noisy or over-compressed and sounds flat. This is the GPU variant, built on the fat-llama PyPI package with CuPy doing the heavy lifting on your NVIDIA card.

The name is a joke that dates the library - Fat Llama's spectral "fattener" adds body and air by iteratively shaping the spectrum, and it's been kicking around the audio world long before anyone thought to bolt it onto ComfyUI. It's the kind of tool where you dial the knob until it sounds good rather than worry about what each parameter mathematically means, which is honestly refreshing after the model-hallucination business of the super-resolution node.

How it works

Under the hood the node hands your audio to fat_llama.audio_fattener.feed.upscale(), which runs an iterative spectral process - each pass re-estimates the spectral envelope and rebuilds detail, controlled by two main knobs: how many iterations and how aggressive the spectral gating threshold is. The node also patches the upstream library's audio read/write so your exact sample width survives the round trip (a known Fat Llama quirk the author fixed here). It can take its input as a ComfyUI AUDIO buffer, a file audio_path, or an audio_url - handy if you're batch-processing files outside the graph.

The inputs that matter

  • max_iterations (default 300, up to 5000) - more iterations = more aggressive and slower. Start at the default; only push higher on genuinely dull sources.
  • threshold_value (default 0.6) - controls the spectral gating. Lower = subtler, higher = more dramatic.
  • target_bitrate_kbps (default 1411) - the target write bitrate; 1411 is CD-quality 16-bit/44.1k WAV. This is a write target, not a "make it this bitrate" promise.
  • target_format - wav or flac for the intermediate file.
  • toggle_normalize and toggle_autoscale - both default on, and you should generally leave them on; they keep the output from clipping and keep the level sane.

Output is one AUDIO buffer into preview/save.

Install - the part that will test you

This node is the pack's fiddliest install, because it needs CuPy and the NVIDIA runtime wheels in your ComfyUI Python environment. The README's exact fix when CuPy can't find CUDA:

python_embeded\python.exe -m pip install -U nvidia-cuda-runtime-cu12 nvidia-cuda-nvrtc-cu12 nvidia-cublas-cu12 nvidia-cufft-cu12 nvidia-curand-cu12 nvidia-cusolver-cu12 nvidia-cusparse-cu12 cupy-cuda12x

The node also wires up CUDA DLL search paths for Windows portable installs before importing CuPy, which fixes the classic "CUDA root not detected" error on embedded Python. install.py installs those NVIDIA wheels on Windows for you. On top of that, the whole pack pins numpy<=1.26.4 because Numba (which fat-llama's stack touches) breaks on newer NumPy.

The honest take

Fat Llama is not a free lunch: it enhances, and over-enhancing makes things sound brittle. On the GPU path it's reasonably quick, but if you don't have CUDA, don't fight it - the CPU/FFTW sibling node does the same thing slower. And as with everything in this pack, run the output through the null-test or metrics nodes before you declare victory, because "different" and "better" are easy to confuse when you've been A/B'ing for an hour.

CategoryEgregora/Audio

Inputs (9)

NameTypeDefaultDescription
target_formatCOMBO2 options: wav, flac
max_iterationsINT3001–5000—
threshold_valueFLOAT0.600–1—
target_bitrate_kbpsINT141164–5000—
toggle_normalizeBOOLEANtrue—
toggle_autoscaleBOOLEANtrue—
AUDIOoptAUDIO—
audio_pathoptSTRING—
audio_urloptSTRING—

Outputs (1)

NameTypeDescription
AUDIOAUDIO—