🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

视觉桥接面板 jyh20030112/dsh-visual-plugin

DeepSeek Harnessv0.4.1
jyh2003011226 天前有提交已提供中文文档扫描:含敏感能力

本地优先的 DeepSeek Harness 视觉媒体插件。

41.7/100
综合分
16
GitHub 星标
208
npm 周下载
—/5
用户评分

数据截至 2026/10/8 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-visual-plugin
npm 源 · dsh-visual-plugin 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · vision
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 26 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-visual-plugin @ 0.4.1
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 15:49:04

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 51 处,展示前 26 条)
  • 写入本地文件
    lib/index.js:133
    await mkdir(dir, { recursive: true });
  • 写入本地文件
    lib/index.js:134
    await appendFile(join(dir, fileNameFor(entry.attachmentId)), `${JSON.stringify(entry)}\n`);
  • 读取本地文件
    lib/index.js:139
    files = await readdir(dir);
  • 读取本地文件
    lib/index.js:147
    const text = await readFile(join(dir, file), "utf8");
  • 读取本地文件
    lib/index.js:159
    for (const line of (await readFile(path, "utf8")).split("\n")) try {
  • 删除本地文件
    lib/index.js:199
    if (retained.length === 0) await rm(path, { force: true });
  • 写入本地文件
    lib/index.js:201
    await mkdir(this.dir, { recursive: true });
  • 写入本地文件
    lib/index.js:203
    await writeFile(temporary, `${retained.map((entry) => JSON.stringify(entry)).join("\n")}\n`, {
  • 写入本地文件
    lib/index.js:207
    await rename(temporary, path);
  • 读取本地文件
    lib/index.js:219
    files = await readdir(this.dir);
  • 删除本地文件
    lib/index.js:223
    await Promise.all(files.filter((file) => file.endsWith(".jsonl")).map((file) => rm(join(this.dir, file), { force: true })));
  • 读取本地文件
    lib/index.js:2569
    text = await readFile(path, "utf8");
  • 写入本地文件
    lib/index.js:2610
    await mkdir(path, {
  • 读取本地文件
    lib/index.js:2641
    entries = await readdir(jobsDir, { withFileTypes: true });
  • 删除本地文件
    lib/index.js:2751
    await rm(jobDir, {
  • 删除本地文件
    lib/index.js:2849
    await rm(jobDir, {
  • 删除本地文件
    lib/index.js:2870
    await rm(sourceFile, { force: true });
  • 删除本地文件
    lib/index.js:2904
    await rm(jobDirectory(this.options.rootDir, videoId), {
  • 执行外部命令来自配置/变量
    lib/index.js:3271
    const child = spawn(executable, [...args], {
  • 写入剪贴板
    lib/client.js:49
    await navigator.clipboard.writeText(text);
  • 发起网络请求
    lib/client.js:178
    setHistory((await (await fetch(`/vision-bridge/recent?sessionId=${encodeURIComponent(resolvedSessionId)}`)).json()).entries ?? []);
  • 发起网络请求
    lib/client.js:201
    const response = await fetch(`/vision-bridge/recent?sessionId=${encodeURIComponent(resolvedSessionId)}&attachmentId=${encodeURIComponent(attachmentId)
  • 发起网络请求
    lib/client.js:675
    const response = await fetch("/vision-bridge/videos/health");
  • 发起网络请求
    lib/client.js:1018
    const response = await fetch(`/vision-bridge/videos?sessionId=${encodeURIComponent(sessionId)}`);
  • 发起网络请求
    lib/client.js:1035
    const response = await fetch("/vision-bridge/videos", {
  • 发起网络请求
    lib/client.js:1065
    const response = await fetch(`/vision-bridge/videos/${encodeURIComponent(videoId)}?sessionId=${encodeURIComponent(sessionId)}`, { method: "DELETE" });
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-app-boot@deepseek-ai/dsh-config-editor@deepseek-ai/cordis@deepseek-ai/schemastery@deepseek-ai/dsh-settings@deepseek-ai/dsh-attachment@deepseek-ai/dsh-llm@deepseek-ai/dsh-tools@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-system-prompt@deepseek-ai/dsh-invariants@deepseek-ai/dsh-session
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

1 张 · 点击查看大图

功能亮点

  • 转发图片给视觉模型
  • 结果显示于右侧面板

dsh-visual-plugin:给纯文本模型装上眼睛,把用户图片转发给任意 OpenAI 兼容的视觉模型,结果直接显示在 Web UI 右侧面板。

v0.4.12026-10-07
本次补丁讲清插件的本地优先设计,让视频依赖安装更易上手。 · 强调本地视频预处理,并说明模型推理沿用当前 DSH 模型配置。 · 中英文 README 都补上 macOS(Homebrew)、Arch Linux(pacman)、Windows(PowerShell/WinGet)安装说明。 · PySceneDetect 改用 uv tool install --python 3.12 "scenedetect>=0.7.1,<0.8" 安装,并补充 PATH 配置、依赖验证和容器/WSL 指引。 · 更新 npm 包描述和 GitHub About 文案。 本次补丁强调「本地优先」,补齐 macOS、Arch Linux 和 Windows 的视频依赖安装、PATH 配置与验证步骤,PySceneDetect 默认用 uv 安装。 兼容性:DSH 0.2.0-rc.2。运行时行为不变。 验证:用 Node 22 跑通测试、TypeScript 检查、构建、已提交 bundle 一致性,并核对 npm pack 内容。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-visual-plugin 本地优先的 DeepSeek Harness 视觉媒体插件。 在本机完成视频校验、转码与场景关键帧提取,结合 DSH 当前视觉模型理解图片和视频,并在右侧面板查看图片历史与播放视频。 English · 简体中文 DeepSeek Harness 插件。 视频预处理及插件媒体存储均在运行 DSH 的机器上完成。图片与提取的关键帧通过 DSH 发送给当前配置的模型;模型推理是否在本地运行,取决于你的 DSH 模型配置。 特性 - 原生图片理解 —— 上传图片始终走 DSH 原生附件与模型链路;插件不再配置或调用独立视觉模型。 - 可复制的图片历史 —— 右侧面板在图片缩略图旁记录当前 DSH 模型的最终回答,支持展开历史和一键复制。 - 插件自有视频上传 —— 支持 MP4、M4V、MOV、AVI、MPG/MPEG、MKV 和 WebM;扩展名、文件签名与 FFprobe 结果必须一致。 - 视频场景解析 —— 统一转为 H.264/yuv420p MP4,通过 PySceneDetect 提取关键帧,再将有序、带时间戳的图片交给当前 DSH 视觉模型。 - 右侧面板 —— 在图片/视频视图间切换,直接播放标准化视频,并将选中视频写入会话草稿。
展开完整文档(README 剩余 1 节)
dsh-visual-plugin

本地优先的 DeepSeek Harness 视觉媒体插件。
在本机完成视频校验、转码与场景关键帧提取,结合 DSH 当前视觉模型理解图片和视频,并在右侧面板查看图片历史与播放视频。

English · 简体中文

DeepSeek Harness 插件。

视频预处理及插件媒体存储均在运行 DSH 的机器上完成。图片与提取的关键帧通过 DSH 发送给当前配置的模型;模型推理是否在本地运行,取决于你的 DSH 模型配置。

特性

- 原生图片理解 —— 上传图片始终走 DSH 原生附件与模型链路;插件不再配置或调用独立视觉模型。
- 可复制的图片历史 —— 右侧面板在图片缩略图旁记录当前 DSH 模型的最终回答,支持展开历史和一键复制。
- 插件自有视频上传 —— 支持 MP4、M4V、MOV、AVI、MPG/MPEG、MKV 和 WebM;扩展名、文件签名与 FFprobe 结果必须一致。
- 视频场景解析 —— 统一转为 H.264/yuv420p MP4,通过 PySceneDetect 提取关键帧,再将有序、带时间戳的图片交给当前 DSH 视觉模型。
- 右侧面板 —— 在图片/视频视图间切换,直接播放标准化视频,并将选中视频写入会话草稿。
- 视频高级设置 —— 可在插件设置卡中调整上传大小、存储配额、时长、输出尺寸、FPS、CRF 和关键帧数量。

工作原理

图片 → DSH 原生附件 → 当前视觉模型 → 最终回答 → /vision-bridge/recent → 面板缩略图 + 可复制描述

视频 → 容器校验 → H.264/yuv420p 标准化 → PySceneDetect → 带时间戳关键帧 → DSH 原生图片附件 → 当前模型回答

插件不会改写模型消息,也不会调用私有视觉接口。发送图片或询问视频前,请在 DSH 中选择支持图片输入的模型。

快速开始

插件 0.4.x 面向 DSH 0.2.0-rc.2;旧版 DSH 0.1.x 请继续使用插件 0.3.2。升级无需启用版本风险豁免。

1. 安装宿主环境依赖

图片功能无需安装以下工具。视频功能需要 FFmpeg/FFprobe >= 6.1(同一主版本)、包含 libx264 编码器的 FFmpeg,以及 PySceneDetect >= 0.7.1 < 0.8。

请在运行 dsh web 的机器及用户环境中安装依赖。ffmpeg、ffprobe 和 scenedetect 必须加入该进程的 PATH,可以从任意目录直接调用。如果 DSH 运行在 Docker、WSL 或远程服务器中,请在对应运行环境内安装依赖。

macOS(Homebrew)

若尚未安装 Homebrew,请先安装并按照其安装后提示将 brew 加入 PATH。然后安装 FFmpeg(包含 FFprobe)和 uv:

brew install ffmpeg uv

Arch Linux(pacman)

安装官方仓库中的 FFmpeg 和 uv:

sudo pacman -Syu ffmpeg uv

Windows(PowerShell、WinGet)

打开 PowerShell,执行 winget --version 确认 WinGet 可用。若缺少该命令,请按链接中的说明安装或更新 应用安装程序(App Installer)。在 Windows x64 上安装 FFmpeg(包含 FFprobe)和 uv:

winget install --id Gyan.FFmpeg --exact
winget install --id astral-sh.uv --exact

安装后关闭并重新打开 PowerShell,使新的 PATH 生效,再继续下面的步骤。如果无法使用 WinGet,可从 FFmpeg 下载页 获取 Windows 构建,解压到 C:\Tools\ffmpeg 等固定目录,并在 环境变量 中将包含 ffmpeg.exe 和 ffprobe.exe 的目录(通常为 bin)添加到当前用户的 Path;uv 则按其 Windows 官方安装说明 安装。

使用 uv 安装 PySceneDetect(三种系统通用)

在终端或 PowerShell 中执行:

uv tool install --python 3.12 "scenedetect>=0.7.1,<0.8"
uv tool update-shell

该方式将 PySceneDetect 安装为当前用户可直接调用的持久命令,并使用独立环境。uv 会在需要时下载 Python 3.12;标准 scenedetect 包包含所需的 OpenCV 依赖。启动 DSH 前无需激活虚拟环境。详见 uv 工具安装文档 和 PySceneDetect 安装说明。

2. 验证依赖

执行 uv tool update-shell 后,关闭并重新打开终端。在即将启动 DSH 的同一环境中执行:

ffmpeg -version
ffprobe -version
ffmpeg -hide_banner -encoders
scenedetect version

确认 FFmpeg 和 FFprobe 均为 >= 6.1 且主版本一致,编码器列表包含 libx264,PySceneDetect 为 >= 0.7.1 < 0.8。

若提示找不到命令,在 macOS/Arch 中执行 command -v ffmpeg ffprobe scenedetect,在 PowerShell 中执行 Get-Command ffmpeg, ffprobe, scenedetect,确认命令位置。uv tool dir --bin 可查看 PySceneDetect 的命令目录,该目录需要加入 PATH。通过服务或容器启动 DSH 时,也应配置相应的 PATH,修改后重启 DSH 进程。

插件不会自动下载依赖或执行安装脚本。缺少依赖时图片功能仍可用,设置页会列出视频依赖问题。

3. 安装插件

dsh plugin --profile web add dsh-visual-plugin # 或:github:jyh20030112/dsh-visual-plugin

若使用本地 DeepSeek Harness 源码开发,请改为链接本地插件目录:

cd /absolute/path/to/dsh-visual-plugin
npm run bootstrap
dsh plugin --profile web add link:/absolute/path/to/dsh-visual-plugin

bootstrap 要求已安装、构建的 dsh-v0.2.0-rc.2 Harness 检出,并自动查找同级或祖先目录。其他布局请显式指定:

HARNESS=/absolute/path/to/deepseek-harness npm run bootstrap

4. 重启并使用

在通过上述依赖验证的环境中重启 dsh web,然后:

1. 打开 设置 → 插件,选择 dsh-visual-plugin 详情页中的 视觉媒体 配置。通过 侧边栏 开关控制右侧面板,并按需调整视频解析高级设置。设置保存到当前 profile,立即生效且重启保留;升级会恢复旧设置归档中的有效视频参数,不覆盖已保存的新参数。

2. 在 DSH 中选择支持图片输入的模型;插件不再提供单独的视觉模型配置。
3. 发送图片。当前模型会原生回答,图片面板会记录缩略图和最终回答,方便复制。
4. 点击输入框旁的 上传视频。处理完成后在右侧选择 视频 播放;点击 在会话中提问 只会写入草稿,确认后再发送。

视觉模型

图片与视频关键帧均由 DSH 当前选择的视觉模型理解。模型提供方、接口和凭据统一由 DSH 管理,插件不再重复配置。

卸载

dsh plugin --profile web remove dsh-visual-plugin

重启 dsh web。该命令会在 profile 内转发执行 pnpm remove,bundle 层列表会自动同步移除该插件。

项目结构

src/
index.ts 原生图片历史、video_describe 工具、设置与 HTTP 路由 config.ts 视频解析高级设置与运行时策略 video/ 上传、容器探测、转码、场景检测、关键帧与 HTTP Range 播放 client/ 图片/视频面板、上传控件、高级设置、文案与样式 cordis.patch.yml bundle 补丁层

构建

npm run bootstrap && npm run typecheck && npm run build # 需要本地 harness 检出

预构建 lib/ 已提交,使用者无需构建。

CI/CD

ci.yml 在每次 push/PR 校验产物与打包内容;release.yml(tag v*)校验版本、打包、创建 GitHub Release 并发布到 npm。

相关资源

- DeepSeek Harness —— 本插件所扩展的宿主框架。
- PySceneDetect —— 用于选择视频关键帧的场景检测工具。
- awesome-dsh-plugin —— 收录本插件的 DSH 插件精选列表。

友情链接

- LINUX DO

致谢

- HsiangNianian — 感谢开发过程中的帮助与建议。
- tingfeng347 — 感谢构建稳定性修复与本地 harness 开发环境的完善。
- dsh-auto-continue — 网络错误等异常导致请求被中断时自动发送「继续」恢复的 DSH 插件(错误分类、自适应退避、浏览器通知),很好用的搭配。

许可证

MIT
预览分享卡片长什么样 ↓jyh20030112/dsh-visual-plugin
分享 · DeepSeek Harness Hub
jyh20030112/dsh-visual-plugin

本地优先的 DeepSeek Harness 视觉媒体插件。

回到顶部