Nova Load Audio ๐
The loader that tells you what you actually loaded
- audio
- filename
- sample_rate
- duration
- type
- metadata
- bit_depth
Core ComfyUI's audio loader hands you an AUDIO and a filename. It does not tell you the sample rate as a number you can wire somewhere, the source bit depth, whether the file you grabbed was actually a 16-bit MP3, or what's written in its tags. For a measuring-and-delivering pack, that's the missing half.
Nova Load Audio ๐ is a standalone loader that returns the audio plus a full set of facts about it - and unlike most "better loader" nodes, it also does the trimming you'd otherwise do with a separate node.
Inputs
- audio - the dropdown of files in
ComfyUI/input, with the usual upload button. - file_path - the escape hatch that makes this node actually useful. When it's non-empty, this path is used instead of the dropdown, so you can point at an absolute path anywhere on disk. It turns a loader into something you can script.
- channel_mode -
nativekeeps the file's channel count,monodownmixes,stereoduplicates a mono file or keeps the first two channels. Reach for this when you're feeding something that assumes stereo. - start_seconds and duration_seconds - trim on load. Both default to 0, which means "from the beginning" and "to the end". Handy for auditioning a section of a ten-minute render without adding a trim node.
Outputs
audio is the payload - CPU float32, shaped [1, channels, samples], which is the ComfyUI convention; downstream nodes move it to the GPU if they need to. duration is the length of the audio after your trim, not of the file, which is the behaviour you want and not the one you'd assume.
Then the facts: filename (stem, no extension), sample_rate, type (lowercase extension, no dot), bit_depth (bits per sample - 0 when the source is lossy or undeterminable, which is the honest answer rather than a guess), and metadata, a JSON string covering file, format, audio, source, processing, levels and embedded tags.
That metadata output is the quiet star. It's the same probing code the batch loader and the tag nodes use, so an album's worth of files gets described consistently, and you can wire it into Nova Console to read exactly what you're feeding the graph - container, codec, real bit depth, tags included.
How it decodes
Backends are tried in order: soundfile, then torchaudio, then PyAV. First one available wins, and the node registers either way rather than failing at import. There's deliberately no fourth ffmpeg/ffprobe shell-out - PyAV is ffmpeg's libraries linked in rather than spawned, and it ships with ComfyUI, so shelling out would buy you a process spawn and nothing else.
All decoding and tensor work happens on the CPU in float32. No .cuda(), no .half(), no autocast, no CUDA extensions. That's the ComfyUI-correct convention and also why this node behaves the same on CUDA, ROCm, DirectML and MPS builds - which, given that half the core audio tooling in this ecosystem assumes NVIDIA, is a real selling point if you're on a Radeon.
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 โ ๐ ๏ธ Utility & IO. Only torch is required, and ComfyUI already has it - the decode backends are all optional and probed at runtime. soundfile isn't shipped by ComfyUI and isn't declared either; it's a preference, not a requirement, and PyAV covers it.
Where it fits
Nova Load Audio ๐ โโโถ Nova Audio Master ๐งพ โโโถ Save Audio WAV โฌ๏ธ โโโถ Validator
โ
โโโ metadata / duration / bit_depth โโโถ Nova Console ๐ฅ๏ธ
The pack's mastering example starts exactly here: load a track, master it, view the report, identify it, save, validate. If you're only loading one file and you want it to tell you the truth about itself, this is the node - and if you're loading a folder, use its sibling Nova Batch Load Audio ๐ผ.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | COMBO | Audio file in ComfyUI/input. Use the upload button to add one. | |
| file_path | STRING | When not empty this path is used instead of the dropdown selection. | |
| channel_mode | COMBO | native | native keeps the file's channel count; mono downmixes; stereo duplicates mono or keeps the first two channels. |
| start_seconds | FLOAT | 0.000โ86400 | Skip this many seconds from the start. 0 = from the beginning. |
| duration_seconds | FLOAT | 0.000โ86400 | Length to keep after start_seconds. 0 = to the end of the file. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | ComfyUI AUDIO payload: CPU float32 waveform [1, channels, samples]. |
| filename | STRING | File name without its extension. |
| sample_rate | INT | Sample rate in Hz. |
| duration | FLOAT | Duration of the returned audio in seconds. |
| type | STRING | File extension, lowercase and without the dot (e.g. wav). |
| metadata | STRING | JSON string: file, format, audio, source, processing, levels and embedded tags. |
| bit_depth | INT | Bits per sample of the source (0 when the source is lossy/compressed). |