dsh-screenshot

DSH PLUGIN视觉与多模态

仓库 cuteG41cute/dsh-screenshot

视觉与多模态 L4 · 沙盒安装通过 安全审查:低风险 可信度:银 可安装插件
安装这个插件

dsh-screenshot 是 cuteG41cute 维护的 视觉与多模态 类 DSH 可安装插件, 仓库为 cuteG41cute/dsh-screenshot,许可证 MIT。 下面按「装什么、怎么装、验没验过、跑起来要注意什么」逐项列出。

一句话选型结论

按资料字段整理

dsh-screenshot 是视觉与多模态类的 DSH 可安装插件,验证等级 L4 · 沙盒安装通过,安全审查为低风险,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类视觉与多模态 收录类型可安装插件 验证等级L4 · 沙盒安装通过 安全审查低风险
验证等级 L4 L4 · 沙盒安装通过
GitHub 星标 0 复刻 未标注 · 未关闭 issue 未标注
最近更新 2026-10-30 创建于 未标注
README 13.4 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add github:cuteG41cute/dsh-screenshot#v1.2.0
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

视觉与多模态
字段来自项目仓库与公开索引,中文说明由本站标注

适用场景

视觉识别内容创作

验证等级与安全审查

L4 · 沙盒安装通过
自动化流程结论,不是人工审核
验证等级L4 · 沙盒安装通过安装命令在隔离沙盒内真实执行成功,无依赖错误
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度银综合仓库活跃度与验证结果

上面的结论来自上游最近一次自动化验证(2026-11-06): 同一套检查会在插件发新版后重跑,页面显示的是最新一次的逐项结果。

逐项检查结果

L1 · 已找到 ✓ 通过
  • L1.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L2 · 结构化 ✓ 通过
  • L2.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L3 · 安装规范 ✓ 通过
  • L3.1_INSTALL_COMMAND_PARSED 安装命令已解析 方式:安装规范解析
  • L3.2_DSH_VERSION_DECLARED DSH 版本已声明 方式:DSH 版本声明
L4 · 安装已测 ✓ 通过
  • L4.1_INSTALL_EXECUTED_CONFINED 受限沙盒内执行安装 方式:沙盒安装执行
  • L4.2_INSTALL_SUCCESS 沙盒安装成功 方式:沙盒安装执行
  • L4.3_ARTIFACT_CONFIRMED 安装产物已确认 方式:沙盒安装执行
L5 · 运行已测 ? 未知
  • L5.1_INSTALL_PASSED_SANDBOXED 沙盒安装通过 方式:沙盒安装执行
  • L5.2_WEB_BOOT_READY Web 启动就绪 方式:Web 启动
  • L5.3_HTTP_SERVED HTTP 服务响应 方式:HTTP 请求
  • L5.4_PLUGIN_INVENTORY_ACTIVE 插件清单中已激活 方式:插件清单查询

风险详情

  • 结论说明 静态扫描 低;动态审计无结论(以下以静态为准)→ 总评级 低。
  • 风险计数 严重 0 / 高 0

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L4:在沙盒里真实装过,依赖能装上,不是纸面声明。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在视觉与多模态场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-screenshot当前 L4 · 沙盒安装通过 低风险 0 未标注 有
open-design L4 · 沙盒安装通过 低风险 10.0 万 未标注 有
awesome-gpt-image-2 L3 · 安装规范通过 低风险 3.4 万 未标注 无
PicGo L3 · 安装规范通过 低风险 2.7 万 未标注 无
iPolloWork L4 · 沙盒安装通过 低风险 6,775 未标注 有
modlens L5 · 运行验证通过 低风险 4,207 0.2.0-rc.2 等 13 个 有

仓库档案

视觉与多模态
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方cuteG41cute仓库 dsh-screenshot · 默认分支 未标注
分类视觉与多模态vision
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言未标注仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue0 / 未标注 / 未标注收录时的数值,非实时
创建 / 更新未标注 · 2026-10-30最后推送 未标注
本站收录2026-11-15首次进入本站目录的时间

README 全文

13.4 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-screenshot

> 仓库:

DeepSeek Harness 静态插件:在会话输入框底部工具栏(与「+」和回形针同一排、紧挨回形针右侧)加一个截图按钮。点击后选择屏幕/窗口,直接回车即为整幅截图,也可拖拽框选局部;截图按捕获分辨率 1:1 转成 PNG 自动加入待发送附件,与手动粘贴/附加图片完全同一条管线。

特性

  • 📷 就在手边 —— 按钮与「+」「📎」同排同高,14px 图标,零学习成本;
  • ⚡ 两步出一张图 —— 选窗口 → 回车(整幅),不用先框选再确认;
  • ✏️ 可直接批注 —— 画笔 / 矩形 / 圆形 / 箭头 / 文字,6 种颜色,撤销 + 清空;
  • 🖼️ 原图画质 —— 标注是矢量重绘后按原生分辨率合成,不是把缩放后的画面再截一次;
  • 📎 走产品自己的附件管线 —— 复用输入框的图片校验、数量/体积上限与上传流程,发送与否仍由你决定;
  • 🔒 不联网 —— 插件自身不发起任何网络请求、不落盘,只把字节交给输入框。

效果

┌──────────────────────────────────────────────┐
│  [输入框]                                     │
│  ⊕  📎  📷  │  权限 ▾   /plan ▾              │  ← 📷 就是本插件
│                                  [模型] [发送]│
└──────────────────────────────────────────────┘

点击 📷 后的流程:

  1. 弹出系统的屏幕/窗口选择器(getDisplayMedia),选你要截的屏幕或窗口;
  2. 画面被冻结并全屏显示,整幅画面已默认选中(选区左上角实时显示 宽 × 高 像素);
  3. 二选一确认选区:
    - 整幅直接用 —— 按 Enter、双击画面,或点底部「整幅画面 · Enter」按钮;
    - 只要局部 —— 按住鼠标拖出矩形,松手即确认(单击或微小抖动不会误取消,会保留原选区);
  4. 进入标注编辑器,在截图上画重点;
  5. 点「完成 · Enter」→ 标注合成后的截图进入待发送附件。

标注编辑器

工具 快捷键 说明
画笔 1 自由手绘线条
矩形 2 框住一块区域
圆形 3 圈出某个控件/图标
箭头 4 指向具体位置,带实心箭头
文字 5 点一下落一个文字框,输入后回车确认(文字带描边,深色浅色背景都看得清)

工具栏还有 6 种颜色(红/黄/绿/蓝/白/黑)、撤销(Ctrl+Z)、清空、取消(Esc)。

标注以矢量形式保存、每次都从原图重绘,所以撤销/清空是精确的,导出的是原始分辨率的合成图(不是把缩放后的画面再截一次)。线宽与字号按截图尺寸自动计算,小图大图都不会太细或太粗。

免步骤快捷键:Alt + 点击 📷 —— 选完屏幕或窗口直接整幅进附件,跳过框选和标注。

安装

git clone https://github.com/cuteG41cute/dsh-screenshot.git
cd dsh-screenshot
powershell -ExecutionPolicy Bypass -File install.ps1

它会:
- 把 static/ 装到 \node_modules\dsh-screenshot\;
- 在 \cordis.patch.yml 末尾追加一行组合条目;
- 覆盖前把原文件备份到 \_backup\dsh-screenshot-<时间戳>\。

然后必须重启 harness 进程(关闭并重新启动 dsh web / 桌面版)——组合变更在启动时读取。浏览器标签刷新不够。

验证

重启后,在页面里按 F12 打开控制台:

// 1. 模块进了 boot 图谱
window.__DSH_BOOT__.entries.some(e => e.id === 'dsh-screenshot')   // → true

// 2. 探针可用
window.__dshScreenshot.version                                      // → '1.2.1'

// 3. 按钮在 DOM 里(输入框同排)
document.querySelector('[data-dsh-screenshot="button"]')            // →

// 4. 不想点击也能测捕获链路
const blob = await window.__dshScreenshot.captureRegion();          // 框选/回车后返回 PNG Blob

// 5. 只测遮罩交互(不需要屏幕捕获权限,用任意 canvas 当背景)
const c = document.createElement('canvas'); c.width = 1920; c.height = 1080;
await window.__dshScreenshot.pickRegion(c);                         // 回车 → 整幅 rect;拖拽 → 局部 rect;Esc → null

服务端侧(无需登录的路径):

curl.exe -s -o NUL -w "%{http_code}`n" http://127.0.0.1:3080/plugins/dsh-screenshot/client.js   # → 200

离线自检(不需要浏览器/harness):

node test/bundle-smoke.mjs      # 10 项:bundle 加载 / 槽位注册 / 渲染 / 附件注入 / 捕获分支
node test/browser-compat.mjs    # 7 项:真实 Chromium 里跑完整捕获链路(Windows 基线)

实现要点

关注点 做法
按钮位置 注册进 conversation.input.left 槽位——产品把该槽渲染在输入框底部工具栏内、+ 与回形针之后
截图 navigator.mediaDevices.getDisplayMedia() 取流 → 首帧冻结到离屏 canvas → 自绘全屏遮罩框选 → 按捕获像素 1:1 裁切
加入附件 直接驱动输入框自己的隐藏 input[type="file"](回形针按钮用的同一个入口)并派发冒泡 change,因此复用产品的类型校验、图片数量/体积上限与上传流程;失败时退化为向编辑器派发合成 paste 事件
失败可见 任何异常都会弹出提示条(找不到入口/输入框繁忙/捕获失败),不做静默失败
隐私 插件自身不联网、不落盘,只把字节交给输入框,发送与否由用户决定

Host 半部(lib/index.js)不做事:整个功能都在浏览器侧,它存在只是为了让组合能加载这个包、从而让客户端 bundle 进入 boot 图谱。

Linux 环境适配(1.2.1)

在 WebKitGTK 桌面壳(Linux 版 dsh-desktop)上,点截图按钮可能一直转圈:

  • 插件用 navigator.mediaDevices.getDisplayMedia 取画面;Windows 的 WebView2(Chromium)这条路成熟,
    Linux 的 WebKitGTK 需要 xdg-desktop-portal → PipeWire → 合成器;
  • 该系统链路损坏时(日志:Unable to open pipewire remote: 已到超时限制,随后 OverconstrainedError),
    请求会永久挂起;1.2.0 对此没有兜底,按钮 busy 永远是 true,也没有任何提示。

1.2.1 的处理(只改 static/lib/client.js,宿主端 lib/index.js 未动):

改动 作用
45 秒看门狗 getDisplayMedia 既不 resolve 也不 reject 时强制结束,按钮恢复并弹出说明性提示
约束降级重试 先带 selfBrowserSurface:"exclude";被引擎拒绝时退回 {video:true,audio:false} 再试一次
错误分类 describeCaptureError() 把 OverconstrainedError / NotFoundError / NotReadableError / SecurityError 映射成可操作的中文提示(含 Linux 通道排查指引)
能力检查前移 grabFrame() 自身也检查 getDisplayMedia 是否存在(原来只在 captureRegion 检查)
取消语义不变 用户关掉选屏框(NotAllowedError / AbortError)静默返回 null,不算错误

> ⚠️ 这属于「环境不适配」的可控失败:它让插件在链路坏掉时给出明确原因,不等于截图就能用了。
> 要让截图真正工作,仍需修好系统屏幕共享链路(KDE:xdg-desktop-portal + xdg-desktop-portal-kde + PipeWire 齐全并运行),
> 或者用 Chromium 内核浏览器访问 Web 版。

1.3.1:桌面壳原生截屏通道(Linux Wayland 的真正解法)

1.2.1 只是让失败可控。根因在 WebKitGTK 里:KDE Wayland 上 kwin 的截屏流广播
可变帧率(SPA EnumFormat framerate=0/1),WebKitGTK 的 GStreamer 胶囊协商直接断言失败——

gst_value_collect_int_range: assertion 'collect_values[0].v_int < collect_values[1].v_int' failed

于是 getDisplayMedia() 永远建不起流。1.3.1 让桌面壳绕开视频流:一次拿一张 PNG。

页面 grabFrame()
→ 有 window.chrome.webview 桥 → postMessage({type:'dsh-screenshot', id})
→ 桌面壳(Python)调 org.freedesktop.portal.Screenshot(interactive=false)
→ portal 回一张 PNG 的 file:// → 转 data URL → evaluate_javascript 回传
→ 页面 window.__dshShotReply(id, {ok, dataUrl}) → canvas
→ 复用原有框选 / 标注 / 入附件(零改动)
要点 说明
没有桥就原样走浏览器 普通浏览器里 nativeCapture() 直接 resolve(null),行为与 1.2.1 完全一致
桥失败会回退 原生通道报错 → 先 toast 一条原因,再走 getDisplayMedia(看门狗仍在)
两个名字 注册表 window.__dshShot[id],回传函数 window.__dshShotReply(id,res);同名会让宿主把对象当函数调用,回传静默失败(原型的坑)
超时兜底 原生通道 30 秒;浏览器通道 45 秒看门狗不变

真实 Chromium 里的验证(node test/browser-compat.mjs,9/9):

用例 结果
宿主回 {ok:true, dataUrl} 拿到 640×480 canvas,getDisplayMedia 0 次调用
宿主回 {ok:false} 回退到浏览器通道(1 次调用拿到 320px),并弹出「原生截屏通道不可用…」toast
无桥(普通浏览器) 6 项原有用例全部通过,行为未变

Windows / Chromium 兼容性(1.2.1 同版验证)

1.2.1 的修复是从 Linux 侧提出的,但只有一条代码线,不是 Linux 分支。理由与证据:

验证 手段 结果
完整捕获链路 真实 Chromium(Edge 156 headless)+ CDP,用 canvas.captureStream() 提供真 MediaStream,跑 video.play() → videoWidth → drawImage → canvas 250 ms 拿到 640×480 画面,只调用 1 次 getDisplayMedia(无多余重试)
约束未被改动 断言首次调用参数仍是 {video, audio, selfBrowserSurface:'exclude'} 通过
用户取消 getDisplayMedia 抛 NotAllowedError 1 ms 返回 null,1 次尝试,不弹错
约束降级 首次抛 OverconstrainedError,第二次成功 第 2 次参数严格等于 {video:true,audio:false}
硬失败提示 抛 NotFoundError 中文提示「未找到可捕获的屏幕/窗口源」,不挂起
死链路兜底 getDisplayMedia 永不返回(看门狗临时缩到 700 ms 测) 715 ms 抛超时、只尝试 1 次、不再重试
无 API 环境 navigator.mediaDevices 缺失 「当前环境不支持屏幕捕获」,不抛栈
挂载契约 apply() 注册 conversation.input.left#dsh-screenshot、按钮可渲染、探针 6 个键 与 1.2.0 一致
node test/browser-compat.mjs
# 7/7 PASS  engine: HeadlessChrome/156 Edg/156  (Windows NT 10.0; Win64; x64)

三条改动都是只在异常/超时才走的兜底路径:Windows 正常路径上 getDisplayMedia 立即 resolve,
看门狗被 clearTimeout(实测 250 ms 完成),约束降级分支永不进入。因此不需要分叉分支;
main 同时是 Linux 与 Windows 的发布线。

已知限制

  • 必须重启一次 harness:静态插件在启动时装载,无法在会话内热加。
  • 桌面版(WebView2)里 getDisplayMedia 的可用性取决于本机 WebView2 运行时;若不可用,点击按钮会明确报「当前环境不支持屏幕捕获」,不会静默。此时可改用原生捕获方案(桌面壳 C# 抓屏 + 遮罩框选,单步、无选择器对话框),需要改 dsh-desktop\App.cs 并重装桌面版。
  • 子会话(subagent)输入框被禁用时不接受附件,会提示「输入框当前不接受附件」。
  • 选择器里默认排除「当前标签页」(selfBrowserSurface: 'exclude'),避免拍到 harness 自己。

卸载 / 回滚

powershell -ExecutionPolicy Bypass -File uninstall.ps1                 # 删除包 + 组合行
powershell -ExecutionPolicy Bypass -File uninstall.ps1 -RestoreBackup  # 从最近备份还原 cordis.patch.yml

重启 harness 后生效。

目录

dsh-screenshot/
├── static/
│   ├── package.json          # 包清单,声明 dsh.client → lib/client.js
│   └── lib/
│       ├── index.js          # Host 半部(惰性)
│       └── client.js         # 浏览器 bundle:按钮 + 框选遮罩 + 附件注入
├── test/
│   ├── bundle-smoke.mjs      # 离线自检(10 项,无需浏览器)
│   └── browser-compat.mjs    # 真实 Chromium 捕获链路(7 项,Windows 兼容基线)
├── tools/
│   └── upgrade-installed.ps1 # 把已安装的包同步到仓库版本(备份 + sha256 + 校验模式)
├── install.ps1
├── uninstall.ps1
└── README.md

升级已安装的包(Windows)

不用重装整个插件,直接同步 static/ 到已安装目录(会先备份):

powershell -ExecutionPolicy Bypass -File tools\upgrade-installed.ps1          # 复制
# 重启 harness
powershell -ExecutionPolicy Bypass -File tools\upgrade-installed.ps1 -Verify  # 校验 sha256

-Verify 只比对磁盘文件;运行态请在页面控制台看 window.__dshScreenshot.version。

MIT License.

常见问题

5 问
答案由本站依据条目字段整理,不引用上游原文
dsh-screenshot 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add github:cuteG41cute/dsh-screenshot#v1.2.0` 即可。

dsh-screenshot 的验证等级是什么意思?

L4 · 沙盒安装通过。安装命令在隔离沙盒内真实执行成功,无依赖错误

dsh-screenshot 安全吗?

低风险。静态扫描 低;动态审计无结论(以下以静态为准)→ 总评级 低。

dsh-screenshot 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-screenshot 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

同名或近似条目

8 条
不同作者的仓库分开列,请确认你要装的是哪一个
视觉与多模态
按星标排序,可作替代方案

open-design

open-design

L4 · 沙盒安装通过 10.0 万 星

awesome-gpt-image-2

awesome-gpt-image-2

GPT Image 2 / 2.5 提示词与案例库,530+ 个案例、20+ 套工业级模板与可复用 Skills,新增 2.5 同提示词对比

L3 · 安装规范通过 3.4 万 星

PicGo

PicGo

L3 · 安装规范通过 2.7 万 星

iPolloWork

iPolloWork

L4 · 沙盒安装通过 6,775 星

modlens

modlens

ModLens 是 DeepSeek Harness 的视觉插件,为纯文本模型外挂视觉能力,粘贴图片即得结构化 JSON 证据(OCR、版面

L5 · 运行验证通过 4,207 星

OpenBiliClaw

OpenBiliClaw

本地私有、开源的自进化跨平台 AI 内容发现 Agent:先理解你,再主动从 B站、小红书、抖音、YouTube、X、知乎、Reddit、微

L4 · 沙盒安装通过 3,398 星

cuteG41cute 的其它插件

6 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 2026-11-06。