dundunhan/dsh-video-lens1

dsh-video-lens

Give text-only DeepSeek Harness agents video understanding: scene-aware frame sampling + VLM + optional ASR transcript fused into timeline evidence. / 给纯文本模型的视频理解插件(场景感知抽帧 + VLM + 可选语音转录)

包名
dsh-video-lens
版本
0.3.1
许可证
MIT
最近更新
2026年8月18日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:dundunhan/dsh-video-lens

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": "…" }
}