Load Video + Metadata
The 'what am I actually working with' node
- video
- video
- fps
- duration_sec
- frame_count
- width
- height
- metadata_json
The "what am I actually working with" node
Load a video in most ComfyUI workflows and you get frames and a shrug. Frame count, real FPS, resolution, duration - you're usually left guessing, and the guessing is where every downstream mismatch starts. MKRLoadVideoMetadata fixes that by being a two-in-one: it loads the video and hands you its vitals as individual typed outputs, ready to wire into FPS-aware nodes or a manifest.
It's from MKRShift_Nodes, the large utility pack by Cris K B. No models, no API - just ffprobe under the hood, so ffmpeg needs to be on your PATH.
How it works
Give it a video_path string or a connected video object (the pack's MKR_VIDEO type or anything resolvable to a file path). It runs ffprobe, finds the video stream, and reads FPS, duration, resolution, codec, and frame count. Everything comes out as plain values, so you can drop this node in front of anything that takes a number.
If no file resolves, you get zeros and a "Video file was not found" warning inside metadata_json - it doesn't hard-crash, which is either thoughtful or infuriating depending on how much you trust your graph. (Check the warnings, is all I'm saying.)
The outputs
Seven of them:
video- theMKR_VIDEOpayload passed through so you can keep the wire alive.fps(FLOAT) - the real frame rate from the container, which is what you want when something asks forfallback_fpsfurther down the graph.duration_sec(FLOAT),frame_count(INT) - how long and how many.width,height(INT) - resolution.metadata_json- the whole lot as a JSON string, including codec, resolution string, path, and warnings.
That metadata_json output is the sleeper. It's built for report and manifest nodes - the pack's whole Media/IO lane is about feeding text summaries downstream so a delivery sheet can be generated without you transcribing anything.
Where it fits
This is the node you put at the start of a video-processing branch when you need to make decisions: "if fps < 24, run this; if width < 1080, skip the upscale". It's also your sanity check when a workflow is running at the wrong speed - plug this in, read the actual FPS, and nine times out of ten you've found the mismatch. Like its audio sibling, MKRLoadAudioMetadata, the MKR_VIDEO output is pack-native: it chains to other MKR video nodes, not to stock ones. Don't try to feed it into a generic video loader expecting it to work - the pack has separate nodes for frame extraction.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
Restart ComfyUI - or grab "MKRShift Nodes" from ComfyUI Manager. No pip dependencies, no models. The only real gotcha, same as every MKR media node: no ffmpeg on PATH means no metadata, and the symptom is zeros and warnings rather than a loud error. Install ffmpeg once and all of this pack's media lane starts behaving.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| video_path | STRING | — | |
| videoopt | * | — |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| video | MKR_VIDEO | — |
| fps | FLOAT | — |
| duration_sec | FLOAT | — |
| frame_count | INT | — |
| width | INT | — |
| height | INT | — |
| metadata_json | STRING | — |