Nodes/ComfyCollectorNodes/Video Scrubber (CCN)
ComfyUI Node

Video Scrubber (CCN)

The one node worth installing this pack for

By valkymaera·Created 4 months ago·Updated 10 days ago· 1
Video Scrubber (CCN)
    • image
    • frame_index
    • total_frames
    video
    scrub_frame0
    frame_step1

    Here's the honest pitch: this is the node the pack's launch post leads with, and it's the one I'd install the whole thing for. You know the workflow - you need one specific frame out of a video to use as an image-to-video start, an inpaint reference, or a ControlNet guide. The stock way is to decode the whole clip, eyeball frames, extract the one you want, save it, and load it as an image. Video Scrubber (CCN) collapses that into a single node: upload or pick a video, scrub through it with a slider and live preview right in the node, land on your frame, and out comes the image.

    The key detail is that it outputs a single IMAGE, not a video batch. The author is explicit that this is for image extraction, not video clipping. You're using a video as a fancy way to find an image. That reframing is the whole design, and it's why the node feels good to use.

    How it works

    The node registers its own API routes, so the frontend can fetch frame thumbnails, metadata, and exact frames without running the full node - that's why scrubbing is responsive instead of decoding the whole video every time you move the slider. The inputs are minimal: video (a dropdown of videos in ComfyUI's input directory), scrub_frame (which frame to output, clamped to the video's range), and frame_step (how many frames the step buttons jump - UI convenience only).

    The honest caveat is buried in the README and it's worth quoting: the frame is "an estimation (which is almost always going to be good enough)." Fast scrubbing uses codec keyframe seeking, which is quick but approximate. When it needs to be exact, there's a Load Exact Frame button that does a frame-accurate sequential decode and caches the result as a full-resolution PNG in your Input/Video Scrubber Frames folder - and once cached, execution outputs those exact pixels, not the estimate. There's also a Clear Frame Cache button when you want to start over.

    The node also has its own Upload Video button that handles large files the stock uploader often rejects, and it'll retarget to an already-uploaded copy instead of re-uploading.

    The inputs and outputs that matter

    • video - pick from videos in your input directory (mp4, avi, mov, mkv, webm, gif).
    • scrub_frame - the frame to output; clamped.
    • frame_step - step size for the ◀ ▶ buttons.

    Outputs: image (the single chosen frame), frame_index (the clamped index actually loaded), total_frames (of the source video).

    How to install it

    Standard ComfyCollectorNodes install: ComfyUI Manager → search ComfyCollectorNodes → Install, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/valkymaera/ComfyCollectorNodes.git
    

    Restart ComfyUI. It uses PyAV for decoding, which is part of ComfyUI's own requirements - no separate install. (The docs page mentions OpenCV; the shipped code uses PyAV, and the source wins.)

    Common issues

    The estimate-vs-exact distinction is the main trap. If you need the frame at exactly index 472 - say, for frame-accurate compositing with other frames - don't trust the preview scrub; hit Load Exact Frame and let it decode precisely. For everything else, the estimate is fine.

    Also worth knowing: cached exact frames live in your input folder under Video Scrubber Frames and invalidate if the source video is replaced, so a stale cache shouldn't bite you - but if you've edited a video and the old frame keeps showing up, that's what's happening. And remember the output is a single frame; if you actually want all frames as a batch, that's the pack's Video Loader By Index (CCN) instead. Different tools, same pack, and both are good at their jobs.

    CategoryComfyCollectorNodes/Loaders

    Inputs (3)

    NameTypeDefaultDescription
    videoCOMBO1 options:
    scrub_frameINT00–999999
    frame_stepINT11–999999

    Outputs (3)

    NameTypeDescription
    imageIMAGE
    frame_indexINT
    total_framesINT