前言¶
在 DSH Web 里做视觉相关任务时,常见做法是把手机里的照片先传到电脑、再从输入框选文件,或依赖第三方网盘链接。步骤多,大图还容易在传输或压缩环节损失细节。dsh-camera 是社区维护的 DSH Web 插件:在电脑上打开某个对话后,通过局域网二维码让手机浏览器直接拍照或选图,预览确认后一次性作为该对话的一条 user 消息进入会话,模型可立即处理图片附件。手机无需安装 App、无需登录 DSH,数据默认不经过公网。
这是什么¶
- 仓库与维护者:ilovecnxx/dsh-camera,维护者 ilovecnxx;社区目录页见 skillhub.cn/plugins/ilovecnxx/dsh-camera。
- 分类:联网工具(局域网 HTTP/可选 HTTPS 服务,非云中转)。
- 包名:
@local/dsh-camera;许可 MIT;当前资料中 package 版本为0.3.1。 - 适用环境:DSH
>=0.2.1-rc.3且使用 Web profile(dsh web);无第三方运行时依赖,Host 侧为 Node 内置模块加内联浏览器代码。
插件解决的核心问题:把「手机采集 → 进入当前 DSH 对话」缩短为同一 Wi-Fi 内扫码、拍/选、手动发送;多图(及可选视频)合并为一条消息,不自动发送。
架构要点¶
DSH Web 自身只监听回环地址,无法在局域网直接暴露拍照页。插件因此在 Host 进程内另起 node:http 服务器(默认 0.0.0.0:3579),只提供拍照页与上传接口;电脑端面板与 RPC 仍走原有 loopback Web 服务器,用浏览器 cookie 鉴权。
手机上传时,Host 通过 ctx.sessionController.prompt 以 mode: 'queue' 注入图片块,与 Web 输入框发图走同一条 admission 路径(多模态校验、EXIF 归一化、附件持久化、唤醒 agent 由 DSH 完成)。打开面板时会 camera.arm,将 token 绑定到当前 sessionId,避免误发到其他会话。
核心功能¶
下面能力均来自项目 README 与功能表,可按需选用。
| 能力 | 说明 |
|---|---|
| 入口 | 输入框下方「拍照上传」,生成二维码与链接,绑定当前对话 |
| 采集 | 手机页支持拍照(可连拍)、相册多选;可选录像(系统相机原文件,或 HTTPS 全屏相机内浏览器编码录像) |
| 原图与视频 | 照片不压缩(HEIC 会转为 JPEG,因 DSH 不支持 HEIC);相册/系统相机视频原样保存 |
| 手动发送 | 内容先进待发送预览,点「发送 N 项」才上传;一次最多项数、大小、频率可配置 |
| 安全边界 | 24 字符 token、默认 2 小时过期、仅局域网、每 token 限流;不代理 DSH 本体 |
| 国际化 | 电脑面板与手机页跟随中英文环境 |
视频在对话中的形态:DSH 仅图片进入模型视觉输入;视频以文件附件进入对话(界面为文件卡片),模型拿到路径与元数据,不能直接「观看」视频内容。若当前模型不支持图片输入,上传会在手机页被拒绝并提示切换视觉模型。
安装与启用¶
从 GitHub 安装(README 推荐写法):
# 安装到 web profile
dsh plugin --profile web add 'github:ilovecnxx/dsh-camera'
# 确认插件进入组合
dsh --profile web --dump-config | grep -A2 dsh-camera
安装后,运行中的 dsh web 可通过 profile 热加载(dsh-hmr)重组插件树;若未出现入口,先刷新浏览器,仍无效则重启 dsh web。README 说明:非 required 的插件加载失败不会拖垮 GUI,仅记录诊断。
安装前建议自行查看仓库源码与 MIT 许可证;插件以当前 dsh web 进程权限运行,会在本机开启局域网 HTTP 服务并写入 $DSH_HOME 下的附件与可选 TLS 材料。
典型用法¶
- 在任意对话中点击输入框下方的拍照上传入口(README 中按钮文案含相机图标)。
- 面板展示二维码;也可复制链接发到手机。
- 手机与电脑连接同一 Wi-Fi,扫码打开局域网页面(HTTP 模式下浏览器提示「不安全」属预期)。
- 拍照、录像或从相册选择;在预览中可继续添加或删除,确认后点击「发送 N 项」。成功后电脑对应对话中出现一条 user 消息:照片为图片块,视频为文件附件。
- 链接默认 2 小时有效;面板可「换一个链接」作废旧 token,或关闭面板等待过期。
可选:在 cordis.patch.yml 中开启 https: true,配合本机生成的 CA 证书,可在 iPhone Safari 使用页面内全屏相机(连拍、页面内录像、不触发系统闪光灯)。不需要该能力时保持 https: false 即可,HTTP 模式仍可用系统相机拍照。
配置摘录¶
在 profile 的 cordis.patch.yml 中可按需 patch(字段均有默认值):
- insert:
- id: dsh-camera
name: '@local/dsh-camera'
config:
port: 3579
lanIpOverride: ''
tokenTtlMs: 7200000
maxUploadBytes: 100663296
maxImageBytes: 20971520
maxVideoBytes: 83886080
maxRecordSeconds: 60
recordVideoBitsPerSecond: 10000000
maxFilesPerUpload: 6
uploadsPerHour: 120
https: false
httpsPort: 0
排障时可临时使用环境变量 DSH_CAMERA_PORT、DSH_CAMERA_LAN_IP、DSH_CAMERA_DEBUG=1(Host 日志前缀 dsh-camera)。
常见现象与处理见 README 故障排查表,例如:未检测到局域网 IP 时用 lanIpOverride;防火墙需放行端口(如 ufw allow 3579/tcp);二维码 URL 为 127.0.0.1 时表示 LAN IP 探测失败。
适用场景与注意¶
适合:本地开发或内网环境下,需要把手机现场照片、截图或短录像快速送入当前 DSH 对话,且希望先预览再发送、照片尽量保持原字节的场景。
注意:
- 链路仅限局域网;README 明确不提供公网隧道,外网使用需自行评估风险(例如配合其他方案)。
- 单张照片受 DSH 附件硬限制(默认校验 20 MiB);超大 ProRAW 等需先在相册导出或调整配置上限。
- 社区插件目录与 DeepSeek / 幻方无官方从属关系;星标与版本以仓库与目录页为准(目录线索中星标为 0)。
结尾¶
dsh-camera 把局域网手机浏览器变成 DSH Web 对话的采集端:扫码、拍选、手动确认,多图一条消息进会话,减少「先传到电脑再拖进输入框」的摩擦。进一步了解可阅读 GitHub README 与 SkillHub 目录页。