Video Info
Measure a clip without decoding a single frame
- video
- width
- height
- duration
- frame_count
- fps
- bit_depth
- has_audio
- summary
Before you resize a video, sample it, or hand it to a video sampler, you usually need to know what you're holding: how big are the frames, how long is the clip, how many frames, what rate, is there sound? Video Info answers all of it as typed numbers - and because it reads the header rather than the frames, a feature-length film costs about the same as a two-second clip.
What it does
Wire anything on a VIDEO socket into it - a loaded file, a video built from frames, even a trimmed one - and out come the figures as numbers:
- width / height - frame size in pixels (1920×1080 for HD, 3840×2160 for 4K). Feed them to a resize node and you never hardcode a resolution again.
- duration - seconds the video plays, as a FLOAT.
- frame_count - how many frames play. Taken from the header, or worked out from duration × rate when the header doesn't say. This is the one to feed a video sampler that needs its length told to it.
- fps - frames per second. 24 for film, 25 or 30 for broadcast, 29.97 for NTSC. Feed it to a save node so a render plays back at the speed it was shot rather than defaulting.
- bit_depth - bits per colour component: 8 for most footage, 10 for HDR. Feed it to a save node so a 10-bit source is written back at 10 bits instead of being flattened to 8.
- has_audio - true when there's a decodable sound track. Check it before wiring an audio socket into a save; false for a silent file and for one whose track FFmpeg has no decoder for.
- summary - all of the above on one line, like
1920x1080, 240 frames, 10.00s at 24 fps, 8-bit, with sound. Wire it to a text preview, or into a filename prefix to stamp a render with what it came from.
The header trick
Reading "from the header rather than the frames" is what makes this node near-free on any clip, and it's also why a trim is honoured - the figures describe what plays (the trimmed range), not the raw file on disk. That distinction matters when you're building adaptive pipelines: measure first, then pick a resize target, an fps, or a frame budget that fits the actual content.
The natural pattern is Video Info → wire width, height, fps and frame_count straight into whatever needs them, and route has_audio into a switch so a silent source doesn't try to wire audio downstream. It turns "video that could be anything" into "video with known dimensions and duration" before a single expensive operation runs.
Don't confuse it with Video Metadata
There are two video-measuring nodes in the suite and they take different inputs. Video Info reads any VIDEO wire directly and is what you want here. Video Metadata instead takes the one metadata socket that the Load Video / Load Video (Upload) nodes emit - it reports what that load measured (including the source file's own figures) and is the right tool when you want the file's original rate before a target_fps was applied. Video Info is the general-purpose measurer; Video Metadata is the loader's companion.
Installing it
Part of WAS Node Suite v3 (WASasquatch's was-node-suite-comfyui, MIT). Search "WAS Node Suite v3" in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui.git
Restart ComfyUI after installing. Requires ComfyUI 0.14.0+ and Python 3.10+. Video handling rides on ComfyUI's own bundled FFmpeg/PyAV stack, so nothing extra to install.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | The video to measure. Anything on a VIDEO wire: a file that was loaded, a video built from frames, or a trimmed one. A trim is honoured, so the figures describe what plays rather than the file. |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| width | INT | Frame width in pixels. 1920 for HD, 3840 for 4K. |
| height | INT | Frame height in pixels. 1080 for HD, 2160 for 4K. |
| duration | FLOAT | Seconds the video plays for. 10.0 for 240 frames at 24 fps. 0.0 where the header names no length and none could be worked out from the frame count and the rate. |
| frame_count | INT | How many frames play. 240 for ten seconds at 24 fps. Taken from the header, or worked out from the duration and the rate where the header does not say. Feed it to a sampler that needs its length. |
| fps | FLOAT | Frames per second. 24 for film, 25 or 30 for broadcast, 29.97 for NTSC. 0.0 where the header names no rate. Feed it to a save node so a render plays at the speed it was shot. |
| bit_depth | INT | Bits per colour component. 8 for most footage, 10 for HDR and higher end capture. Feed it to a save node so a 10-bit source is written back at 10 bits instead of being flattened to 8. |
| has_audio | BOOLEAN | True when there is a sound track that can be decoded. False for a silent file, and for one whose track FFmpeg has no decoder for. Check it before wiring an audio socket into a save. |
| summary | STRING | All of the above on one line, as `1920x1080, 240 frames, 10.00s at 24 fps, 8-bit, with sound`. Wire it to a text preview, or into a filename prefix to stamp a render with what it came from. |