Load Video Frame
Load a Real Frame Out of a Video File — the Actually-Useful Node in This Pack
- IMAGE
- FLOAT
The rest of ComfyUI Video Player is emoji art - this is the one node that hands you a real frame. Load Video Frame opens an actual video file, grabs whichever frame you ask for, and returns it as a standard ComfyUI IMAGE tensor. That means it plugs straight into any normal image pipeline: img2img on a source video, VAE encode, upscale, whatever. The other nodes in the pack turn frames into text because it's fun; this one exists because it's useful.
What it actually does
Feed it three things: a video_path (the full path to the file), a frame number (1-based), and a frameRate. It uses OpenCV to open the file, seeks to the frame, reads it, converts from BGR to RGB (OpenCV reads everything as BGR - the classic gotcha if you've ever seen a "blue" image), normalizes to the 0–1 range ComfyUI expects, and outputs it as an image tensor with a batch dimension added.
frameRate pulls double duty. When it's above 0, the node sleeps for 1/frameRate seconds between calls - that's how the pack does "playback" - and the FLOAT output becomes a timestamp: frame / frameRate. Set it to 0 and it just returns the frame with no pacing, which is what you want for batch processing.
The inputs that matter
- video_path - full path to the video. Quotes are stripped automatically, so right-click → "Copy as path" on Windows just works.
- frame - which frame to pull, starting at 1. The seek is
frame - 1internally because OpenCV counts from zero. - frameRate - 0 for no pacing/batch mode, or your video's actual FPS if you want real-time playback.
Outputs
- IMAGE - the frame, ready for anything that accepts an image.
- FLOAT -
frame/frameRatewhenframeRate > 0, otherwise0.0. Wire it somewhere that likes a timestamp if you're doing per-frame metadata.
Install
ComfyUI Manager (search "VideoPlayer"), or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/BetaDoggo/ComfyUI-VideoPlayer
Then restart ComfyUI. The only real dependency is opencv-python, which the pack's requirements.txt installs for you. No models to download - this is pure video reading, no diffusion involved.
Where people get burned
Real-time playback blocks the queue. Because pacing is a time.sleep inside the node, running a video at frameRate 30 with Auto Queue just stalls the queue between frames - ComfyUI is not doing anything else while it "plays." For batch frame extraction, set frameRate to 0 and drive frame with a counter, then let it rip.
Codec roulette. Which files this can open depends entirely on your OpenCV build. Some MP4s (especially H.265/HEVC) will fail to read. If you get Error reading video frame, re-encode with ffmpeg to H.264 first and it'll open fine.
Frame past the end raises a runtime error rather than a graceful "done." Your counter workflow needs to know the frame count or stop on the error. It's a small pack with a small maintenance surface - last touched in 2024 - but for reading a frame out of a video into a real pipeline, it's the one node here worth reaching for.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| video_path | STRING | — | |
| frame | INT | 11–100000 | — |
| frameRate | INT | 00–144 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| FLOAT | FLOAT | — |