Audio Meter Overlay
Put a live audio waveform on your video — the 'music video' look in one node
- video
- video
Every second clip you scroll past is some AI video with a fake waveform bouncing at the bottom, and half of them are faked in post because actually rendering one is a pain. Audio Meter Overlay renders a real one. It takes a video with an audio track and burns a live audio meter - an actual waveform driven by the clip's sound - into the corner of the frame. It's the one node that instantly makes a generated clip read as "content" instead of "test render."
You'll use it for music-visualizer-style content, reaction/playlist videos, or anywhere you want the audio to be visible: a podcast clip with a waveform in the corner, a song demo with a bouncing bar, a before/after comparison where you want the viewer to see the loudness change. It's also a handy diagnostic - run it on a final export and you can see whether the loudness stage actually did its job.
How it works
The source is honest about the machinery: it requires FFmpeg's showvolume and overlay filters, and it errors if the input video has no audio track. showvolume generates the meter visualization from the decoded audio, and overlay composites it onto the video at the corner you pick. The controls are pure layout:
meter_w/meter_h- the meter's size in pixels (defaults 400×20, clamped to fit the frame).corner- which of the four corners it sits in (defaultbottom-left).margin- the gap in pixels from the frame edge (default 16).
The optional video input takes a COMFYTV_VIDEO and the single output is the composited video. That's it - there's no audio output, because this stage doesn't alter sound; it just draws it. Internal inputs (force_run_token, project_id, parent_output_id) are frontend plumbing.
Installing ComfyTV
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
Full backend restart, then ComfyTV → AudioFX; ComfyUI Manager finds "ComfyTV". Zero extra Python deps - the filters run through FFmpeg via PyAV, bundled with ComfyUI. No models.
The pack-wide install trap: on macOS / ComfyUI Desktop / multi-install machines, cd ComfyUI/custom_nodes can clone into the wrong instance - clone succeeds, stages never appear. Read the running instance's path from the startup log, clone into that instance's custom_nodes by absolute path (quote paths with spaces/parentheses), confirm ComfyTV/__init__.py is top-level, restart the backend fully.
Common issues
- "the video has no audio track." The stage refuses to run without audio - that's the author's own error message. Mux a soundtrack onto the clip first (the pack's video/audio tools can do it), or render the video with audio enabled.
- The meter is tiny or huge.
meter_w/meter_hare clamped to the frame, so on a narrow clip 400×20 may read small. Scale to taste. - It covers the important part of the frame. It's a corner overlay by design -
cornerandmarginare the only position controls, so pick the corner with the least going on. - The meter doesn't move. If the audio is normalized to a flat level (very compressed), the meter barely animates. That's a loudness problem, not a meter problem.
It's a simple idea executed properly, and it's the closest ComfyTV gets to a free "music video" button.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| meter_w | INT | 40080–1920 | — |
| meter_h | INT | 208–120 | — |
| corner | COMBO | bottom-left | 4 options: bottom-left, bottom-right, top-left, top-right |
| margin | INT | 160–200 | — |
| videoopt | COMFYTV_VIDEO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | COMFYTV_VIDEO | — |