Nodes/OmniNodes/Audio Waveform 🎡
ComfyUI Node

Audio Waveform 🎡

The Audio-Edition of 'Show Me the Shape'

By TensorVizionΒ·Created 3 months agoΒ·Updated about 8 hours agoΒ· 0
Audio Waveform 🎡
  • audio_samples
  • waveform_image
β—„width1024β–Ί
β—„height256β–Ί
β—„line_color_r0β–Ί
β—„line_color_g212β–Ί
β—„line_color_b255β–Ί
β—„bg_color_r5β–Ί
β—„bg_color_g10β–Ί
β—„bg_color_b20β–Ί
β—„line_thickness2β–Ί

Every audio editor shows you a waveform for a reason: the shape tells you almost everything about the sound at a glance. Loud parts are tall, quiet parts are thin, silence is a flat line, and a wall of solid blocks means clipping. Audio Waveform renders that shape as a ComfyUI IMAGE tensor, so the same "read the sound by looking at it" habit works inside your node graph.

The mechanism is deliberately simple: it takes the audio samples, downsamples them to fit the requested width, and draws the envelope as a filled shape on a colored background. That's the whole job, and the node is honest about it - it's a visualization, not an analysis.

The controls, and the one that matters

  • width / height - output resolution of the image.
  • line_color_r/g/b and bg_color_r/g/b - RGB colors for the waveform and the background. The defaults (a cyan line on a dark blue-black) look good on dark ComfyUI themes, but if you're saving these out for a video you'll want to match your actual palette.
  • line_thickness - pixel width of the waveform stroke.

That's the whole input list. The single output is waveform_image, an IMAGE.

Why you'd actually reach for it

Three genuinely useful jobs, and none of them is "make a pretty picture":

  1. Verifying generated audio actually has signal. Loudness-matching, normalization, sidechain ducking - all of them silently fail in ways a waveform exposes instantly. A generator that produced silence (or a pure DC thump) looks nothing like a healthy waveform, and you'll catch it in a preview before it wastes a render pass downstream.
  2. Spotting clipping and level problems. A waveform whose top and bottom are flat square lines is clipping - the audio has slammed into the ceiling. That's a visual red flag you can check without meters, and it's the fastest way to know you need Audio Normalize before mixing.
  3. As a visual contact-sheet index. Render waveforms for a batch of audio files, tile them with a contact-sheet node, and you get a browsable map of what each file contains - which file has the loud section, which is mostly silence, where the hits are.

It pairs naturally with Audio Spectrogram (frequency content) as the amplitude-over-time companion, and the two together give you a complete "read the audio by eye" setup.

Install and gotchas

ComfyUI Manager β†’ search OmniNodes, or:

cd ComfyUI/custom_nodes
git clone https://github.com/TensorVizion/OmniNodes

Restart ComfyUI; it's under TensorVizion/Audio. Pure NumPy/Pillow, no extra dependencies.

The honest note: this is a plot, not an analysis - it won't tell you BPM or loudness numerically. If you want numbers, use Audio Beat Detect or Audio Normalize's peak_db/rms_db outputs. And like the spectrogram, a long track at default width compresses a lot of audio into a small image; for a real read, bump the width up.

CategoryTensorVizion/Audio

Inputs (10)

NameTypeDefaultDescription
audio_samplesAUDIOβ€”
widthINT1024256–4096β€”
heightINT25664–2048β€”
line_color_rINT00–255β€”
line_color_gINT2120–255β€”
line_color_bINT2550–255β€”
bg_color_rINT50–255β€”
bg_color_gINT100–255β€”
bg_color_bINT200–255β€”
line_thicknessINT21–8β€”

Outputs (1)

NameTypeDescription
waveform_imageIMAGEβ€”