π¦ Ollama Video Describer π¦
Describe a clip by feeding a vision LLM its frames
- video_frames
- result
There's no such thing as a "video model" in Ollama - LLaVA and friends only understand images. So what this node actually does is take the frames you feed it (an IMAGE batch, the same shape you'd get out of a Load Video node), sample a subset of them, and hand that sequence to a vision LLM with a prompt that says "here's a sequence, describe what's happening across it." It's the sibling of OllamaImageDescriber, adapted for temporal content instead of a single still.
It's genuinely useful for the boring-but-real job of "what is even in this clip" - auto-summarizing a batch of generated videos, writing an alt-text-style description for a render, or sanity-checking that a video model actually followed your prompt before you burn more compute on a longer run. Don't expect frame-perfect motion analysis, though - you're getting a still-image model reasoning over a handful of stills, not a purpose-built video-understanding model, so fast or subtle motion between sampled frames just won't be seen.
How it works
Same mechanism as the image describer: it calls your local Ollama server over HTTP (default http://localhost:11434), so Ollama has to be running with a vision model already pulled. The twist here is frame_skip and max_frames - the node doesn't send every frame in your batch (that would blow past the model's context and take forever), it samples every Nth frame up to a cap, then sends that reduced sequence in one shot.
The inputs and outputs that matter
video_frames(IMAGE) - your frame batch, the required input this whole node exists for.frame_skip(default 5) - take every 5th frame. Lower it if your clip is short or the action is fast and subtle; raise it for long clips where you just want the gist.max_frames(default 16) - hard cap on how many sampled frames actually get sent, regardless offrame_skip. This is your real lever against context blowup and slow requests.model/custom_model- same dropdown of vision models as the image describer (LLaVA variants, MiniCPM-V, Moondream); type a custom Ollama model name if yours isn't listed.prompt/system_context- default to "describe the events happening in this sequence," but rewrite them if you want a specific angle (camera movement, subject actions, scene changes).
num_ctx defaults higher here than on the image node (4096 vs 2048) and max_tokens defaults to 4096, since a video description genuinely needs more room than a single-image one. The rest - temperature, top_k, top_p, repeat_penalty, seed_number, keep_model_alive - are the same LLM sampling knobs as every other node in this pack; leave them alone until you have a reason not to. There's an optional structured_output_format too, if you want the description constrained to a JSON shape you can pull apart with the JSON Property Extractor node.
Output is one result STRING.
How to install it
Requires Ollama installed and running, plus a vision-capable model pulled (ollama pull llava or similar - this node uses the same model list as OllamaImageDescriber, it just feeds them multiple frames instead of one). Get the node pack through ComfyUI Manager (search "ComfyUI-Ollama-Describer") or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/alisson-anjos/ComfyUI-Ollama-Describer.git
pip install -r requirements.txt # or install.bat on Windows
Restart ComfyUI after.
Common issues & troubleshooting
If nothing happens or you get a connection error pointing at localhost:11434, Ollama isn't running - start it before queuing the workflow, same as every node in this pack. If the response takes forever or times out, check max_frames before touching timeout - sending 16+ full-resolution frames through a vision model on a modest GPU is genuinely slow, and dropping max_frames to 8 or lowering frame_skip's effective sample count is usually the faster fix than just extending the timeout. And don't expect this node to catch anything happening between your sampled frames - if frame_skip is 10 and something important happens on frame 4, it simply won't be in what the model sees.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | 19 options: llava:7b-v1.6-vicuna-q2_K (Q2_K, 3.2GB), llava:7b-v1.6-mistral-q2_K (Q2_K, 3.3GB), llava:7b-v1.6 (Q4_0, 4.7GB), llava:13b-v1.6 (Q4_0, 8.0GB), llava:34b-v1.6 (Q4_0, 20.0GB), llava-llama3:8b (Q4_K_M, 5.5GB), +13 | |
| custom_model | STRING | β | |
| api_host | STRING | http://localhost:11434 | β |
| timeout | INT | 3000β18446744073709550000 | β |
| temperature | FLOAT | 0.20β10 | β |
| top_k | INT | 400β100 | β |
| top_p | FLOAT | 0.90β10 | β |
| repeat_penalty | FLOAT | 1.10β10 | β |
| seed_number | INT | 42-1β18446744073709550000 | β |
| num_ctx | INT | 4096 | β |
| max_tokens | INT | 40961β18446744073709550000 | β |
| keep_model_alive | INT | -1-1β18446744073709550000 | β |
| video_frames | IMAGE | β | |
| frame_skip | INT | 51β1000 | β |
| max_frames | INT | 161β128 | β |
| system_context | STRING | You are a helpful AI assistant specialized in analyzing a sequence of video frames and generating a detailed and accurate textual description of the events. Describe the actions, people, objects, and how the scene evolves across the frames. | β |
| prompt | STRING | Describe the events happening in this sequence of video frames in detail. Provide a clear and concise description that highlights the most important actions. Video: | β |
| structured_output_formatopt | STRING | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| result | STRING | β |