LLM Studio Video Describe
Turn a video into per-frame captions and one combined description — all local
- combined_caption
- frame_captions
- frames_processed
Most video models are bad at "watch this whole thing and tell me what happened." They sample a handful of frames and stitch a guess. LLM Studio Video Describe doesn't hide that - it makes it the workflow. It samples frames from a clip at a rate you set, captions each one with a local vision model, and hands you both the per-frame captions and a combined narrative. You keep the detail or you take the summary; both are yours.
Inputs: video_path for the clip, sample_rate (frames per second, default 2.0) and max_duration (seconds, default 5) to control sampling, base_url and model_name (default qwen/qwen3-vl-30b) for LM Studio, api_endpoint (completions by default for clean output, or chat/completions if you don't mind thinking tags), temperature (default 0.2), and verbose. Then there's caption_prompt - the instruction sent for each frame - and this is where you need to be an adult about defaults: the one shipped in the pack is aggressively tuned for explicit adult-video captioning. Swap it for something neutral before you caption anything you care about; this node doesn't care what you ask it, it just asks faithfully.
Outputs are the useful part: combined_caption (the merged description of the whole clip), frame_captions (each individual frame's caption), and frames_processed (an INT - how many frames actually went through, your sanity check on sampling). The combined_caption is what feeds a prompt builder for a re-render; frame_captions is what you'd feed a Multi-Caption Combiner if you want a differently-styled merge.
Mechanically it's the classic sample-and-caption loop: extract frames via OpenCV, base64 them into an OpenAI-compatible call to LM Studio, collect the text. The output is only as good as your prompt and your model - a 30B Qwen-VL handles detail well but runs slow; an 8B is faster and fuzzier.
Installing
Part of Swiss Army Knife:
- ComfyUI Manager: search "Swiss Army Knife", install, restart.
- Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/sammykumar/ComfyUI-SwissArmyKnife.git
cd ComfyUI-SwissArmyKnife
pip install -e .
Gotchas
- The default
caption_promptis NSFW-tuned. Change it first. This is a general-purpose captioner hiding behind an adult-workflow default. sample_rateandmax_durationgovern your time budget. 2 fps over 5 seconds is 10 frames; raise either and the run gets proportionally slower.- Frames are captioned independently. Each frame is a separate call, so consistency across frames depends on the model - don't expect it to hold a narrative thread without help.
- If
frames_processedcomes back 0, the video path is wrong or unreadable. Fix the path, not the node.
It's the free-form sibling of the structured video node - read the two side by side and pick by whether your downstream wants JSON fields or a paragraph.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| base_url | STRING | http://192.168.50.41:1234 | LM Studio server URL (e.g. http://192.168.50.41:1234) |
| model_name | STRING | qwen/qwen3-vl-30b | Model name in LM Studio (e.g. qwen/qwen3-vl-30b) |
| api_endpoint | COMBO | completions | API endpoint: 'chat/completions' (may include thinking tags) or 'completions' (cleaner output) |
| video_path | STRING | Path to video file to analyze | |
| sample_rate | FLOAT | 2.00.1–30 | Frames per second to extract (e.g., 1.0 = 1 frame/sec, 2.0 = 2 frames/sec) |
| max_duration | FLOAT | 5.01–60 | Maximum duration in seconds to sample from |
| caption_prompt | STRING | Describe the specific sexual act being performed in explicit detail. Focus ONLY on the physical actions, positions, and movements. Requirements: 1) Use only generic terms like "woman", "man", "person" - DO NOT describe physical appearance, body types, hair color, ethnicity, clothing, or accessories. 2) Specify exact positions and penetration details - mention if the man's penis is penetrating the woman's vagina, anus, or mouth, or if other sexual acts are occurring. 3) Describe the motion and rhythm - is it fast, slow, gentle, rough, rhythmic, etc. 4) Include key actions - such as kissing, touching, grabbing, positioning, eye contact, or reactions. 5) If visible, describe bodily fluids - if a white substance is shooting from a penis, the man is ejaculating semen; specify where it goes (on body parts, in mouth, on face, etc.). 6) Note any transitions between positions or acts during the sequence. 7) DO NOT mention watermarks, logos, backgrounds, settings, furniture, or anything not directly related to the sexual act itself. 8) IMPORTANT: Provide your response as a SINGLE CONTINUOUS PARAGRAPH with no line breaks or bullet points. Be explicit, factual, and clinical in your description. | Prompt for individual frame captions |
| temperature | FLOAT | 0.20–2 | Temperature for text generation |
| verbose | BOOLEAN | false | Show detailed frame-by-frame captions in console |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| combined_caption | STRING | — |
| frame_captions | STRING | — |
| frames_processed | INT | — |