让桌面客户端窗口半透明,透出你的壁纸
30.7/100
综合分
1
GitHub 星标
82
npm 周下载
—/5
用户评分
数据截至 2026/9/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-transparentnpm 源 · dsh-transparent 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 窗口半透明
- 透出桌面壁纸
- 液态玻璃输入框
非官方 DSH 桌面插件:让窗口半透明,透出你的壁纸。仅支持 Windows。还带了个真会折射的液态玻璃输入框,可惜应用布局让它几乎看不见——详见 README。
最近更新
在 GitHub 查看全部 →v1.4.02026-09-28
· dsh-transparent 1.4.0 — 设置面板终于能渲染了
· 问题出在哪
1.3.3 注册了 Config schema,却什么都没显示。schema 是被接受了——宿主报告 status: "schema"——但 schema 本身渲染不出任何东西。
Plugins 页面只给注册过配置的 bundle 画配置,而注册是浏览器端的事:
ctx.inject(['slots'], (child) => child.slots.register(
{ name: 'plugins.bundle.config', key: 'dsh-transparent' }, Panel))
页面随后把这一段渲染在 bundle 的描述和它的行之间——也就是你指定的位置,读者会去找的位置。
· 怎么读、怎么写
值来自 ctx.remote.settings,即宿主自己的配置 API:
· describe() → 每个命名空间的当前值和修订号
· mutate(ns, ops, revision) → 按路径定位的编辑
读到的修订号会回传,所以写入是比较并交换——并发编辑会被报告出来,而不是悄悄覆盖。
· 为什么 slot 服务是可选的
它用 ctx.inject([...]) 请求,而不是写进插件的 inject 列表。硬依赖会让整个插件在服务缺席时无法生效——而生效正是让窗口变半透明的那一步。面板可选,窗口不可选。每条失败路径都让插件继续运行。
· 三次尝试
| | 问题 |
|---|---|
| 1.3.0 | 手写 schema 缺了 ~standard → 插件启动失败 |
| 1.3.2 | schema 解析不了 → 没有表单 |
| 1.4.0 | — |
前两次都在让宿主端把选项描述出来。两次都没管画选项的那一端。
重启客户端即可加载。
v1.3.32026-09-28
· dsh-transparent 1.3.3 — 设置 schema 现在真正能解析了
1.3.2 猜的是:应用对模块解析的重写,也许能让配置档插件导入 @deepseek-ai/schemastery。重启给出了答案:
--- activated v1.3.2 (options: 0)
重写覆盖的是插件入口的模块说明符——内置插件正是靠包名加载——但不会延伸到配置档插件内部的 import。带守卫的 import 起了作用:插件跑起来了,只是没有设置表单。
· 修复
schemastery 和它唯一的运行时依赖现在内置到 lib/vendor/ 下:
| 文件 | 来源 | 版本 | 许可证 |
|---|---|---|---|
| schemastery.mjs | @deepseek-ai/schemastery | 3.18.4 | MIT |
| cosmokit.mjs | @deepseek-ai/cosmokit | 1.8.5 | MIT |
改写了一处 import 路径。两份许可证一并复制,NOTICE.md 记录来源、版本和具体改动。插件保持零依赖——样式表和精灵图内联也是同一个理由。
包体积 55.8 kB,17 个文件。
· 本地验证过,不是猜的
Config exists true
Config['~standard'].validate function <- 它缺失导致 1.3.0 出问题
volatile fields resolve to { get() } <- readValue 存在的原因
defaults applied alpha 215
verify.mjs 断言这四项,还断言内置文件确实在包里——所以缺了 lib/vendor/ 会在 CI 里失败,而不是等到加载时。34 项检查,全部通过。
· 更新之后
重启客户端。设置界面应该会显示四个控件:alpha、darkTheme、updateCheck、updateSource。
如果没有,日志行会告诉你属于哪种情况:
--- activated v1.3.3 (options: 4) settings form available
--- activated v1.3.3 (options: 0) plugin fine, no form
v1.3.22026-09-28
· dsh-transparent 1.3.2 — 修复 1.3.0 的启动失败
装了 1.3.0 或 1.3.1 的话,插件根本起不来。应用会报「启动失败」。抱歉,这是我的锅,原因也很具体。
· 出了什么问题
1.3.0 声明了一份手写的 Config schema。设置服务读这份 schema 只用到三样东西——meta.volatile、type/dict 和 toJSON()——每一样都对着真正的 schemastery schema 验证过,全部通过。
加载时还多用一个东西,光读设置服务永远发现不了:
function resolveConfig(runtime, config) {
if (!runtime.Config) return config
const result = runtime.Config['~standard'].validate(config) // Standard Schema
...
}
Config 要通过 Standard Schema 接口校验。schemastery 提供这个接口,手写的对象没有。缺了它,加载时就抛错,整个插件跟着挂掉。
我只验证了碰巧在读的那个消费方,没验证加载器。
· 修复
别再仿造 schema,直接用真的:
· Config 现在改用 @deepseek-ai/schemastery 的 z.object({...})。
· 导入加了保护。宿主侧只有这一处依赖应用如何为配置档插件解析模块。万一哪天解析不了,插件照样能跑,只是没有设置表单——降级,而不是宕机。
· 如果你在 1.3.0 / 1.3.1
升级到 1.3.2 并重启客户端。只重新启用插件不够:宿主侧在启动时只导入一次,开关切换复用的是缓存模块。
· 验证
verify.mjs 现在会检查任何导出的 Config 上有没有 ~standard.validate——这正是插件能用和不能用的分界线——并检查导入是否保持保护。在纯 Node 里导入解析不了,所以检查报告的是降级,而不是直接失败,这同时也证明回退路径能走通。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-transparent
让 DSH 桌面客户端的窗口变半透明,透出你的桌面壁纸。
面向 DeepSeek Harness 桌面客户端的非官方插件。仅支持 Windows。
插件里也确实包含一套真正会折射的液态玻璃实现。但安装前请注意:在这个应用的布局下,折射几乎看不出来——因为没有任何内容会从输入框后面经过。你实际能看到的效果就是「窗口变半透明」。请读下面的 已知限制,那段很短,而且是实话。
它做什么
| 效果 | 状态 | 实现在哪 |
| 窗口变半透明,桌面壁纸透出来 | 有效 | 宿主半包(Node)启动一个 PowerShell 助手,设置 Win32/DWM 窗口属性 |
| 应用的不透明背景被清掉 | 有效 | 客户端半包(CSS) |
| 输入框折射背景,而不只是模糊 | 已实现,但实际几乎看不出 | 客户端半包:运行时生成 SVG 位移贴图,通过 backdrop-filter: url() 引用 |
为什么玻璃看不出来
折射必须有东西可弯。把一片纯色做位移等于什么都没发生——每个像素都一样,挪动它们不会带来任何变化。
所以要让效果显现,需要两件事同时成立,而现在只成立了一件:
1. 页面不能是不透明的。 ✅ 壁纸确实到了屏幕上(靠窗口半透明)。
2. 必须有内容从输入框后面经过。 ❌ 输入框独占窗口底部一行,消息列表的底边在它上方。
展开完整文档(README 剩余 1 节)
dsh-transparent
让 DSH 桌面客户端的窗口变半透明,透出你的桌面壁纸。
面向 DeepSeek Harness 桌面客户端的非官方插件。仅支持 Windows。
插件里也确实包含一套真正会折射的液态玻璃实现。但安装前请注意:在这个应用的布局下,折射几乎看不出来——因为没有任何内容会从输入框后面经过。你实际能看到的效果就是「窗口变半透明」。请读下面的 已知限制,那段很短,而且是实话。
它做什么
| 效果 | 状态 | 实现在哪 |
| 窗口变半透明,桌面壁纸透出来 | 有效 | 宿主半包(Node)启动一个 PowerShell 助手,设置 Win32/DWM 窗口属性 |
| 应用的不透明背景被清掉 | 有效 | 客户端半包(CSS) |
| 输入框折射背景,而不只是模糊 | 已实现,但实际几乎看不出 | 客户端半包:运行时生成 SVG 位移贴图,通过 backdrop-filter: url() 引用 |
为什么玻璃看不出来
折射必须有东西可弯。把一片纯色做位移等于什么都没发生——每个像素都一样,挪动它们不会带来任何变化。
所以要让效果显现,需要两件事同时成立,而现在只成立了一件:
1. 页面不能是不透明的。 ✅ 壁纸确实到了屏幕上(靠窗口半透明)。
2. 必须有内容从输入框后面经过。 ❌ 输入框独占窗口底部一行,消息列表的底边在它上方。没有任何东西会滚到它后面,透镜没有东西可弯。
折射本身是真实且验证过的——输入框的 backdrop-filter 确实解析成 url(#dsh-transparent-liquid),用同样的滤镜渲染滚动的文字会得到明显的扭曲。是应用的布局把那些文字挡在了透镜之外。
要让它可见,就得改应用的布局,让消息列表延伸到输入框后面。这件事尝试了三次,回退了三次,详见「已知限制」。
安装
从 npm 装(推荐) —— 这是唯一不需要访问 GitHub 的方式。在「添加插件」对话框里,把安装源设为 中国大陆镜像源(registry.npmmirror.com),然后填包名:
dsh-transparent
从 GitHub 装 —— 需要能访问 github.com:
plugin_manager install_bundle https://github.com/969246694/dsh-transparent
锁定版本而不是跟随 main:
plugin_manager install_bundle https://github.com/969246694/dsh-transparent#v1.0.0
从本地路径装 —— 适用于克隆下来的仓库或解压出的压缩包:
plugin_manager install_bundle
然后重启客户端。窗口透明度会在启动时自动应用,不需要手动跑任何脚本。
为什么镜像源只对 npm 那条路有用:GitHub 地址被归类为 git 规格,由 git 拉取,完全绕过 npm——所以「安装源」那个设置对它无效。这也正是这个包要发布到 npm 的原因。
配置
这些选项会出现在应用自己的设置界面里——不用手改 YAML。插件通过声明 Config 结构来获得表单。
cordis.patch.yml 依然有效,并提供初始值:
config:
alpha: 215 # 整窗不透明度 darkTheme: true # 强制界面使用黑夜主题 updateCheck: true # 有新版本时在 Console 提示 updateSource: "" # 自定义检查更新的地址
为什么这个结构是手写的。 声明配置结构通常要写 z.object({...})(来自 @deepseek-ai/schemastery),但装在 /node_modules 下的插件根本 import 不到这个包——它在应用包内部,从插件位置解析会直接 ERR_MODULE_NOT_FOUND。
所以这里用一个普通对象,形如设置服务读取的样子:type、dict、meta.volatile,以及返回 schemastery { uid, refs } 格式的 toJSON()。插件保持零依赖。
另外:只有标了 volatile 的字段才能在界面上编辑,而 volatile 会改变字段的传递形态——apply() 收到的是 { get() } 而不是值本身。所以每个选项都经过一个小helper解包。
更新
插件管理器没有更新入口,也没有版本检查——代码里完全没有 outdated / upgrade / checkForUpdate 这类路径。应用本身永远不会告诉你出了新版本,所以宿主半包每次启动问一次你 profile 配置的 registry,有新版就在 Console 说一句:
[transparent] v1.2.1 is available (running 1.2.0) — reinstall the plugin to update
检查只花一个小请求,失败是静默的——离线、私有源、线路不通,都不值得报警告。
它只提示,从不安装。 要更新:在插件管理器里重装一次,或执行 install_bundle dsh-transparent——那会重跑 pnpm 并取范围内的最新版。无论哪种方式,新版本都要重启后才开始运行。
工作副本不会被检查:只有装在 node_modules 下(即发布安装的位置)才会检查,所以从仓库直接跑不会被误认为已安装的版本。
updateSource 可以把检查指向别处——任何返回 {"version":"x.y.z"} 的地址(插件会自动拼 /latest)。
darkTheme
白天主题下的透明会发灰——壁纸透上来的是一片灰,而不是玻璃感——所以插件在激活时把主题固定为黑夜。默认 true;改成 false 就完全不动你的选择。
它是通过宿主的设置服务写入 ui-theme.preference 这个持久设置的,所以重启后依然生效、也会反映在设置界面里。写入前会先读一次:已经是黑夜就不写;写入时带上读到的 revision 做 CAS,不会悄悄覆盖你中途改过的值。
⚠️ 卸载插件不会把之前的偏好还原。 如果你希望自己的选择被尊重,请设 darkTheme: false。
| alpha | 效果 |
| 255 | 窗口完全不透明。看不到壁纸,内容最清晰 |
| 215 | 默认。壁纸可见,内容略微变淡 |
| 150 | 壁纸明显,内容明显变淡 |
设计令牌在 dsh-transparent.css:
| 令牌 | 含义 | 默认值 |
| --tp-blur | 折射前的模糊量 | 2px |
| --tp-saturate | 折射后背景的饱和度 | 130% |
| --tp-lift | 明度提升 | 1.12 |
| --tp-lens | 折射强度(位移像素数) | 55 |
| --tp-glass-fill | 玻璃底色 | rgb(19 19 19 / 0.30) |
| --tp-rim | 边缘高光强度 | 0.10 |
改 dsh-transparent.css,跑 node build.mjs,客户端半包会热更新。
液态玻璃是怎么做的
模糊不是液态玻璃,折射才是。 真实的透镜沿着形状的法线弯折背景:上下边缘竖向弯、两侧横向弯、四角斜向弯,而中间平坦处完全不弯。
这段描述就是一张法线贴图,而 feDisplacementMap 正是它的消费者:红通道是 x 偏移,绿通道是 y 偏移,128 表示"不偏移"。正因为贴图以 128 为中心构建,玻璃中间对背景不做任何改动,而边缘把它弯折——这是机制本身,不是需要记住的约定。
贴图用 canvas 在运行时生成,并且按输入框自己的宽高比:
1. 画一个圆角矩形(白底黑背)
2. 模糊它 —— 这个斜面代替玻璃的厚度
3. 对斜面做 Sobel —— 得到每个像素的表面法线
4. 把 (128 + dx, 128 + dy) 写进红和绿通道
宽高比的影响比看上去大得多。 贴图通过 preserveAspectRatio="none" 铺满元素,而输入框是极宽极扁的条(约 10:1)。如果生成 3:1 的贴图再拉伸,竖直方向的斜面会被压缩好几倍——而上下边缘恰恰是这种长条上产生折射的地方。比例错了,玻璃就是平的,而且不报任何错。
color-interpolation-filters 必须是 sRGB。默认的 linearRGB 会把位移抹平,结果退化成普通模糊。
架构
样式由 CSS 结构选择器表达,而不是用 JavaScript 给元素打标记。
这个选择是整套设计的核心,而它是从一次失败里得出的。 用 data-* 属性标记元素、再为它们生成 CSS,无法避免闪烁:
应用重渲染时替换掉自己的元素 → 新元素没有标记 → 规则不再生效 → 插件发现,于是重新应用
只要"重新应用"存在,就存在"没应用上"的那一帧。 唯一能关掉这个窗口的办法,是删掉重新应用本身。
所以客户端半包只做两件事,各一次:
1. 探测输入框卡片在可编辑元素之上第几层,然后追加一条对应深度的 :has() 规则。深度是应用组件树的属性,与重渲染无关,探测一次就够。链上每一步都是直接子代关系,所以只命中唯一一个元素——不会嵌套,不会叠加。
2. 生成折射贴图,这是 CSS 确实表达不了的。
没有 MutationObserver、没有调度器、没有限流、没有补标记。 输入框被替换一千次,浏览器就匹配一千次,而我们一行代码都不跑。
仓库结构
dsh-transparent.css 设计令牌 + 结构规则(唯一真源) build.mjs 把 CSS 拼进 lib/client.js,带守卫 verify.mjs 30+ 项检查,跑在桩上,不需要浏览器 lib/index.js 宿主半包 —— Node,启动窗口助手 lib/client.template.js 客户端半包 —— 经典脚本,含 __CSS__ 占位符 lib/client.js build.mjs 生成的产物 —— 不要直接改 assets/window-glass.ps1 Win32/DWM 助手,由宿主半包调用
三个值得知道的坑
1. .ps1 必须是纯 ASCII。
powershell.exe 在没有 BOM 时按 ANSI 读取脚本。UTF-8 无 BOM 的文件会让非 ASCII 注释变成乱码,而字符串里混进一个异常字节足以让解析直接失败——这里就真的发生过一次,原因是中文注释。assets/window-glass.ps1 里没有任何非 ASCII 字符,请保持这样。
2. 客户端半包运行在陷阱之下。
在动态求值的客户端半包里,setTimeout、setInterval、clearTimeout、clearInterval、fetch 和 require 被替换成了会抛异常的陷阱。所有定时行为必须用 requestAnimationFrame。verify.mjs 会在它们被调用时让构建失败。
3. 停用一个功能意味着删除它的样式表,而不只是不再写入。
已注入的 元素不会因为 bundle 不再写它就消失。在代码里撤掉规则、而页面里那个元素还在,旧规则就依然生效。插件因此会在激活时显式删除残留样式表。
已知限制
- 窗口透明仅支持 Windows。 其他平台上客户端半包照常工作,只是跳过透明度。
- 壁纸无法被折射。 backdrop-filter 只看得见页面内部的内容。桌面由操作系统在浏览器之外合成,所以玻璃折射的是应用自身的内容——文字、代码块、卡片——但永远不会是壁纸本身。这不是调参问题,是 API 的边界。
- 聊天文字不会经过输入框后面。 输入框独占窗口底部一行,消息列表的底边在它上方,所以没有东西会滚到玻璃后面。要做到这一点必须修改应用的布局——尝试过三次,回退了三次。详见下文。
- 如果应用改变了 DOM 深度,:has() 选择器会停止匹配,玻璃安静地消失。这是退化,不是闪烁。
排错
客户端半包在启动时打印一行:
[transparent] v1.0.0 via style tag | selector div:has(...) | card 952x98 ratio 9.7:1 | depth 3
玻璃没出现就先看这一行。depth 0 表示没找到输入框。
Console 里可用的入口:
window.__tp.layout() // 打印输入框周围的层级链
window.__tp.depth() // 输入框深度,找不到返回 0
window.__tp.retry() // 重新探测并安装
window.__tp.diag() // 溢出状态与插件自身节点
宿主半包的活动记录在 %TEMP%\dsh-transparent.log。
开发
node build.mjs # 把 CSS 拼进客户端 bundle(带守卫)
node verify.mjs # 契约、打包、陷阱、YAML 检查
build.mjs 拒绝输出在 CSS 里声明 backdrop-filter 的主题,也拒绝使用裸容器选择器。这两条规则的存在,都是因为在开发中破坏过它们并造成了肉眼可见的破坏。
关于尝试过又撤回的东西,如实记录
让聊天文字滚到玻璃后面这件事,尝试了三次,回退了三次。每一次都破坏了布局,最严重的一次把侧栏压成了一字宽。
每次的原因都一样:在看不见的情况下修改另一个应用的布局。 一个"取输入框之外最高的可滚动元素"的辅助函数,取到的是布局包装器而不是消息列表;而验证类名后缀唯一,完全不能说明这个元素是对的。
写在这里,是因为读者有权知道这个插件里哪些部分是承重的、哪些是放弃了尝试,而不是从 issue 列表里去考古。
许可
MIT —— 见 LICENSE。
非官方,与 DeepSeek 无关 —— 见 NOTICE.md。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
969246694/dsh-transparent
让桌面客户端窗口半透明,透出你的壁纸
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。