Nodes/ComfyUI Video Player/Load Video Frame
ComfyUI Node

Load Video Frame

Load a Real Frame Out of a Video File — the Actually-Useful Node in This Pack

By BetaDoggo·Created 2 years ago·Updated 2 years ago· 16
Load Video Frame
    • IMAGE
    • FLOAT
    video_path
    frame1
    frameRate0

    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 - 1 internally 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/frameRate when frameRate > 0, otherwise 0.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.

    CategoryVideoPlayer

    Inputs (3)

    NameTypeDefaultDescription
    video_pathSTRING
    frameINT11–100000
    frameRateINT00–144

    Outputs (2)

    NameTypeDescription
    IMAGEIMAGE
    FLOATFLOAT