Nodes/ComfyUI-Ovis2/Ovis2 Video Frames Description
ComfyUI Node

Ovis2 Video Frames Description

Making ComfyUI watch your video

By Andro-Meta·Created about a year ago·Updated about a year ago· 4
Ovis2 Video Frames Description
  • model
  • frames
  • description
promptDescribe what's happening in this video.
max_new_tokens512
temperature0.7
frame_skip1
max_frames16

You generated a video, and now you want to know whether it actually shows what the prompt said. That's the job of Ovis2 Video Frames Description (Ovis2VideoFramesDescription): it watches a video by sampling a spread of its frames and describing what's happening in them. Ovis2's reputation for image understanding carries over here - early Reddit reports specifically called out its video comprehension as the thing that made people want it in ComfyUI in the first place.

This is the node to reach for when you're verifying a generated video against its prompt, summarizing a scene for a training dataset, or just turning a pile of frames into a text log you can actually skim.

How it works

One honest caveat up front: it doesn't take a video file. The frames input is an IMAGE batch - the standard format you get from a video loader like VHS's Video Loader or any node that outputs a sequence of frames. The node then samples that batch before the model ever sees it, using two controls:

  • frame_skip - the stride, 1 to 10. Skip every Nth frame.
  • max_frames - the budget, 1 to 32. The number of frames actually fed to the model.

The sampling is range(0, min(num_frames, max_frames * frame_skip), frame_skip), which in practice means: max_frames is how many frames get analyzed, frame_skip is how far apart they are, and anything past max_frames × frame_skip in your video never gets seen. For a 100-frame clip with the defaults (frame_skip=1, max_frames=16), you'd only look at the first 16 frames - the ending is invisible to the model. Raise frame_skip to widen the coverage inside that 32-frame budget; it's a tradeoff between watching the whole clip and seeing it in detail, not a "magic video understanding" button.

From there it's the same Ovis2 pipeline as the caption node: the sampled frames become PIL images, go into preprocess_inputs together, and the model writes one description of the whole sequence.

Inputs that matter

  • model - the OVIS2_MODEL output from Load Ovis2 Model.
  • frames - an IMAGE batch from any video-loading node.
  • prompt - default "Describe what's happening in this video." Write a real question ("Is the subject's face consistent across all frames?") for a real answer.
  • frame_skip / max_frames - the two knobs above; this is where you tune the tradeoff for your clip length.
  • max_new_tokens / temperature - same defaults (512 / 0.7) as the rest of the pack.

Output is a single description (STRING). Save it with a Save Text node or feed it onward.

Installing

Same pack, same drill: ComfyUI Manager → search "Ovis2", or:

cd ComfyUI/custom_nodes
git clone https://github.com/Andro-Meta/ComfyUI-Ovis2
pip install -r ComfyUI-Ovis2/requirements.txt

Restart, add a Load Ovis2 Model node first (multi-gigabyte first download to models/ovis/), and feed it frames.

Common gotchas

  • Coverage math, again. The single most common mistake is feeding a 300-frame video with the defaults and wondering why the description ignores the ending. Compute frame_skip × max_frames against your clip length and widen the stride until it covers the whole thing.
  • Context is finite. 16+ frames of vision tokens can blow past the loader's context window; if you get odd truncation or memory errors, reduce max_frames or raise max_token_length on the loader.
  • It's slow. You're feeding a real LLM a pile of images in one pass - expect it to take noticeably longer than a single-image caption, especially at the 8B and larger sizes. On a modest GPU, 2B is the practical choice for long clips.
  • Single-frame input is treated as a one-frame video. Feed it one image and you'll get a caption, which is harmless but not what the node is for.
CategoryOvis2

Inputs (7)

NameTypeDefaultDescription
modelOVIS2_MODEL
framesIMAGE
promptSTRINGDescribe what's happening in this video.
max_new_tokensINT51264–2048
temperatureFLOAT0.70.1–1
frame_skipINT11–10
max_framesINT161–32

Outputs (1)

NameTypeDescription
descriptionSTRING