Nodes/Nova Audio Player/Nova Save Audio WAV PCM16|PCM24|FLOAT32 ⬇️
ComfyUI Node

Nova Save Audio WAV PCM16|PCM24|FLOAT32 ⬇️

24-bit WAV that works on ROCm, plus a switch that proves it

By NovaFemme·Created about a month ago·Updated 6 days ago· 1
Nova Save Audio WAV PCM16|PCM24|FLOAT32 ⬇️
  • audio
  • audio
  • file_path
◄file_pathNovaAudio►
◄formatwav►
◄filename_modeexact (overwrite)►
◄reload_after_savefalse►
◄wav_encodingPCM_24►
◄sample_rate0►

ComfyUI's stock audio save takes you through TorchCodec or torchaudio for the actual encoding, and on a ROCm box that's where things get interesting - the encoders aren't always there, and 24-bit and float32 are the first casualties. Poking at a Radeon and getting 16-bit mono-ish output with no error is a known genre of afternoon.

Save Audio WAV PCM16|PCM24|FLOAT32 ⬇️ sidesteps the whole stack. The writers are pure struct/numpy - no torchaudio, no TorchCodec, no external binary - which is precisely what makes 24-bit and 32-bit float output work on a card where the torch encoders don't. The code is ported from ComfyUI-SoundHub (MIT, Yuan-Man) and the original project is left untouched; both packs' save nodes coexist fine.

Inputs

  • audio - the thing you're saving.
  • file_path - default NovaAudio. Subfolders supported.
  • format - wav only in this build, and the tooltip says why: it's written directly, without TorchCodec.
  • wav_encoding - PCM_16, PCM_24 (default) or FLOAT_32. 24-bit for delivery, float32 for archival intermediates you'll keep processing.
  • filename_mode - this one is a real decision. exact (overwrite) treats file_path as the final path and overwrites it; appends number e.g. 00001 gives you _00001.wav style increments. For a master you're versioning, appending is the safer default; for a fixed delivery name that a downstream tool expects, exact is correct.
  • reload_after_save - the interesting one. See below.
  • sample_rate (optional) - an INT override for the rate carried in the AUDIO payload. 0 means "use the payload's own rate", which is what almost every graph wants. This used to be SoundHub's private SAMPLE_RATE link type, which would have made this node depend on that pack being installed.

Outputs: audio and file_path (the absolute path written).

The switch worth using

reload_after_save off - the audio output is your input, passed straight through, and you move on. reload_after_save on - the file is read back off disk and that is what leaves the output. Which means the audio you hand downstream is the real quantised 24-bit or 16-bit samples, not what you hoped they'd be.

That's the difference between trusting a dropdown and verifying a render. Wire the output into a player or a validator, and you're measuring the file rather than the intent. For a mastering chain where you signed off on a master and then wrote to disk, this is the honest way to check the write didn't change anything.

Install

ComfyUI Manager → Nova Audio Player → install → restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/NovaFemme/ComfyUI-NovaAudioPlayer.git

Under ▶️ Nova Audio → 📦 Delivery & Metadata. No models, no downloads, no extra pip packages for this node - it's struct and numpy against an already-correct AUDIO payload.

Notes from the field

Where's MP3? Deliberately not here, and not on the player's download arrow either. The pack's position is that lossy is a transcode you do at the end - the WAV is one ffmpeg command away when you need it. If you need MP3 inside ComfyUI, add a node for it rather than asking this pack to be one.

Sample rate overrides are easy to regret. Setting sample_rate higher than your source doesn't add bandwidth - it just relabels and upsamples. Resample before the save if you actually want 48k from a 44.1k render.

ROCm users: the pack is explicit that its loader and encoder paths are CPU-side on purpose - a CPU float32 payload, moving to the GPU only inside the nodes that need it. That's both the ComfyUI-correct convention and the reason it doesn't trip the HIP allocator. Which is also why an NVIDIA-only troubleshooting checklist full of --no-half flags and xformers advice isn't relevant here.

Category▶️ Nova Audio/📦 Delivery & Metadata

Inputs (7)

NameTypeDefaultDescription
audioAUDIOThe audio to save.
file_pathSTRINGNovaAudioWhere to save, under ComfyUI's output folder. Subfolders are supported. With filename_mode 'exact' this is the exact file name, extension included, e.g. NovaAudio/My Track.wav. With 'appends number' it is a prefix: a number and .wav are added.
formatCOMBOwavWAV only in this build — written directly, without TorchCodec.
filename_modeCOMBOexact (overwrite)exact (overwrite): the file is written as file_path, exactly. A file that already has that name is overwritten. appends number: file_path is a prefix and a counter is added, e.g. _00001.wav, so nothing is overwritten.
reload_after_saveBOOLEANfalseOff: the audio output passes the input through untouched. On: the file is read back off disk and that is what leaves the audio output — the real quantised samples, for verifying a 24-bit or 16-bit render rather than trusting it.
wav_encodingCOMBOPCM_24PCM_16 = 16-bit PCM, PCM_24 = 24-bit delivery/master WAV, FLOAT_32 = 32-bit IEEE float archival WAV.
sample_rateoptINT00–768000Override the rate carried in the AUDIO payload. 0 = use the payload's own rate.

Outputs (2)

NameTypeDescription
audioAUDIOWith reload_after_save on, the file read back off disk — the actual quantised samples. With it off, the input audio passed straight through.
file_pathSTRINGAbsolute path of the file that was written.