Empty Image From Audio β‘π ‘π π £π
A blank canvas sized to your song, frame for frame
- audio
- empty_image
- frame_count
If you've ever tried to build an audio-reactive animation, you've hit this problem before you even get to the fun part: you need a starting image sequence, but you don't have a source video - you have a song. How many frames should that sequence be? Empty Image From Audio answers that question for you by looking at your audio clip and handing back a blank canvas that's exactly as long as the track, at whatever frame rate you're targeting.
It's one of the smaller utility nodes in the RyanOnTheInside pack - built by Ryan (u/ryanontheinside), who's also behind ComfyStream and Daydream, the real-time reactive-video tooling you'll see demoed on Twitch. The whole pack is organized around "everything reactivity": audio, MIDI, motion, depth, color and time as control signals that drive a workflow instead of you keyframing it by hand. This node is the entry point for the audio side of that - it's not reactive itself, it's the blank sheet of paper you draw the reactive stuff onto.
How it works
Feed it an audio clip and a frame rate, and it measures how long the clip runs. Combine that duration with your chosen frame_rate and you get the number of frames a video at that length and rate would need - that's your frame_count. It then generates a plain, blank IMAGE batch of that length at the width/height you set. There's no model involved and no GPU work beyond allocating pixels - it's pure arithmetic plus a tensor fill.
Inputs and outputs that matter
audio(required) - the source clip, from a Load Audio-type node upstream. This is what determines the frame count; everything else downstream inherits its timing from here.frame_rate(default 30, 0.1β120) - the fps you're animating at. Get this wrong and your visuals will drift out of sync with the music even though the frame count is "correct," because you're measuring against a different fps than you actually render at.width/height(default 512, 16β4096) - plain pixel dimensions for the blank canvas.
It outputs two things: empty_image, the blank frame sequence itself (wire this into a FlexImage node or anything else in the pack that generates or paints onto an image sequence), and frame_count, an integer you'll want to plug into any downstream node that needs to know how many frames it's dealing with - a batch repeat, a loop counter, whatever's keeping your Feature Extraction nodes and your image nodes marching in lockstep.
Installing it
Through ComfyUI Manager: search RyanOnTheInside, install, restart. By hand:
cd ComfyUI/custom_nodes
git clone https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside
cd ComfyUI_RyanOnTheInside
pip install -r requirements.txt
This particular node doesn't need any of the heavier dependencies the pack pulls in for audio analysis, MIDI, or optical flow - it just needs ComfyUI's own AUDIO type from a loader node - but pip install -r requirements.txt still installs the whole pack's dependency set, since custom node packs in ComfyUI don't install per-node. If you're on a fresh install and only want this node, you're still on the hook for the full requirements file.
Where people get tripped up
The README flags that upgrading from v1 to v2 of this pack has caused update failures for some users - if nodes go missing or start throwing import errors after an update, a full uninstall and reinstall (not just a git pull) is the documented fix.
The more common mistake specific to this node: mismatching frame_rate here against the frame rate you actually export or render at. The node has no way to know what you'll do downstream - it just does the math you gave it. If your final video plays at a different fps than what you set here, the audio-to-frame mapping this node calculated is now wrong, and everything reactive built on top of it will feel off-beat even though nothing individually errored. Set it once, and reuse that same number everywhere else in the graph - including in any Feature Extraction node reading the same audio clip, so the frame count and frame rate stay consistent end to end.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | Input audio to determine frame count | |
| frame_rate | FLOAT | 30.00.1β120 | Frame rate of the output image sequence (0.1 to 120 fps) |
| height | INT | 51216β4096 | Height of the output images (16 to 4096 pixels) |
| width | INT | 51216β4096 | Width of the output images (16 to 4096 pixels) |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| empty_image | IMAGE | β |
| frame_count | INT | β |