Read Audio Fpath
Load a file into a SIGNAL
- SIGNAL
ARReadAudio (display name "Read Audio Fpath") is the front door of the ComfyUI-AudioReactive pack. The whole pack runs on a custom data type called SIGNAL - a bundle holding the audio samples plus their sample rate - and this node is how a raw file on disk becomes one. No SIGNAL in, no signal-driven animation out.
The pack is dmarx's port of his own video-killed-the-radio-star notebook (the "vktrs" pipeline that made the rounds as a music-video-automation colab back in 2022). That project turned an MP3 into a pile of feature curves - RMS energy, onset strength, beats - and used them to drive animation. This node is where that old notebook starts inside a node graph: point it at a file and get a SIGNAL you can run through the operators, visualize, or turn into a keyframed curve.
Why you'd reach for it
Because it's the only node in the pack that reads audio. Everything else - every Op* node, Draw Audio Signal, the SignalToCurve node that converts a signal into a KEYFRAMED_CURVE - expects a SIGNAL on its input. You can't skip this step. The workflow shape is: ARReadAudio → feature operator (say Rms) → SignalToCurve → curve into whatever animation scheduler you're driving. This is the audio-reactive aesthetic the community keeps building - think music videos where ControlNet strength, denoise, or keyframe transitions pulse on the beat (the AnimateDiff crowd does exactly this, just with stem-separation nodes on top).
How it works
Under the hood it's one line: librosa.load(fpath). That returns (y, sr) where y is the audio as a 1-D numpy array of floats (librosa downmixes to mono and resamples to its default 22050 Hz unless you tell it otherwise) and sr is the sample rate. The node stuffs both into the SIGNAL dict - {"y": y, "sr": sr} - and hands it out. Because it's librosa.load, you can feed it WAV, MP3, OGG, FLAC, whatever; librosa handles the decoding via soundfile/audioread.
Inputs and outputs
Only one input matters, and it's the one that trips people up:
fpath(STRING, default"audio.wav") - a plain text path, no file browser. It's resolved relative to wherever you launched ComfyUI from, so the safest move is an absolute path likeC:/Users/you/music/song.mp3(or/home/you/music/song.mp3). If it's "not finding the file," this is why.
The single output is SIGNAL. Wire it into any operator node, into Draw Audio Signal to see what you loaded, or into SignalToCurve to make it drive something.
Installing it
Via ComfyUI Manager: search for "AudioReactive" (pack title ComfyUI-AudioReactive) and hit install. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/dmarx/ComfyUI-AudioReactive
Then restart ComfyUI. First launch is slow: the pack's __init__.py auto-pip installs scipy, scikit-learn, librosa, and loguru on startup if it can't find them, and librosa drags in numba and friends. Give it a couple of minutes the first time.
Common issues
- File not found - it's a raw string, not a picker. Use an absolute path.
- The pack won't load at all -
nodes/__init__.pyimportskeyframedat startup, andkeyframedis not in the auto-install list. If ComfyUI throwsModuleNotFoundError: No module named 'keyframed', fix it withpip install keyframed(or install dmarx's ComfyUI-Keyframed pack via Manager). - Nothing to look at - this node has no preview output; chain it into
ARDrawSignalto see the waveform, and pair that with a PreviewImage. - Don't expect a stereo signal or your original sample rate back - librosa hands you mono at 22050 Hz by default, which is plenty for driving animation parameters.
If you're getting audio in and an empty graph out, this node is almost always where the misunderstanding is: it's not a "load and preview," it's "load and emit a SIGNAL." Everything downstream is about that dict.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| fpath | STRING | audio.wav | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SIGNAL | SIGNAL | — |