Mpi Load Video
A no-frills video loader that's faster than the fancy one
- images
- audio
- fps
- frame_count
- duration
- width
- height
- has_audio
If you've loaded a video into ComfyUI before, you know the drill: pick Video Helper Suite's Load Video (Path), wait through the VHS parameter surface, watch it grind out an in-graph preview. Mpi Load Video is the stripped-down version that skips all of that. One ffmpeg pass, no preview, no VHS knobs - it decodes frames and audio and reports the source metadata in one go, and it's noticeably faster for it. When you just want the pixels in a tensor so you can process them, that's the trade worth making.
Two inputs: string, the path (named to match the pack's MpiString / MpiAnyChecker outputs), and block_if_empty, default ON. Empty or missing path blocks downstream execution; flip it OFF and you get a blank 1×1 image plus silent audio so the graph continues. The path resolution mirrors VHS: an absolute path is used as-is, and a bare filename resolves against ComfyUI's input/ directory - so a remote engine that hands you just a filename still works.
Then the wall of outputs: images (the decoded IMAGE batch), audio (an AUDIO object, if the file has a track), fps, frame_count, duration, width, height, and has_audio as a BOOLEAN. That metadata is half the reason to use this node - you get frame count and fps without a separate probe node, and has_audio lets you gate an audio wire into a save-video node so a video-only clip doesn't crash your mux. It's the same check the pack's MpiHasAudio does, folded into the loader.
Mechanically it's ffmpeg under the hood: one pass to probe width/height/fps from the stream dump, one pass to pipe raw RGB frames into a tensor, and audio extracted via a temp WAV when the file has a track. It deliberately avoids ffprobe - the author notes portable ComfyUI doesn't ship it - and finds ffmpeg via imageio-ffmpeg's bundle or PATH. No pip dependencies for you to install.
Where people get tripped up: no ffmpeg means the loader degrades to the blocked/silent fallback without telling you loudly, so a mysteriously empty images output is your cue to check ffmpeg exists. And there's no in-graph preview by design - don't go looking for a thumbnail; this node's speed is the feature. In a video pipeline (Wan, LTX, or whatever you're running locally), it slots in before your first frame-manipulation node and hands you every number you need to compute durations and step counts downstream.
Install is the pack's standard no-drama deal: ComfyUI Manager → search "ComfyUi-MpiNodes" → install → restart, or
cd ComfyUI/custom_nodes
git clone https://github.com/MadPonyInteractive/ComfyUi-MpiNodes
No models, no heavy deps - part of the Mad Pony Interactive pack (the engine behind the Cubric Vision app, which is why the loader favors speed and metadata over preview niceties).
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| string | STRING | Video file path. Named 'string' so it matches MpiString / MpiAnyChecker outputs. | |
| block_if_empty | BOOLEAN | true | ON: empty/missing path blocks downstream execution. OFF: outputs a blank 1x1 image + silent audio so the graph continues. |
| force_rateopt | FLOAT | 00–240 | Resample the video to this frame rate while decoding. 0 = keep the source rate. ffmpeg drops/duplicates frames inside the pass that already happens, so it costs nothing and needs no interpolation model. fps, frame_count and duration are all reported at the forced rate. |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| audio | AUDIO | — |
| fps | FLOAT | — |
| frame_count | INT | — |
| duration | FLOAT | — |
| width | INT | — |
| height | INT | — |
| has_audio | BOOLEAN | — |