Video Reader
Turn Your Videos Into Reusable Image Sets — and Keep the Recipe
- image
- audio
- frame_count
- source_image_info
- video_info
- image_infotext(raw)
- video_infotext(raw)
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.
0means 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 Batchfirst - 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.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| path_source | COMBO | input | Base directory for directory/file selection |
| directory | COMBO | . | Directory that contains MP4, WebM, or MKV files (nested path) |
| file | COMBO | MP4, WebM, or MKV file name in selected directory | |
| frame_load_cap | INT | 0 | Maximum number of frames to load, 0 = unlimited |
| skip_first_frames | INT | 0 | Number of frames to skip from the beginning |
| select_every_nth | INT | 1 | Select one frame every N frames |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| audio | AUDIO | — |
| frame_count | INT | — |
| source_image_info | IPT-IMAGEINFO | — |
| video_info | IPT-IMAGEINFO | — |
| image_infotext(raw) | STRING | — |
| video_infotext(raw) | STRING | — |