# dsh-visual-plugin
使用 DSH 原生视觉模型解析图片与视频, 并在 Web UI 右侧面板查看结果。
[DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 插件。 ## 特性 - **原生图片理解** —— 上传图片始终走 DSH 原生附件与模型链路;插件不再配置或调用独立视觉模型。 - **可复制的图片历史** —— 右侧面板在图片缩略图旁记录当前 DSH 模型的最终回答,支持展开历史和一键复制。 - **插件自有视频上传** —— 支持 MP4、M4V、MOV、AVI、MPG/MPEG、MKV 和 WebM;扩展名、文件签名与 FFprobe 结果必须一致。 - **视频场景解析** —— 统一转为 H.264/yuv420p MP4,通过 PySceneDetect 提取关键帧,再将有序、带时间戳的图片交给当前 DSH 视觉模型。 - **右侧面板** —— 在图片/视频视图间切换,直接播放标准化视频,并将选中视频写入会话草稿。 - **视频高级设置** —— 可在插件设置卡中调整上传大小、存储配额、时长、输出尺寸、FPS、CRF 和关键帧数量。 ## 工作原理
2. 在 DSH 中选择支持图片输入的模型;插件不再提供单独的视觉模型配置。
3. 发送图片。当前模型会原生回答,图片面板会记录缩略图和最终回答,方便复制。
4. 点击输入框旁的 **上传视频**。处理完成后在右侧选择 **视频** 播放;点击 **在会话中提问** 只会写入草稿,确认后再发送。
### 视觉模型
图片与视频关键帧均由 DSH 当前选择的视觉模型理解。模型提供方、接口和凭据统一由 DSH 管理,插件不再重复配置。
## 卸载
```sh
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 补丁层
```
## 构建
```sh
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](https://github.com/deepseek-ai/deepseek-harness) —— 本插件所扩展的宿主框架。
- [PySceneDetect](https://www.scenedetect.com/) —— 用于选择视频关键帧的场景检测工具。
- [awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) —— 收录本插件的 DSH 插件精选列表。
## 友情链接
- [LINUX DO](https://linux.do)
## 致谢
- [HsiangNianian](https://github.com/HsiangNianian/) — 感谢开发过程中的帮助与建议。
- [tingfeng347](https://github.com/tingfeng347) — 感谢构建稳定性修复与本地 harness 开发环境的完善。
- [dsh-auto-continue](https://github.com/HsiangNianian/dsh-auto-continue) — 网络错误等异常导致请求被中断时自动发送「继续」恢复的 DSH 插件(错误分类、自适应退避、浏览器通知),很好用的搭配。
## 许可证
[MIT](LICENSE)