WanV2V: Video To Frames
The boring node that feeds your whole v2v pipeline
- video
- images
Some nodes are the headline act and some are the unglamorous front door. This one is the front door. VideoToImages takes a VIDEO-typed object and returns an IMAGE batch of frames - exactly the step between "source footage" and "frame sequence your ControlNet/VACE pipeline wants." In the context of this pack it's the input side of the story: the stitcher's other nodes only ever deal with frame batches, so something has to turn a video into one, and this is that something.
How it works: it decodes the video with PyAV, picks the first video stream, and walks the frames applying your range filters. Each kept frame becomes an RGB tensor in float 0–1, and they stack into a single [B, H, W, C] batch. Nothing generative, no model, barely any VRAM - it's a fancy ffmpeg read.
The knobs are the usual suspects, and the one that trips people is end_frame:
start_frame(0) - 0-based index of the first frame you want.end_frame(-1) - 0-based inclusive index of the last frame; -1 means "to the end." Inclusive is the gotcha:end_frame: 9gives you frames 0 through 9, ten frames.stride(1) - keep every Nth frame. 1 = keep everything. Handy for decimating a 30 fps source down to 10 fps control frames.max_frames(0) - hard cap on how many frames come out; 0 = unlimited. If you only want the first 81 frames (hi, Wan's native context), set it to 81.
The video input is typed VIDEO, so in the graph it only accepts outputs from nodes that emit that type - the source comment specifically calls out the VideoFromFile-style objects (with a get_stream_source() method) from Veo-style pipelines, plus BytesIO and file paths if you're driving it from code. Practical note: if your video loader already hands you an IMAGE batch (VideoHelperSuite's VHS_LoadVideo does), you don't need this node at all. It exists to bridge VIDEO-typed sources into the stitcher's IMAGE world.
Output is a single images batch, and it wires straight into WanV2VIterControlGroup's controlnet_images or any IMAGE port.
Now the install, because this node is where the pack hides a landmine:
cd ComfyUI/custom_nodes
git clone https://github.com/Kishor900/comfyui-wanv2v-video-stitcher
Restart ComfyUI and it appears under video/utils (ComfyUI Manager: search "ComfyUI WANv2v Video Stitcher"). Here's the catch: the pack ships no requirements.txt - its project file declares only torch - and the README doesn't mention PyAV. But wanv2v_video_to_frames.py does import av at the top, and the pack's __init__.py imports every node inside one try block. So if PyAV isn't installed, the entire pack fails to load, not just this node. If you install the pack and nothing shows up in your menu, check the console for an av-related traceback (the pack even writes one to Wanv2v_load_error.txt in its own folder). Fix it with:
pip install av
On the Windows portable build that's python_embeded\python.exe -m pip install av. Restart, and every node in the pack loads.
Errors you'll actually see: "No video stream found" means whatever you plugged in didn't decode as a container with a video track - usually a VIDEO object from a source pack the node doesn't recognize. "No frames extracted" means your start/end/stride combination filtered everything out - the inclusive end_frame is the usual culprit, or start_frame set past the end of the video.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | — | |
| start_frameopt | INT | 00–10000000 | — |
| end_frameopt | INT | -1-1–10000000 | — |
| strideopt | INT | 11–10000 | — |
| max_framesopt | INT | 00–10000000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |