Nodes/ComfyUI Browser Load Image/Browser Load Video to Image
ComfyUI Node

Browser Load Video to Image

Video to frames in one shot, with the caps that save your RAM

By flashcol·Created about a month ago·Updated about a month ago· 1
Browser Load Video to Image
    • images
    • frame_count
    • fps
    video
    force_rate0
    force_size0
    frame_load_cap0

    Video-to-image is one of those steps you do once and then never want to do by hand again: extract every frame, resize, cap the count, keep the frame rate straight. BrowserLoadVideoToImage does all of it in a single node. Drop in a video, get a batched IMAGE tensor plus the frame count and fps, and you can feed it straight into the rest of the graph.

    It's the "decode to frames" half of this pack. If you're doing AnimateDiff-style work, frame interpolation, per-frame upscaling, or any img2vid setup that needs actual pixels, this is the node you want. If you just need a native VIDEO handle to hand to a modern video model, the pack's other node, Browser Load Video, is the one - this node gives you the frames themselves.

    How it works

    It leans on OpenCV. cv2.VideoCapture opens the file, reads its native fps, dimensions, and frame count, then walks the video frame by frame, converting each from BGR to RGB and to a float 0–1 tensor. Everything comes back as one batched tensor shaped [frames, height, width, channels], alongside the number of frames it actually loaded and the effective fps.

    The inputs that matter

    Three of the four inputs do real work; leave them at 0 until you need them.

    • video - the dropdown of files in your input folder.
    • force_rate (0–60, default 0) - the target fps. 0 keeps the source's native rate. Set it lower than the source to skip frames: 24 on a 60fps clip loads roughly every third frame.
    • force_size (0–8192, default 0) - target for the longer side, aspect ratio preserved. A 4K source quietly comes down to whatever you set. 0 keeps native resolution.
    • frame_load_cap (0–100000, default 0) - the cap on total frames loaded; 0 means "all of them."

    That last one is the one you'll actually reach for. A two-minute clip at 60fps is 7,200 frames; as one IMAGE batch that's a serious memory bill before the sampler even runs. If you only need a slice for conditioning or a test run, cap it low.

    Outputs

    • images - the batched IMAGE tensor. Wire it into VAE Encode, an upscaler, or a preview.
    • frame_count - an INT, the number of frames actually loaded. Not the total in the file if you capped it - the number you got.
    • fps - an INT, the effective frame rate of the sequence you loaded. Feed it to anything downstream that needs to know the timing, like frame interpolation or video assembly.

    Installing

    Same pack, same two paths. ComfyUI Manager, search ComfyUI_BrowserLoadImage, install, restart. Or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/flashcol/ComfyUI_BrowserLoadImage.git
    cd ComfyUI_BrowserLoadImage
    pip install -r requirements.txt
    

    Restart after. This node genuinely needs opencv-python, and the requirements install it.

    Gotchas

    • No audio, ever. This node reads frames only. If you need sound back on the other end, that's a separate step.
    • force_rate above the source fps does nothing. The frame-skip interval floors at 1, so you can only go slower, never faster.
    • Node missing from your list? The pack's __init__.py wraps the video nodes in a try/except - if cv2 didn't import, this node silently doesn't register. Run pip install opencv-python in ComfyUI's Python environment, restart, and it appears.
    • Memory. This is the failure mode people actually hit. Long or high-res videos loaded whole can eat your RAM/VRAM, and frame_load_cap is the cure.
    Categoryimage

    Inputs (4)

    NameTypeDefaultDescription
    videoCOMBO0 options:
    force_rateINT00–60
    force_sizeINT00–8192
    frame_load_capINT00–100000

    Outputs (3)

    NameTypeDescription
    imagesIMAGE
    frame_countINT
    fpsINT