ComfyUI Node

Video Report

Read the parameters of a VIDEO you didn't create

By jesse890423·Created 17 days ago·Updated 8 days ago· 1
Video Report
  • 视频
  • report
◄报告语言Follow UI language►

A VIDEO wire carries a lot of information and shows you almost none of it. You get a thumbnail on the node and a vague sense that something rendered. This node is the receipt: resolution, frame rate, codec, duration, audio track, and - if the video came from this pack's save node - a source-versus-output comparison for every file that got written.

Let's be straight about its place in the world. Save Video (Format Converter) already prints this exact report and exposes it as its summary string output. So if you're converting, you don't need this node at all. It's for the other case: you want to inspect a VIDEO that never went through that save node.

When that actually comes up

More often than you'd expect, once you start debugging other people's workflows. Core Load Video hands you a VIDEO with no clue what's inside. A model pipeline returns a VIDEO and you want to know whether it's 24 or 25 fps before you encode it to something playback-critical. Someone shares a graph with a weird stutter and you want to confirm the frame rate is what the node claims. Or you're chaining into a node that silently refuses certain container/codec combinations, and you need to know which one you're holding.

It's a diagnostic node, and diagnostic nodes are how you stop guessing. It writes nothing to disk and changes nothing about the video.

How it works

On run, it pulls the file path out of the VIDEO - either the source path the loader recorded on the object, or the video's own stream source, which is why it also works with a file-backed VIDEO from core nodes. It opens that file with PyAV and re-probes it, formats the parameters into a text block, and repeats the exercise for every file the save node reported writing (those are stashed on the VIDEO object as a produced-files list, each tagged copy or re-encoded).

Then it prints the whole thing to the console prefixed with [Video Report] and returns it as a string, plus a preview of the file it just inspected. It's marked as an output node, so it runs on its own as a terminal node without anything wired downstream.

Inputs and outputs

Two inputs, one output. 视频 is the VIDEO from any video-producing node. 报告语言 picks English, Chinese, or "follow the UI language" for the report text - the pack ships both translations and the report is generated server-side, so that dropdown is the only way to change it.

The single output is report, a STRING. That's the whole point of having it as a socket rather than just console spam: pipe it into a text display node, or into anything that logs, and now your workflow records what it produced. Handy when you're running batches and want a written trail of which encode settings actually landed.

Install

Manager → search comfyui_media_toolbox, or:

cd ComfyUI/custom_nodes
git clone https://github.com/jesse890423/comfyui_media_toolbox.git

Restart, then find it under Video. No model downloads, no extra pip packages beyond the pack's requirements.txt (imageio-ffmpeg, for the save nodes). The probe itself uses PyAV, which is part of ComfyUI core, so this node will happily report on a video even if your ffmpeg situation is a mess.

What it won't tell you

It won't inspect a video that isn't a file. If the VIDEO was built in memory - a frames-to-video node, a concatenation, anything the pack can't resolve to a path inside ComfyUI's input/output/temp - the report says the input isn't file-backed and stops there. That's the most common "why is this empty" moment. Nothing is broken; there's just no file to read parameters from.

"The video input is empty" means an upstream node produced no video at all. Follow the wire back; the failure is upstream, not here.

It doesn't validate playability. A report saying H.264 / 1920×1080 / 30 fps / AAC stereo tells you the container's metadata, not that the file plays in a browser. If a file looks fine here and fails in a player, the encoder is the suspect, and a stripped ffmpeg build is the usual culprit.

One last practical note: if you only wire this node in to read one number, consider just reading the info output on Load Video (Advanced) instead. It's the same family of information straight from the loader, and it's already carrying the trim window you asked for.

CategoryVideo

Inputs (2)

NameTypeDefaultDescription
视频VIDEOThe VIDEO input of any video output node.
报告语言COMBOFollow UI languageLanguage of the report text. "Follow UI language" produces a Chinese report while the ComfyUI interface is Chinese, and an English report otherwise.

Outputs (1)

NameTypeDescription
reportSTRING—