Audio Analyze
Is your audio loud enough for YouTube? This stage tells you — and flags every silence too
- audio
- video
- report
Audio is the last thing most ComfyUI people think about, and it shows - half the videos that come out of this ecosystem have levels that are a coin flip. Audio Analyze is the stage that puts a number on it. It measures your audio (or the audio track of a video) and hands you back a text report: loudness, RMS levels, stats, or a complete map of every silence in the clip. No audio is changed - this is pure measurement, the thing you run before you normalize, not instead of it.
You'll use it in two very common spots. First, at the end of a pipeline: run it on your final mix to check the loudness against real platform targets - the report literally compares your integrated LUFS and true peak against the specs for services like YouTube and Spotify and tells you if you're "over," "quiet," or "ok" for each. Second, during cleanup: run it in silence mode on a voiceover to get exact timestamps of every gap, which you can then use to trim or duck against.
How it works
The mode combo picks the analysis, and the source shows what each does under the hood (all FFmpeg filters via PyAV):
- loudness - measures integrated loudness (LUFS), true peak, and loudness range, then scores it against platform compliance targets.
- volume - mean and max volume, via FFmpeg's
volumedetect. - stats - the full
astatsdump: RMS level, RMS peak, DC offset, peak levels per channel. - silence -
silencedetectwith yoursilence_noise_dbthreshold (default -60 dB) andsilence_durationminimum (default 2s). Every gap gets a start/end/duration line in the report.
The output is report, typed COMFYTV_TEXT - it's a text payload you can read in the node or pass to something downstream that consumes text (like a prompt fragment or a display). The optional inputs are audio and video: give it either, and it measures the audio. The three internal inputs (force_run_token, project_id, parent_output_id) are frontend plumbing; ignore them.
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 analysis runs through FFmpeg filters via the PyAV bindings ComfyUI already bundles. No models.
The install trap that bites everyone on macOS/Desktop/multi-install: the relative cd ComfyUI/custom_nodes can target the wrong instance and the clone "succeeds" into nowhere you can see. Read the running instance's path from its startup log, clone into that instance's custom_nodes by absolute path (quote paths with spaces/parentheses), verify ComfyTV/__init__.py is top-level, restart the backend.
Common issues
- "loudness" report says everything is over/quiet. That's the point - it's telling you what a platform would say. Feed the result into the Audio Loudness stage to fix it.
- Silence mode finds nothing. Your
silence_noise_dbis probably too strict (default -60 dB catches a lot, but room tone can be louder) orsilence_durationtoo long. Lower the threshold. - Nothing on the video input. Analyze reads the audio track from a video input; if the clip has no audio track there's nothing to measure.
It's the "run the report before you ship" node. Twenty seconds of measurement beats a surprise "why is this quiet" on the other end.
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. |
| mode | COMBO | loudness | 4 options: loudness, volume, stats, silence |
| silence_noise_db | FLOAT | -60-100–0 | — |
| silence_duration | FLOAT | 2.000.01–60 | — |
| audioopt | COMFYTV_AUDIO | — | |
| videoopt | COMFYTV_VIDEO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| report | COMFYTV_TEXT | — |