Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
starchild-ai-agent avatar

Video Analysis

  • 1.6k installs
  • 21 repo stars
  • Updated August 3, 2026
  • starchild-ai-agent/official-skills

video-analysis provides documented workflows for |

About

The video-analysis skill Video Analysis Analyze video files using either native model understanding or frame extraction transcription How It Works analyze_video path question file_size threshold default 20MB Send video to a supports_video model default Gemini 3 1 Flash Lite Model sees full video natively best quality file_size threshold ffmpeg extracts keyframes scene detection for long videos Whisper transcribes audio track Returns frame image paths transcript text Agent feeds these to the current chat model Quick Start Invocation do NOT use dotted imports The directory name contains a hyphen video-analysis so from skills video-analysis exports import is a Python syntax error is parsed as minus This is true for every hyphenated skill not just this one Use one of the two patterns below Pattern A from workspace root recommended for scripts bash cd data workspace skills video-analysis python3 c from exports import analyze_video import json print json dumps analyze_video output videos clip mp4 question What happens in this video ensure_ascii False Note pass the video path workspace-relative analyze py resolves it

  • **Short videos (≤60s):** One frame every N seconds (default: 2s)
  • **Long videos (>60s):** Scene-change detection picks visually distinct frames
  • **Audio:** Extracted and sent to Whisper for transcription
  • **Max frames:** Capped at 30 (configurable) to control cost
  • Call `analyze_video(path, question)`.

Video Analysis by the numbers

  • 1,560 all-time installs (skills.sh)
  • +72 installs in the week ending Aug 5, 2026 (Skillselion tracking)
  • Ranked #160 of 1,039 Mobile Development skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
At a glance

video-analysis capabilities & compatibility

Capabilities
**short videos (≤60s):** one frame every n secon · **long videos (>60s):** scene change detection p · **audio:** extracted and sent to whisper for tra · **max frames:** capped at 30 (configurable) to c · call `analyze_video(path, question)`.
Use cases
documentation
From the docs

What video-analysis says it does

# Video Analysis Analyze video files using either **native model understanding** or **frame extraction + transcription**.
SKILL.md
This is true for every hyphenated skill, not just this one.
SKILL.md
npx skills add https://github.com/starchild-ai-agent/official-skills --skill video-analysis

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs1.6k
repo stars21
Last updatedAugust 3, 2026
Repositorystarchild-ai-agent/official-skills

How do I use video-analysis for the task described in its SKILL.md triggers?

|

Who is it for?

Teams invoking video-analysis when the user request matches documented triggers and prerequisites.

Skip if: Skip when cached docs are missing, the request is a negative trigger, or another sibling skill owns the workflow.

When should I use this skill?

|

What you get

Step-by-step guidance grounded in video-analysis documentation and reference files.

  • Video summary
  • Scene extraction output
  • Workflow trigger from video analysis

Files

SKILL.mdMarkdownGitHub ↗

Video Analysis

Analyze video files using either native model understanding or frame extraction + transcription.

How It Works

analyze_video(path, question)
      │
      ├─ file_size ≤ threshold (default 20MB)
      │     → Send video to a supports_video model (default Gemini 3.1 Flash Lite)
      │     → Model sees full video natively (best quality)
      │
      └─ file_size > threshold
            → ffmpeg extracts keyframes (scene detection for long videos)
            → Whisper transcribes audio track
            → Returns frame image paths + transcript text
            → Agent feeds these to the current chat model

Quick Start

⚠️ Invocation — do NOT use dotted imports. The directory name contains a hyphen (video-analysis), so from skills.video-analysis.exports import ... is a Python syntax error (- is parsed as minus). This is true for every hyphenated skill, not just this one. Use one of the two patterns below.

Pattern A — from workspace root (recommended for scripts):

cd /data/workspace/skills/video-analysis && \
  python3 -c "from exports import analyze_video; \
    import json; \
    print(json.dumps(analyze_video('output/videos/clip.mp4', \
      question='What happens in this video?'), ensure_ascii=False))"

Note: pass the video path workspace-relative (analyze.py resolves it against WORKSPACE_DIR), even though you cd into the skill dir.

Pattern B — inside a starchild-clawd script:

from core.skill_tools import video_analysis
result = video_analysis.analyze_video("output/videos/clip.mp4",
                                      question="What happens in this video?")

Do NOT exec(open('skills/video-analysis/analyze.py').read()) — analyze.py uses __file__ at import time, which is undefined under exec, so it crashes. Load it by file path with importlib.util.spec_from_file_location if you must avoid both patterns above.

# result keys (same for both patterns):
# Analyze a video — auto-selects native or extraction mode
# result = analyze_video("output/videos/clip.mp4", question="What happens in this video?")

# result keys:
#   success: bool
#   mode: "native" | "extraction"
#
# If mode == "native":
#   analysis: str (model's text response)
#   model: str (which model was used)
#   tokens: {input, output, video, audio}
#
# If mode == "extraction":
#   frame_paths: list[str] (workspace-relative paths to keyframe JPEGs)
#   transcript: str | None (Whisper transcription text)
#   frame_count: int
#   duration_sec: float

Using the Exports

from core.skill_tools import video_analysis

# Full analysis (auto-selects mode)
result = video_analysis.analyze_video("output/videos/my_video.mp4", question="Describe this video")

# Check current config
config = video_analysis.get_config()

# Get video metadata without analyzing
info = video_analysis.get_video_info("output/videos/my_video.mp4")
# → {"duration": 45.2, "size": 12345678, "width": 1920, "height": 1080, "has_audio": true}

Native Mode (small videos)

For videos under the size threshold, the skill sends the full video to a model that supports native video input. The model sees every frame and hears the audio.

Default model: google/gemini-3.1-flash-lite — best price/quality for video.

Model benchmark (6MB clip, vs gemini-3.1-pro-preview baseline):

ModelTierCostTimeAccuracyNotes
google/gemini-3.1-flash-litebudget~$0.00148.1s~88%⭐ Default — cheapest + fastest
google/gemini-3.5-flashstd~$0.015211.8s~85%More detail, higher cost
qwen/qwen3.6-plusbudget~$0.005844.2s~95%Accurate but slow
qwen/qwen3.6-flashbudget~$0.002716.6s~80%Misreads subjects sometimes
google/gemini-3.1-pro-previewstd~$0.019919.7s100%Baseline (best, most expensive)

flash-lite identifies the full scene, action sequence, and transitions correctly at ~14x lower cost than the Pro baseline. For maximum accuracy (exact character names, fine detail), switch default_model to gemini-3.1-pro-preview or gemini-3.5-flash in config/video-analysis.yaml.

Extraction Mode (large videos)

For videos over the size threshold, the skill extracts keyframes and transcribes audio:

  • Short videos (≤60s): One frame every N seconds (default: 2s)
  • Long videos (>60s): Scene-change detection picks visually distinct frames
  • Audio: Extracted and sent to Whisper for transcription
  • Max frames: Capped at 30 (configurable) to control cost

The agent receives frame image paths and transcript text, then feeds them to the current chat model as image attachments + context text.

Configuration

Edit `config/video-analysis.yaml` (in the workspace) to customize. This file is created automatically on first use, only needs the keys you want to override, and survives skill updates.

Do NOT edit skills/video-analysis/config.yaml — that's the factory default
and is overwritten on every skill auto-update. The user file overlays it.

Both the standalone skill and the chat "send a video" flow read this same config, so one edit changes the model everywhere. Available keys:

# Model for native video understanding
default_model: google/gemini-3.1-flash-lite

# Size threshold: native (≤) vs extraction (>)
# Set to 0 → always extraction. Set to 100 → always native.
native_size_limit_mb: 20

# Frame extraction settings
extraction:
  max_frames: 30                  # Max keyframes to extract
  short_video_interval_sec: 2     # Frame interval for ≤60s videos
  scene_threshold: 0.3            # Scene detection sensitivity (0.0-1.0)
  transcribe_audio: true          # Whether to Whisper-transcribe audio

Available Video Models

ModelAliasTierNotes
google/gemini-3.1-flash-liteflash31budget⭐ Default, best price/quality
google/gemini-3.5-flashgemini35standardMore detail, higher cost
google/gemini-3.1-flash-liteflash31budgetCheapest option
google/gemini-3.1-pro-previewgeministandardHighest quality
qwen/qwen3.6-flashqwenfbudgetGood alternative
qwen/qwen3.6-plusqwenbudget
minimax/minimax-m3mm3standard
meta-llama/llama-4-maverickmaverickstandard
meta-llama/llama-4-scoutscoutbudget
xiaomi/mimo-v2.5mimostandard
z-ai/glm-5v-turboglm5vstandard
minimax/minimax-m2.7mm27budgetAudio-only, no image

Agent Behavior

When the user provides a video file (via upload or file path) and the current chat model does NOT support video:

1. Call analyze_video(path, question). 2. If result mode is "native" → return result["analysis"] directly. 3. If result mode is "extraction" → use result["frame_paths"] as image references and result["transcript"] as context, then ask the current model to analyze based on the frames + transcript.

When the current model DOES support video, the backend handles it natively via Phase 1 (base64 content block injection) — no need for this skill.

Troubleshooting

ProblemFix
"File not found"Check path is workspace-relative (e.g. output/videos/x.mp4)
Native mode returns errorCheck default_model in config/video-analysis.yaml is valid
No audio transcriptionVideo may have no audio track; check has_audio in result
Too few frames extractedLower scene_threshold in config/video-analysis.yaml (e.g. 0.15)
Too many frames / high costReduce max_frames or raise scene_threshold

Related skills

FAQ

What does video-analysis do?

|

When should I use video-analysis?

|

What are common prerequisites?

--- name: video-analysis version: 1.1.0 description: | Video understanding for any model - native passthrough for small files, frame extraction + audio transcription fallback for large files.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.