Back to Skills

video-analysis

Video understanding for any model — native passthrough for small files, frame extraction + audio transcription fallback for large files. Use when the user asks to analyze, describe, or understand a video file (e.g. "what's in this video", "summarize this clip", "transcribe this recording").

23stars12forksUpdated 8/13/2026

Security Assessment

Safe(93/100)
Security Score93/100

About video-analysis

This skill provides video understanding for any model by choosing automatically between two modes based on file size. For files under a configurable threshold (default 20MB) it passes the video natively to a model that supports video input (default Gemini 3.1 Flash Lite) so the model sees every frame and hears the audio. For larger files it falls back to extraction: ffmpeg pulls keyframes (fixed interval for short clips, scene-change detection for long ones) and Whisper transcribes the audio, returning frame image paths plus transcript text for the current chat model to reason over. This solves the problem of analyzing, describing, summarizing, or transcribing video across models with differing native-video support and context limits.

The skill exposes a small Python API (analyze_video, get_config, get_video_info) with careful invocation guidance — it warns against dotted imports of the hyphenated directory name and against exec-loading analyze.py because of __file__ usage — and documents result keys for both native and extraction modes. It includes a model benchmark comparing cost, latency, and accuracy across several Gemini and Qwen models, and a layered configuration system where a workspace config file overrides factory defaults and survives skill updates. For web URLs it advises trying a companion web-crawler skill's transcript path before downloading.

Target users are agents and developers who need to understand local video files — describing content, summarizing clips, or transcribing recordings. It processes local media through standard tools (ffmpeg, Whisper) and model APIs with no destructive, network-exfiltration, or credential-harvesting behavior, so it is benign.

FAQ

How does it decide between native analysis and frame extraction?

It compares file size to a threshold (default 20MB). At or under the threshold it sends the whole video to a native-video model; over it, ffmpeg extracts keyframes and Whisper transcribes the audio, returning frame paths and transcript text for the chat model.

Can I point it at a YouTube or TikTok URL?

The skill takes a local file path, not a URL. For web URLs it recommends first trying the web-crawler skill's youtube_video transcript/metadata path, and only downloading and analyzing frames/audio if that path fails and you actually need them.

How do I call it correctly?

Use the workspace-root pattern (cd into the skill dir and import from exports) or the starchild-clawd core.skill_tools import. Do not use dotted imports of the hyphenated directory name and do not exec-load analyze.py, since both break; pass the video path workspace-relative.

Which model does it use and can I change it?

The default native model is google/gemini-3.1-flash-lite, chosen for best price/quality. You can switch to a more accurate model like gemini-3.1-pro-preview or gemini-3.5-flash by editing default_model in the workspace config file, which overlays the factory default and survives updates.

How are large videos handled to control cost?

For clips 60 seconds or shorter it samples one frame every couple of seconds; for longer videos it uses scene-change detection to pick distinct frames, caps frames at 30 by default, and transcribes the audio with Whisper.

All Files

4 files
SKILL.md9.0 KB
View
analyze.py15.7 KB
View
exports.py0.6 KB
View
config.yaml2.1 KB
View

Install video-analysis

Download and extract the skill files to your .claude/skills/ directory.

Quick Setup:

  1. Copy the skill folder to .claude/skills/
  2. Claude will automatically detect and use the skill