Nodes/ComfyUI-AudioReactive/Read Audio Fpath
ComfyUI Node

Read Audio Fpath

Load a file into a SIGNAL

By dmarx·Created 3 years ago·Updated 2 years ago· 11
Read Audio Fpath
    • SIGNAL
    fpathaudio.wav

    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 like C:/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__.py imports keyframed at startup, and keyframed is not in the auto-install list. If ComfyUI throws ModuleNotFoundError: No module named 'keyframed', fix it with pip install keyframed (or install dmarx's ComfyUI-Keyframed pack via Manager).
    • Nothing to look at - this node has no preview output; chain it into ARDrawSignal to 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.

    CategoryAudioReactive

    Inputs (1)

    NameTypeDefaultDescription
    fpathSTRINGaudio.wav

    Outputs (1)

    NameTypeDescription
    SIGNALSIGNAL