ComfyUI Node

Video Reader

Turn Your Videos Into Reusable Image Sets — and Keep the Recipe

By kinorax·Created 5 months ago·Updated about a month ago· 2
Video Reader
    • image
    • audio
    • frame_count
    • source_image_info
    • video_info
    • image_infotext(raw)
    • video_infotext(raw)
    path_sourceinput
    directory.
    file
    frame_load_cap0
    skip_first_frames0
    select_every_nth1

    If you've ever wanted to run img2img over a clip, do frame-by-frame upscaling, or feed a video back through a workflow to tweak it, the usual ComfyUI answer is "load the frames yourself and pray the colors survive." Video Reader is the part of the ComfyUI-Info-Prompt-Toolkit pack that does it properly: it pulls frames out of a video and drags the generation metadata along, so your video-to-video pass doesn't start from a blank slate.

    The name undersells it a little. This isn't just a frame loader - it's the video sibling of the pack's Image Reader, built around the same image_info idea that generation settings should travel with the media so they're reusable later.

    How it works

    Under the hood it uses PyAV to decode the video into a list of frames, and reads whatever metadata is embedded in the container to reconstruct the generation settings. It handles MP4, WebM, and MKV (the README says MP4; the source happily accepts all three). Frame selection is fully in your control, which matters more than it sounds:

    • frame_load_cap - max frames to load. 0 means unlimited.
    • skip_first_frames - chop frames off the start (intro cards, empty opening shots).
    • select_every_nth - grab one frame per N, i.e. a cheap frame-rate decimation.

    The file and directory pickers are Combo dropdowns built from whatever's actually in your input or output folders (path_source chooses which base directory you browse).

    Outputs that matter

    The node is generous with outputs. The ones you'll actually wire up:

    • image - the frames as a list. This is the trap input: it's a list, not a batch. If your downstream node expects a batch tensor, route it through the pack's Image List To Batch first - the README calls this out explicitly.
    • audio - the track, if the video has one and your PyAV/FFmpeg build can decode it.
    • source_image_info and video_info - the reconstructed generation settings, split into "where the source image came from" vs "how the video was made." These plug straight into the pack's saver nodes so you can round-trip without retyping settings.
    • image_infotext(raw) / video_infotext(raw) - the raw metadata strings if you want to inspect or pass them on untouched.

    Installing and the PyAV gotcha

    Install via ComfyUI Manager (search "ComfyUI-Info-Prompt-Toolkit") or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/kinorax/comfyui-info-prompt-toolkit.git
    cd comfyui-info-prompt-toolkit
    pip install -r requirements.txt
    

    Here's the catch that bites everyone: av (PyAV) is not in requirements.txt. The pack deliberately leaves it out so the non-video nodes don't drag in a heavy dependency - the requirement file's own comment says so. Video Reader just fails if it's missing, with the message: "Video reading is unavailable in this ComfyUI environment. Install av first." Fix it once, for both video nodes:

    pip install av
    

    Then restart ComfyUI. If you see an error about a codec instead, that's your PyAV/FFmpeg build, not the node - available codecs depend entirely on how your environment was compiled. Also note this pack wants a recent ComfyUI (≥ 0.17.0); on an older install the node won't appear at all.

    CategoryInfo-Prompt-Toolkit/ImageInfo

    Inputs (6)

    NameTypeDefaultDescription
    path_sourceCOMBOinputBase directory for directory/file selection
    directoryCOMBO.Directory that contains MP4, WebM, or MKV files (nested path)
    fileCOMBOMP4, WebM, or MKV file name in selected directory
    frame_load_capINT0Maximum number of frames to load, 0 = unlimited
    skip_first_framesINT0Number of frames to skip from the beginning
    select_every_nthINT1Select one frame every N frames

    Outputs (7)

    NameTypeDescription
    imageIMAGE
    audioAUDIO
    frame_countINT
    source_image_infoIPT-IMAGEINFO
    video_infoIPT-IMAGEINFO
    image_infotext(raw)STRING
    video_infotext(raw)STRING