DSH Plugins Marketplace

DSH Plugins

Plugins

/

Vision & Multimodal

/

dsh-video-lens

d

dsh-video-lens

Manifest valid★ 109

Give text-only DeepSeek Harness agents video understanding: scene-aware frame sampling + VLM + optional ASR transcript fused into timeline evidence. / Video understanding plugin for text-only models (scene-aware frame sampling + VLM + optional ASR transcript)

hasBundlePatch

dsh-video-lens

Video understanding for DeepSeek Harness — give text-only agents eyes and ears on video.

A DeepSeek Harness (DSH) plugin that lets text-only LLM agents understand local video files. It provides two tools:

ToolWhat it does
video_probeCheap, instant metadata via ffprobe: container, duration, resolution, fps, codecs, audio tracks, subtitles.
video_analyzeContent understanding: scene-change-aware frame sampling (ffmpeg scdet), optional ASR transcript (speech with timestamps), fused with any OpenAI-compatible vision model into structured evidence JSON.
video_askTime-anchored Q&A: parses explicit time references ("at 3:20", "minute 2") or locates relevant speech via transcript keyword matching, re-samples frames from the matched windows, and answers with grounded evidence (answer + confidence + supporting timestamps).

v0.3.1. The plugin never locks you into a provider: vision and ASR are both OpenAI-compatible endpoints configured via baseUrl + model + key env var.

How it works

video file ──► video_probe ──► ffprobe ──► compact metadata JSON
           └─► video_analyze ──► scdet scene detection ──► shot boundaries
                                 ├─► ffmpeg frame sampling (one representative frame per shot, capped)
                                 ├─► ffmpeg audio extract ──► ASR transcript (timestamped)   [optional]
                                 └─► OpenAI-compatible vision API ──► evidence JSON
  • Scene changes are detected with ffmpeg's scdet filter (ffmpeg ≥ 6.0). Videos without detectable cuts fall back to uniform midpoint sampling.
  • ASR is strictly additive: if asrApiKeyEnv is unset or the provider fails, the visual analysis still completes and transcript is null.
  • All media work is delegated to ffmpeg/ffprobe on PATH — no native decoding in the agent.

Install

Prerequisites: Node.js ≥ 20, ffmpeg ≥ 6.0 (recommended) with ffprobe on PATH (brew install ffmpeg / apt install ffmpeg).

Option A — npm (recommended)

# in your DSH profile directory (the one containing package.json)
pnpm add dsh-video-lens

Option B — from source (development)

Clone the repo, then mount it into your DSH profile via a local link:

git clone https://github.com/dundunhan/dsh-video-lens.git

Either way, register the bundle in your profile's package.json — this exact block is the full profile configuration:

{
  "dependencies": {
    "dsh-video-lens": "^0.3"
  },
  "dsh": {
    "profile": {
      "bundles": [
        "@deepseek-ai/dsh-base",
        "@deepseek-ai/dsh-web-app",
        "dsh-video-lens"
      ]
    }
  }
}

Then export the keys and restart the profile:

export VIDEO_LENS_API_KEY=sk-...        # vision
export VIDEO_LENS_ASR_KEY=sk-...        # optional, ASR

Configuration

All options are DSH config values:

KeyDefaultMeaning
visionBaseUrlhttps://api.siliconflow.cn/v1Vision endpoint (OpenAI-compatible)
visionModelQwen/Qwen3-VL-8B-InstructVision model name
visionApiKeyEnvVIDEO_LENS_API_KEYEnv var holding the vision key
asrBaseUrlhttps://api.siliconflow.cn/v1ASR endpoint (OpenAI-compatible /audio/transcriptions)
asrModelFunAudioLLM/SenseVoiceSmallASR model name
asrApiKeyEnvVIDEO_LENS_ASR_KEYEnv var holding the ASR key
maxFrames12Frame budget cap (1–max); actual count is duration-adaptive (~1 frame per 30s, denser for short videos)
frameMaxWidth768Max frame width; keeps payloads small
frameQuality4JPEG quality (ffmpeg -q:v)
sceneThreshold10scdet threshold (0–100); higher = fewer cuts
askPaddingSec2video_ask window padding around matched transcript segments
vlmMaxTokens1500Vision model max output tokens
vlmTimeoutMs90000Vision call timeout
asrTimeoutMs120000ASR call timeout

Usage

Ask the agent:

"What's in /tmp/demo.mp4?"

The agent calls video_probe first, then video_analyze. Evidence includes:

{
  "metadata": { "container": "mov,mp4,m4a,3gp,3g2,mj2", "durationSec": 268.4, "...": "..." },
  "shots": [{ "timeSec": 12.3, "score": 45.2 }],
  "framesSampled": [{ "timestampSec": 5.5, "jpegBytes": 12345 }],
  "transcript": {
    "text": "…",
    "segments": [{ "start": 0.0, "end": 2.4, "text": "…" }],
    "language": "zh"
  },
  "visionModel": "Qwen/Qwen3-VL-8B-Instruct",
  "analysis": { "overall_summary": "…", "timeline": [{"timestamp_sec": 5.5, "description": "…"}], "on_screen_text": "…", "visual_style": "…", "notable_moments": "…" }
}

Permissions & security

Read this before using or redistributing. DSH plugins run in the host process as trusted code and there is no official plugin review — self-review is on the author. See SECURITY.md.

What this plugin does

  • Reads: any local file path the agent passes to its tools (via ffprobe/ffmpeg).
  • Executes: ffprobe and ffmpeg from PATH (never a shell — argv arrays only).
  • Network: one outbound call per video_analyze to the configured visionBaseUrl (frames + vision key), and optionally one to asrBaseUrl (audio + ASR key).
  • Does not: execute shells, eval code, phone home, auto-update, or read files on its own.

Operator responsibilities

  • Keys are only as safe as the endpoints they are sent to — configure only endpoints you trust.
  • The real access boundary is the DSH host sandbox; the plugin's readability check is a UX guard, not a security boundary.
  • Payload sizes are bounded: maxFrames × ~100–300 KB (768px JPEG) per analysis call.

Compatibility

  • Tested with DSH profile bundles @deepseek-ai/dsh-base + @deepseek-ai/dsh-web-app.
  • Node ≥ 20 (uses AbortSignal.any / built-in fetch / FormData).
  • ffmpeg ≥ 6.0 for scdet; older versions degrade to uniform sampling.
  • macOS / Linux tested; Windows untested.

Uninstall

  1. Remove dsh-video-lens from dsh.profile.bundles in your profile package.json.
  2. Remove the dependency: pnpm remove dsh-video-lens (npm install) — or delete the link: entry if you installed from source — then reinstall the profile.

Roadmap

  • v1.0: frame caching by file hash, evaluation table in README (5 video types × metrics), publish to npm (in progress).
  • Beyond: native video-input models as an optional fast path when the configured VLM supports them.

License

MIT — see LICENSE.

Compatibility

DSH 0.2.1-rc.4: failedDSH 0.2.0-rc.1: failedDSH 0.1.7-rc.2: failed

Versions

Latest versionPublishedSize
0.3.1——
0.3.2——

Comments

Loading…

Similar plugins

dsh-video-kit

by shisuiqingqian

DeepSeek Harness 插件:读取本地视频或网页链接,返回带时间轴的逐字稿与关键帧图片,供模型逐帧查看。

Vision & MultimodalManifest valid

★ 0

MIT

Python

Oct 19, 2026

dsh plugin --profile web add dsh-video-kit

by Fu3rte

Plug-in vision for text-only DeepSeek Harness (dsh) models: built-in free/cheap VLM presets + multi-image batch analysis

Terminal & ClientsManifest valid

★ 3

MIT

JavaScript

Aug 15, 2026

dsh plugin --profile web add dsh-sight

by tdf1995

Vision for text-only LLMs in DeepSeek Harness (DSH): describe images / OCR / VQA via free Gemini & GLM vision APIs

Tools & CapabilitiesModels & ProvidersManifest valid

★ 4

↓ 26/wk

MIT

JavaScript

Aug 15, 2026

dsh plugin --profile web add dsh-plugin-vision

by NagasakiSoyo-ui

Vision-augmented DeepSeek adapter: a vision-capable model describes image input, then a text-only DeepSeek model reasons over the description.

Tools & CapabilitiesVision & MultimodalManifest valid

★ 1

MIT

TypeScript

Aug 14, 2026

dsh plugin --profile web add @deepseek-ai/dsh-llm-deepseek-vision

by poiuyjie

DSH plugin: Auto-convert images to text for pure-text LLMs (DeepSeek etc.) via any vision model. No need to switch your main model.

Vision & MultimodalManifest valid

★ 13

MIT

JavaScript

Sep 9, 2026

dsh plugin --profile web add dsh-vision-opencode

by me9rez

DeepSeek Harness (dsh) bundle plugin: vision_analyze tool lets text-only LLM agents read images via SenseNova VLM, with Schemastery config and single-source credentials

Manifest valid

★ 0

JavaScript

Aug 14, 2026

dsh plugin --profile web add dsh-vlm-bridge