NovaSR
The 50KB node that makes video-model audio sound human again
- audio
- audio
- spectrogram
NovaSR does exactly what its name doesn't say: it upscales audio. Feed it anything ComfyUI can load - 16kHz TTS, the band-limited soundtrack that comes out of an LTX-2 or Wan render, a muffled old recording - and it pushes the whole thing out at clean 48kHz. The trick is the size and the speed. The model is a 50KB checkpoint and it runs at roughly 3600x realtime on an A100. That's not marketing; it's a handful of tiny Conv1D layers, so it costs your GPU less than a single attention block.
Where it fits: audio is the bolt-on layer of ComfyUI, and it exists mostly because video got good enough to need sound. Video models produce audio that looks fine in a spectrogram and sounds hollow - limited frequency range, low sample rate. NovaSR is the "expand the frequency range" step you drop between the model's audio output and your final save. You'll spot it inside Wan 2.2 workflows sitting right after a TTS step, doing the same job the bigger AudioSR nodes do for LTX-2 audio. It's post-processing, not magic - it won't fix clipping or invent detail that was never recorded. Think of it as SeedVR2-for-sound: it makes what's there sound less like it was squeezed through a phone line.
How it works
The node (class NovaSR, found under Add Node → Audio) resamples your input to 16kHz with librosa if it isn't already there, downmixes stereo to mono (the model is mono-only), then runs a BigVGAN-style decoder - tiny Conv1D blocks with snake activations and weight-normed resampling - in fp16 to produce fixed 48kHz audio. It caches the model in memory after the first run, so the second clip is nearly free. The whole pass on a few minutes of speech is a couple of seconds.
Inputs and outputs
- audio (required): feed the
AUDIOoutput of ComfyUI's Load Audio node. Any sample rate, any format that node supports - wav, mp3, flac, ogg, aiff. - model: pick a checkpoint from
ComfyUI/models/NovaSR/. Defaults toNovaSR.safetensors; if the folder's empty the node tries to auto-download it. - output_stereo: NovaSR outputs mono. Flip this to duplicate it to both channels for pipelines that demand stereo - which is most video-save paths.
- unload_model: frees VRAM after each run. Only worth it if you're memory-starved, since the next run pays a reload.
- show_spectrogram: emits a before/after spectrogram comparison as an IMAGE.
Two outputs: audio (AUDIO, fixed 48kHz) and spectrogram (IMAGE - wire it into a PreviewImage if you want to see the frequency range you gained). The audio plugs into a Save Audio or video-combine node.
Install
Easiest: ComfyUI Manager → Install Custom Nodes → search "NovaSR" → Install, then restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/Saganaki22/ComfyUI-NovaSR
pip install -r ComfyUI-NovaSR/requirements.txt
That installs torch, torchaudio, librosa, soundfile, einops, safetensors, matplotlib, and huggingface_hub. On first run the node auto-downloads the 50KB model from drbaph/NovaSR into ComfyUI/models/NovaSR/; if that download fails (proxy, blocked HuggingFace), grab NovaSR.safetensors by hand and drop it in that folder.
Gotchas
- The mono surprise. You will hit this eventually: output is mono by default, and downstream nodes that expect stereo can throw silent or phase-weird results. Turn on
output_stereo. - "Audio input is a filename string" means you wired the wrong output - the node needs the loaded audio data from Load Audio, not a path. Reconnect.
- Model not found errors point at
ComfyUI/models/NovaSR/- check the folder is spelled exactlyNovaSR, notnovasr. - Recombining with video: if VideoHelperSuite's combine step throws an ffmpeg NaN error after you swap in upscaled audio, your audio is shorter than the video. Pad it to match.
- librosa drags in numba/llvmlite on Windows. pip sorts it out, but the first install is chunky for a node this small.
If you've seen ComfyUI-AudioSR (same author, same family), that's the heavyweight end - ~2GB and 0.6x realtime. For cleaning up speech before a video render, NovaSR is the one you'll actually keep in the workflow; it's the rare audio node you install once, use everywhere, and never think about again.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| modelopt | COMBO | NovaSR.safetensors | Model checkpoint file (place in ComfyUI/models/NovaSR/) |
| output_stereoopt | BOOLEAN | false | Convert output to stereo (mono input required for NovaSR, but some ComfyUI pipelines need stereo) |
| unload_modelopt | BOOLEAN | false | Unload model from memory after generation (frees VRAM, but slower next run) |
| show_spectrogramopt | BOOLEAN | true | Generate before/after spectrogram comparison image |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| spectrogram | IMAGE | — |