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

任意背景 Tkingxiao/dsh-any-background

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

Deepseek Harness 自定义主题插件,支持自定义图片/视频壁纸,对话框,侧边栏等透明度模糊度调整,全局主题色的色轮调整插件

52.3/100
综合分
51
GitHub 星标
3,532
npm 周下载
—/5
用户评分

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

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

状态速览

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

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

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

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

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

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/29 22:39:11

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

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 69 处,展示前 20 条)
  • 读取本地文件
    lib/index.js:216
    const raw = JSON.parse(await readFile(file, "utf8"));
  • 读取本地文件
    lib/index.js:536
    await access(p);
  • 写入本地文件
    lib/index.js:570
    await rename(p, expected);
  • 删除本地文件
    lib/index.js:628
    await rm(target, { force: true });
  • 写入本地文件
    lib/index.js:629
    await rename(p, target);
  • 写入本地文件
    lib/index.js:916
    await mkdir(dataDir(), { recursive: true });
  • 读取本地文件
    lib/index.js:934
    const st = await stat(file);
  • 读取本地文件
    lib/index.js:940
    text = await readFile(file, "utf8");
  • 写入本地文件
    lib/index.js:953
    await rename(file, into);
  • 写入本地文件
    lib/index.js:993
    await writeFile(tmp, JSON.stringify(normalized, null, 2), "utf8");
  • 写入本地文件
    lib/index.js:994
    await rename(tmp, configPath());
  • 删除本地文件
    lib/index.js:999
    await rm(tmp, { force: true });
  • 读取本地文件
    lib/index.js:1009
    return (await stat(wallpaperPath())).size > 0 ? WALLPAPER_ROUTE : null;
  • 删除本地文件
    lib/index.js:1019
    await rm(wallpaperPath(), { force: true });
  • 发起网络请求
    lib/index.js:1082
    res = await fetch(url, {
  • 删除本地文件
    lib/index.js:1218
    await rm(dshHomePath(DATA_DIR, ROTATION_DIR, removed.file), { force: true });
  • 读取本地文件
    lib/index.js:1308
    for (const name of await readdir(rotationDir())) if (!entries.some((x) => x.file === name)) await rm(dshHomePath(DATA_DIR, ROTATION_DIR, name), { forc
  • 删除本地文件
    lib/index.js:1308
    for (const name of await readdir(rotationDir())) if (!entries.some((x) => x.file === name)) await rm(dshHomePath(DATA_DIR, ROTATION_DIR, name), { forc
  • 发起网络请求
    lib/index.js:1380
    res = await fetch(url, {
  • 删除本地文件
    lib/index.js:1468
    if (p !== target) await rm(p, { force: true });
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-home-paths@deepseek-ai/cordis@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-sidebar-right@deepseek-ai/dsh-client-ui-theme
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

6 张 · 点击查看大图

功能亮点

  • 自定义图片视频壁纸
  • 透明度模糊度调整
  • 全局主题色调整
v0.4.22026-10-26
· v0.4.2 — 兼容 dsh-better-display 的吸顶总结栏,新增第三方表面自检与兼容开关 · 中文 · 装了 dsh-better-display 后,对话区顶部那条吸顶总结栏不再被掏空。 它的四条车道全用宿主令牌 --dsw-alias-bg-base 画底板,而这个令牌正是本插件「主界面」透明度接管的那一个、默认值还是 0:底板什么都不画,正文从总结栏底下直接透上来,两行字叠在一起读不出。现在认出该插件就把这条带子钉在 20% 底板 + 30px 磨砂,两个值都不受任何滑块调节(密度固定、颜色仍跟主题走);三条各画各的板合并成一整块,底角倒圆 14px。合并不是为了好看:三条 40px 小盒都落在模糊的边缘衰减区里,钉上滑块后水平边缘能量反而 3.04→4.52,合并后 3.61→0.70,与「同样 20% 底板 + blur(30px)」的对照块 0.73 吻合。它自带的 skin 模式(data-reader-glass,默认关)用 :not() 整条排除,不替它做设计决定。 · 开机自检会点名「谁的表面吃了本插件接管的令牌」。 第三方插件的样式表都自带 data-plugin="",启动时扫一遍这些表就能说出来:已登记的报一行说明,未登记的报 warning 并邀请把那条日志发过来加钉。检测自动,保护永远是登记过的 —— 不靠启发式去猜别人哪块表面该亮。 · 界面页底部新增「第三方插件兼容」卡片。 开关默认开;关掉时整张钉表撤下(合并后的几何、磨砂、底板一起没了),回到对方自己的画法。这份兼容不进 Profile 的外观快照 —— 换一套外观不该顺手改变另一个插件的画法。 · 顺带带上 issue #32(此前未发布过):被磨砂的侧栏列提到 z-index:1,提示条悬出侧栏右缘的那一段重新清晰;模态豁免里 z-index 与 isolation 同进同退。 更新到 v0.4.2 后请重启一次 dsh web / 桌面端:宿主的兼容检查在组装 profile 时跑,不在插件更新时跑。 · English · dsh-better-display's sticky summary bar keeps its plate. All four of its lanes paint from the host token --dsw-alias-bg-base — the one our 「主界面」 opacity slider owns, whose default is 0 — so the bar painted nothing and the conversation text collided underneath. When that plugin is detected the band is pinned at a 20% plate + 30px frost no slider can move (fixed density, the color still follows the theme), and its three separate plates merge into one box with the bottom corners rounded 14px. The merge is functional, not cosmetic: measured horizontal edge energy across the band rose 3.04→4.52 while three 40px lanes each sat inside the blur's edge-attenuation zone, and went 3.61→0.70 once merged, matching a control with the same plate plus blur(30px) (0.73). Its own opt-in skin mode (data-reader-glass) is excluded outright. · A boot self-check now names collisions. Third-party plugins tag their own stylesheets, so scanning those sheets for the tokens this plugin owns says it out loud: a registered pin logs one line, an unregistered collision logs a warning inviting that line to be reported. Detecti
v0.3.92026-10-19
· v0.3.9 — 条带墨色改为可预期(issue #30),顶栏那对滑块重新管住所有头部浮层 · 变更 · 「标题条带文字」现在是一个选项(issue #30):0.3.8 让条带墨色跟随它实际被画在什么上,修好了「白色开合按钮在亮条带上看不见」,但暗主题 + 亮壁纸 + 侧栏低透明度时,原生菜单条(应用 / 编辑)成了全屏唯一翻黑的文字。同一个场景两份反馈要的是相反的赢家,所以取舍交给用户:自动(沿用条带推导)/ 跟随主题(完全不写覆盖,回到宿主标签墨色)/ 始终白色 / 始终黑色。键已补进宿主半侧白名单,npm test 断言「落盘 → 重读」并让未知值塌回 auto。 · 就地的头部浮层会被认领了:session-log-export 的 … 菜单不带 portal,就地挂在 [data-slot="conversation.session.header.utilities"] 里,此前只靠 [role="menu"][class*="_denseList"]:not([class*="_portal"]) 这条脆弱分支才没失效。认领判据改为「portal 到 ,或头部槽位锚点的后代」;模态依旧绝不认领,输入位自己的就地列表继续归卡片组。 · 认领不再等一帧:一次性 flush 从 requestAnimationFrame 挪到微任务队列 —— 排下去的帧在窗口不绘制时根本不会跑(后台标签页、被遮挡或最小化的桌面窗口、后台 Electron 表面),于是标记永远落不下、面板一直保持「卡片」组的样子。真实 dsh web 里量过:不绘制的页面下,打开的头部菜单无限期保持未标记;改微任务后同一个菜单下一个微任务就被标记上。顺带消掉打开时那一帧的卡片样式闪动。 · 标题行的霜不再吞掉子层的模糊:backdrop-filter 压在行身上会让行同时成为层叠上下文与 backdrop root,挂在行内的就地浮层只能采到行自己画的一片平色。改走 ::before 垫层(isolation:isolate 是层叠上下文但不是 backdrop root),行保留 z-index:10,垫层需要的 position:relative 只在模糊非 0 且宿主把行留在 static 时内联写入。 · 菜单模糊滑块的 0 就是「无磨砂」:0.3.7 的门控让滑块下端成了最糊的一端(0 → 宿主的 blur(40px),1 → 1px),「把模糊关掉」根本够不到。现在令牌在每个取值上都声明、0 由 none 兜底,门控机制整体删除;各部件默认仍是 30px,全新安装不会丢宿主观感。 · 未选主题色时界面透明度滑块不再是死的:readHostOpacityTokens() 采的是 :root,而宿主把整套表面令牌声明在 design-platform.css 的 body{} 块里(自定义属性只向下继承),于是读取全空、每个 alpha 都没写出来(连帧都没清)。现在从 body 采样、按宿主代次缓存,读取时临时关掉插件自己的 body{} 令牌表,避免回采到自己写的值。 · 新增 AGENTS.md:把 46 个提交里每次真实回归反推成检查与测试手册(19 类缺陷 + 改动→必查映射 + 四条测试路径各自能证明什么)。 更新到 v0.3.9 后请重启一次 dsh web / 桌面端:宿主的兼容检查在组装 profile 时跑,不在插件更新时跑。 · English · The caption strip's ink is now the user's call (issue #30). 0.3.8 derived it from what the strip is actually painted on, which fixed the invisible white toggle but made the native menubar the only text on screen that ignored the theme direction. The two reports of one situation wanted opposite winners, so 「标题栏」 gained a 「标题条带文字」 selector: 自动 / 跟随主题 (no override emitted at all) / 始终白色 / 始终黑色, whitelisted on the host half and round-tripped by npm test. · In-place header popovers are claimed, and the claim no longer waits for a frame. T
v0.3.82026-10-17
· v0.3.8 — 「标题栏」设置能落盘了,条带不再吞点击,侧栏重新是一个面(修 issue #28 / #29,支持到 DSH 0.2.1-rc.2) · 变更 · 「标题栏」的三项设置重启后还在(issue #28、#29 第 2 条):根因在宿主半侧的白名单——normalizeConfig() 的 blurs 列表没有 headerBar,顶层有 headerOpacity 却没有 headerBarOpacity,STROKE_GROUPS 同样缺,而 writeConfig() 是「先归一化再落盘」,于是这张卡的三项在校验层就被丢掉(控制台打 ignoring unknown config field "blurs.headerBar");浏览器半侧读回时用自己的默认值回填(30px / 50%),看起来就是"保存成功、重启还原"。保存 Profile 的归一化器有同一个洞,还额外丢了 blurs.header。现在五处补齐(PartBlurs / DEFAULT_CONFIG / STROKE_GROUPS / 两个归一化器 / ProfileAppearance),并新增 npm test:用临时 $DSH_HOME 启起真实的宿主半侧,跑「写盘 → 重读 → Profile」整条往返,同时断言那条警告保持静默。 · 条带的左段不再吞点击(issue #29 第 1 条):Chromium 收集 -webkit-app-region 是按绘制序的,0.3.7 给生成的条带左段标的 drag 覆盖掉了原生标题栏菜单宿主自己挖的 no-drag 洞,于是左上那排导航点不动而拖窗口照常。这一段现在是纯绘制:pointer-events:none,完全不声明 app-region,拖拽仍由宿主的 .frame::before 承担。 · 模态蒙版现在也盖得住标题条带(issue #29 第 4 条):宿主的蒙版故意从标题栏下方起(--dsh-frame-chrome-top)以保住原生拖拽条,结果壁纸一开顶部 40px 是一条亮带。这一段既然是插件自绘,就在模态存在时用宿主自己的 --dsw-alias-bg-mask-1 自行变暗,不改变任何交互。浏览器实测:关闭 box-shadow: none → 打开 inset 蒙版 → 关闭恢复 none。 · 「只覆盖右段」是设计(issue #29 第 3 条):左侧栏正上方那一段本来就是侧栏列的表面,所以条带按宿主发布的 --dsh-windows-sidebar-width 切开——左段归「侧栏」那对滑块(同一份颜色字面量、同一份模糊镜像),右侧全部归「标题栏」;拖动或折叠侧栏时切口自己跟着走。已在两份 README 写明。 · 压在条带上的侧栏开合按钮重新看得见了:两处叠错。一是那段板子按树序排在侧栏列之后,而侧栏一开模糊就成为层叠上下文,宿主 fixed 在条带上的按钮被我们自己的板子冲淡——改为 z-index:-1 绘制(高于壁纸、低于所有控件);二是按钮墨色取自 --dsw-alias-label-secondary,插件按选定主题色把它翻白,可条带显示的是该调色板在侧栏不透明度下叠壁纸的结果——22% 压明亮壁纸时条带偏亮,白字消失。条带现在按它实际被画在什么上推导自身墨色(约 85% 以上由表面色决定,以下由壁纸明暗决定),另有折叠态变体,由宿主自己的 data-sidebar-collapsed 切换。 · 侧栏重新读作一个面(顶部与下方不再分层):--dsw-specific-sidebar-fill 是宿主以不透明发布的主题令牌,而侧栏区域里有三处各自 background:var(该令牌) 互相叠涂——AppFrame 的 .sidebarCol、其内 SidebarRoot 的 .root、工作区树那条 24px 的 .fade。不透明时看不出来,交给「侧栏」透明度滑块就不是;桌面端尤其明显:上方条带只画一次,于是条带一个浓度、下面的列另一个浓度。现在把该令牌在列的后代上声明为 transparent,让最外层的列成为唯一绘制者——这正是宿主在 macOS 上的选择(清 .root 底色、.fade 直接 display:none,理由同一条)。绑定用 CSS-Module 类名形状 [class*="_sidebarCol"],已在 0.2.0-rc.1 / 0.2.1-alpha.3 / 0.2.1-rc.2 三个安装产物核实一致。 · 插件安装对话框的「npm 源」面板保持宿主的不透明度: 被 portal 到 document.body(position:fixed; z-index:1100),底色取 --dsw-alias-
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-any-background 一个 DeepSeek Harness 外观插件:自定义主题色、背景壁纸(图片 / 视频 / 算法动态生成),以及逐表面的透明度与模糊度控制。兼容 DSH 0.2.0-rc.1 直至 0.2.1-rc.3,其上所有版本一并放行(官方右侧栏「主题」卡片等界面按宿主是否提供右侧栏注册表扩展点自动启用,缺失时静默跳过)。 截图 自定义主页 · 壁纸与主题色同时生效 主题色选择器 · PS 风格色轮 + 精确 HSL/RGB 输入 分部位透明度与模糊度 · 主背景、侧边栏、卡片、设置面板 背景编辑器 · 图片/视频壁纸支持拖动平移与滚轮缩放 动态生成背景 · 网格渐变 / Shader / 几何图案预设 动态生成背景 · 几何 低多边形模式预览 配置的导出和导入进行分享 功能特性 - PS 风格色轮 — 在色相环上选取色相,在内嵌方形中调整饱和度与明度,实时生成 30+ 个 CSS 设计令牌。 - 精确 HSL / RGB 输入 — 通过数值精确输入颜色,与色轮实时双向同步。 - 智能取色 — 一键从壁纸提取主题色:采样可见区域、量化像素、剔除灰色/近黑/近白,选出现量最大的鲜亮色。视频壁纸自动截帧参与取色。纯客户端完成。 - 吸管取色 — 在壁纸上悬停预览颜色,点击即可选为主题色。
展开完整文档(README 剩余 1 节)
dsh-any-background

一个 DeepSeek Harness 外观插件:自定义主题色、背景壁纸(图片 / 视频 / 算法动态生成),以及逐表面的透明度与模糊度控制。兼容 DSH 0.2.0-rc.1 直至 0.2.1-rc.3,其上所有版本一并放行(官方右侧栏「主题」卡片等界面按宿主是否提供右侧栏注册表扩展点自动启用,缺失时静默跳过)。

截图

自定义主页 · 壁纸与主题色同时生效

主题色选择器 · PS 风格色轮 + 精确 HSL/RGB 输入

分部位透明度与模糊度 · 主背景、侧边栏、卡片、设置面板

背景编辑器 · 图片/视频壁纸支持拖动平移与滚轮缩放

动态生成背景 · 网格渐变 / Shader / 几何图案预设

动态生成背景 · 几何 低多边形模式预览

配置的导出和导入进行分享

功能特性

- PS 风格色轮 — 在色相环上选取色相,在内嵌方形中调整饱和度与明度,实时生成 30+ 个 CSS 设计令牌。
- 精确 HSL / RGB 输入 — 通过数值精确输入颜色,与色轮实时双向同步。
- 智能取色 — 一键从壁纸提取主题色:采样可见区域、量化像素、剔除灰色/近黑/近白,选出现量最大的鲜亮色。视频壁纸自动截帧参与取色。纯客户端完成。
- 吸管取色 — 在壁纸上悬停预览颜色,点击即可选为主题色。
- 背景壁纸 — 上传任意图片作为壁纸,在视口比例的编辑器中拖动平移、滚轮缩放(触屏上单指拖动、双指捏合缩放)。
- 视频壁纸 — 上传视频作为动态壁纸:静音循环播放、刷新不丢失(落盘持久化 + HTTP 流式播放,支持 Range seek);自动截取一帧用于预览、主题色提取与位置编辑参考。
- 位置编辑器 — 图片与视频共用同一套编辑器:拖动平移、滚轮或双指缩放、一键重置;图片与视频的位置状态各自独立保存,互不覆盖。
- 布局模式 — 适应 / 填充 / 拉伸 / 平铺 / 居中五种排布,图片与视频通用;「适应」模式下编辑器提交的构图在窗口缩放、跨屏移动后保持一致。
- 动态生成背景 — 支持网格渐变、Shader、几何图案,可调节扩散范围、色彩强度并锁定种子。
- 分部位界面透明度 — 主背景、侧边栏、卡片面板(含对话框周围的选项框/菜单)、输入框与控件(发送框、Cordis 插件面板)、设置面板、对话文本框、轨迹页、右方侧边栏(或 bettersidebar)、产出物/高亮内容、顶栏选项(Agent Team 面板、后台任务列表与会话头部下拉菜单),以及标题栏(会话顶部那条标题行 + 视图页签)各自独立滑块。
- 分部位界面模糊度 — 每个界面部位可独立调整毛玻璃 backdrop-filter 模糊(0–60 px),并通过宿主的稳定选择器为发送框、Cordis 面板与弹出层提供真实背景模糊。滑块就是该表面的磨砂量,0 就是没有磨砂——包括盖掉宿主默认的 --dsw-menu-backdrop-filter: blur(40px) saturate(150%)。0.3.7 曾把 0 解释成「保留宿主自己的磨砂」,结果滑块的下端反而是最糊的一端(0 = 宿主的 40px,1 = 1px),「把模糊关掉」根本够不着;现在 0 就是 0,而各部件的默认值仍是 30px,所以全新安装照旧是磨砂的,只有明确拖到 0 才会清掉。
- 左侧栏 + 它上方的标题条带 — 桌面壳(Windows)上,「侧栏」这对滑块现在同时驱动侧栏列,以及那条压在侧栏正上方的窗口标题条带分段。宿主把整条条带画成一个全宽的盒子(.frame::before),而宿主自己就把侧栏列宽发在帧元素上(--dsh-windows-sidebar-width);插件就按这个宽度切开条带:::before 被裁到该宽度右侧(继续保留「标题栏」卡片的材质、模糊与拖拽区),新增的 ::after 用 --dsh-any-op-sidebar——也就是侧栏列本身用的那份颜色——画出左侧那段,并按侧栏模糊的根级镜像上霜。于是一对滑块管住侧栏与它上方那一条,拖动或折叠侧栏时切口跟着移动(宽度 0px 时整条条带重新归「标题栏」)。这个切分是有意的(issue #29 第 3 条):左段本就是侧栏列自己的表面,标题栏滑块不该够到它。
- 产出物 / 高亮内容 — 对话正文里的代码块(含语言顶栏)、行内 code 高亮芯片与产出物 chip 共用一支滑块:透明度只调制这些表面原本的背景色(不会在旧背景上再叠一层新色),模糊度给同一层表面加磨砂,壁纸从内容后方透出来。
- 右方侧边栏 / bettersidebar 表面 — 同一对滑块(panelOpacity / blurs.panel)按宿主环境自动切换目标:未安装 dsh-better-sidebar 时叫「右方侧边栏」,驱动官方右侧栏的表面令牌与毛玻璃模糊(范围内每个 release 均适用);安装了 dsh-better-sidebar 时改叫「bettersidebar」,接管其底部工作台面板(官方右侧栏同样生效)。该行现在始终显示。
- 顶栏选项 — 会话头部的下拉浮层获得了独立的透明度 + 模糊滑块:Agent Team 面板、后台任务列表、「用其它应用打开」与「会话日志」菜单、子代理血缘树。由于这些浮层被 portal 到 <body>(与头部 DOM 断开),且 0.1.7 把「用其它应用打开」改成 portal、把会话行菜单改成动态槽位,插件改为在运行时监听稳定的 conversation.session.header 槽位锚点来标记当前展开的浮层,不再依赖类名形状。浮层算不算头部的判据是「portal 到了 <body>,或者就在这些锚点里面」——「会话日志」的 … 菜单属于后一种(session-log-export/HeaderAction.tsx 渲染它的 Menu 时不带 portal),而在 0.3.9 之前能碰到它的只有一条按 _denseList 类名匹配的脆弱分支。
- 标题栏(会话标题行) — 会话顶部那条标题 / 操作 / 视图页签行终于有了自己的一对滑块。宿主自身不给它任何底色(中心列的底色直接透上来),所以壁纸一起来,标题与页签就直接压在图上、和周围被蒙住的表面割裂。现在它按「区块淡色」作画,配方与对话文本框那张卡一致:材质取插件主背景面的颜色、按本部件自己的透明度上色,读起来是压在列上的一条带,而不是叠上去的第二层颜色;模糊落在行前的一块 ::before 垫层上(配合 isolation:isolate——它是层叠上下文,但不是 backdrop root;0.3.8 之前霜直接压在行身上,而行一旦带上 backdrop-filter 就成了 backdrop root,恰恰把挂在行里的那些浮层的磨砂压成一片平色);而这道霜仍然把行变成层叠上下文,所以行同时带上补偿性的 z-index:10——行内挂出的浮层(直到 0.2.1-alpha.1 的后台任务列表、每个 release 上都可能就地的日程任务菜单与「会话日志」… 菜单)本来用 z-index:100,否则会被关在行里、压到对话之下。10 高于它会重叠到的列内部件(输入位 9、回到底部 8),又远低于所有页面级表面(100 / 1000 / 1100),因此打开菜单时这一条的颜色和模糊都不会变;z-index 无需 position——该行本是 flex 子项,z-index 天然生效,而垫层要用的 position:relative 只在模糊非 0、且宿主把这一行留在 static 时才以内联方式写入。详见 v0.3.7 / v0.3.9。Windows 上它驱动的条带与侧栏分段(见上一条);模态打开时条带会跟着宿主蒙版自行变暗(宿主蒙版故意停在标题区下方);生成出来的那一段只负责绘制——pointer-events:none 且不声明 app-region——因此不会吞掉本该给原生标题栏菜单的点击(issue #29)。它还画在控件之下(z-index:-1),并自带墨色(--dsh-any-caption-ink):即使侧栏透明度很低、条带发浅,开合按钮与「应用 / 编辑」菜单也清楚可读;而当条带的明暗与主题方向冲突时,由「标题条带文字」裁定谁获胜——「自动」沿用条带推导,「跟随主题」完全不写覆盖(回到宿主的标签墨色,即 0.3.7 及之前),「始终白色 / 始终黑色」直接钉死(issue #30)。这一行是运行时认领的:插件从 conversation.session.header 槽位锚点向上找到最近的那个 再打上自己的类(与卡片、帧同款做法),不猜哈希类名、也不依赖宿主把槽位摆在哪个层级;0.1.7-alpha.1 之前宿主把槽位裸挂在会话根上、没有这一行元素,那种宿主上插件什么都不会认领,部件自然无效果。桌面壳(Windows)上这一对滑块同时驱动窗口标题条带——但左侧栏正上方的那一段除外,那一段归「侧栏」这对滑块管(见下条);原生最小化/最大化/关闭那块改由取色探针报 transparent,让 Windows 不画自己的背景,露出的正是条带本身。空会话时宿主把该行标为 headerBlank(一条只留 padding 的占位),插件跳过认领。
- 侧边栏「主题」页面(双模式) — 同一套五页(色彩 / 界面 / 字体 / 背景 / 配置)注册到两处:未安装 dsh-better-sidebar 时,通过官方右侧栏的公开扩展点(sidebarRightTabs + sidebar.right.pane.tab)在官方侧边栏的引导页挂一张「主题」卡片,点开即五页;安装了 dsh-better-sidebar 时,改为在它的侧边栏注册同名页面,官方引导页上的卡片自动撤下,避免重复。两处(加设置面板共三处)共用同一套页面代码与同一份状态,改一处处处同步;外壳按面板宽度自适应,窄面板收紧内边距并回到单列。宿主没有右侧栏扩展点时静默不注册,不影响任何其它功能。
- 对话视图卡片 — 消息列表自动包裹为半透明卡片,轨迹页可整页调节透明度与模糊,让壁纸从内容后方透出来。
- 主题导出 / 导入 — 一键导出为自包含的 dsh-any-theme.json(配置 + 壁纸,视频以 data URL 内嵌,v0.4.0 起连同整个轮换池的图片字节),可随时导入还原。
- 外观预设与配置档案 — 六套一键预设(默认 / 毛玻璃 / 极简白 / 暗夜紫 / 赛博 / 暖阳),外加自定义命名档案:随时保存当前观感、随时套回,支持重命名与复制,删除有二次确认保护。
- 壁纸轮换 — 把多张图片加入轮换池(缩略图选择器),按随机或顺序、每次刷新 / 每小时 / 每天 / 每周的频率自动更换,页面开着也会按时推进(不再只在刷新时更换);切换时服务端把所选图片复制进当前壁纸槽,导出/导入与取色管线完全不用改。
- 昼夜自动切换 — 指定日间与夜间两套配置,按固定时段或跟随系统深色模式自动切换。
- 自定义字体 — 上传一个 ttf / otf / woff / woff2 字体文件(上限 100 MB),通过 @font-face 应用到整个界面的文字;可随时停用或移除。字体按原始字节流式上传并持久化到插件数据目录,代码块仍保持等宽字体。
- 分组文字描边 — 沿用界面页的分组(现为十一组,含顶栏选项与标题栏),为每个分组单独加 -webkit-text-stroke 描边:粗细 0–4 px(0 = 关闭),颜色支持自动反色 / 灰 / 黑 / 白 / 主题色 / 自定义。代码块、inline code、图标,以及宿主那类 background-clip: text 的流光文字(「深度求索中」状态行与轮次过程行)自动豁免——多色语法不会糊成一团,渐变文字也不会被描边压成一坨纯色。
- 强制界面明暗 — 无论主题色明暗如何,都能强制生成亮色/暗色整套令牌;「自动」下配色与字体方向由主题色明度驱动(深色 → 浅字,浅色 → 深字),未选主题色时按壁纸画面亮度判断。
- 文件持久化 — 所有设置保存到文件系统 ~/.dsh/.dsh-any-background-data/,不再依赖 localStorage。
- 中英双语 — 完整的中英文界面,自动跟随语言设置。
- 主题守护 — 宿主重置主题后自动重新激活自定义主题。

更新日志(只保留最近两个版本)

v0.4.2(兼容 dsh-better-display 的吸顶总结栏 · 修掉 issue #32)

- 总结栏不再被掏空。 它的底板用的是「主界面」透明度接管的那个令牌,被拉到 0 之后正文直接从总结栏底下透上来。现在认出 dsh-better-display 就把这条带子钉在 20% 底板 + 30px 磨砂(不随任何滑块调节,颜色仍跟主题走),并把原来分开的三条合并成一整块,底部两角倒圆。
- 第三方表面自检 + 兼容开关。 开机扫一遍其它插件的样式表,在控制台点名「谁的表面吃了本插件接管的令牌」:已登记的自动保护,未登记的提示把这条日志发过来就能加钉。「界面」页底部新增「第三方插件兼容」卡片,关掉后整张钉表撤下,完全不介入另一个插件的画法。
- 修掉 issue #32。 被磨砂的侧栏列提到 z-index:1,提示条悬出侧栏右缘的那一段重新清晰;模态豁免里 z-index 与 isolation 同进同退。
- 装完或更新后请重启一次宿主——兼容门禁在组装 profile 时才跑。

v0.4.1(修掉「每次刷新」档位每 30 秒自动换图)

- 只有时间档位(每小时 / 每天 / 每周)参与定时推进;「每次刷新」回到原本语义:每次页面加载换一张,外加手动「换一张」按钮。

安装

方式一:npm 安装(推荐)

已发布到 npm registry
dsh plugin --profile web add dsh-any-background

或直接安装 GitHub 仓库
dsh plugin --profile web add github:Tkingxiao/dsh-any-background

然后启动:

dsh web

插件会出现在设置面板的 “主题” 分类中。

方式二:npx(无需全局安装)

npx @deepseek-ai/dsh plugin --profile web add dsh-any-background
npx @deepseek-ai/dsh web

方式三:本地构建(开发)

lib/ 目录已提交,安装后无需构建。修改 src/ 后重新构建:

git clone https://github.com/Tkingxiao/dsh-any-background.git
cd dsh-any-background
pnpm install
pnpm run bundle
pnpm dsh plugin --profile web add "dsh-any-background"
pnpm dsh web

兼容性

- dsh web 0.2.0-rc.1 ~ 0.2.1-rc.3,其上所有版本一并放行 — engines.dsh、受门禁的 @deepseek-ai/dsh- peerDependencies 与 dsh.compatibility.dsh 先逐一列出本插件核对过的构建(0.2.0-rc.1、0.2.0-rc.2、0.2.1-alpha.1 … 0.2.1-rc.3),再以不设上界的 >=0.2.0-rc.1 收尾,让其后每一个 release 都能加载。不设上界是有意选的:宿主强制的正是这份 peer 列表——范围没写到的版本会在导入任何模块之前被整行禁用——一条写到头的范围等于在一款还能正常工作的插件前面砌墙。没见过的 release 会取最近的一份事实,并在日志里写清它离 exact 有多远;一份过期事实最坏的代价是某个滑块不再淡出宿主已经搬走的那个表面,而一道失败关闭的版本检查代价是整个插件。dsh.compatibility.dshReleases 记录哪些构建被核对过、怎么核对的:列表里的每个 release 都是按 tag 逐包比对其事实目录核实的。这道门禁也意味着安装或更新插件后仍需重启 dsh web——检查发生在 profile 组装时,而不是插件更新时——但不设上界的总括,正让已经升到更新宿主的机器不再需要先等插件发版(或手工授予精确版本豁免 dsh plugin allow-version)。宿主版本在运行时由 Node 半侧解析,依赖特定宿主版本渠道的功能(右侧栏面板模糊、官方侧栏「主题」卡片)只在对应宿主结构存在时启用,其余功能在整个范围内表现一致。0.1.5 / 0.1.6 / 0.1.7 这一档已移出兼容范围:那些事实目录断言的东西已经没有再被核对,而一张没人核对的表比没有表更糟;范围从 0.2.0-rc.1 起步,意味着更旧的宿主会在组装期被明确拒绝,而不是被一份错的适配事实悄悄改版式。
- 版本适配隔离:release 由 Node 半侧从进程自身那份 @deepseek-ai/dsh/package.json 读出(客户端上下文不暴露版本;ctx.profileContext.installAnchor 指不到时退回启动器的磁盘布局),经 read RPC 下发后只由前置适配层路由——src/host-compat/ 负责探测与渠道归类,src/client/host-compat/versions/ 下每个事实集合一个目录(v0-2-0-rc-1 / v0-2-0-rc-2 / v0-2-1 / unknown),各自描述该版本的面板力学、头部槽位键、插件页形状,以及菜单的底色与磨砂落在哪一层。目录按它覆盖的事实命名,不按版本号的形状:0.2.0-rc.1 与 0.2.0-rc.2 同属一个预发布渠道,但 rc.2 改了吸顶菜单分组标题取色的令牌,于是这条补丁行上并着两个目录,较新的那个按开启它的那个构建命名。事实没变的更新版本不新开目录,而是并入那份仍然成立的事实目录——整条 0.2.1 线(alpha.1 … rc.3)正因如此都坐在 v0-2-1 里,每个核对过的构建各占一条 SUPPORTED_RELEASES 行,判定都是 exact 而不是 line。底码只向适配层提问(引导页表面归谁、模糊挂在哪一层、菜单该重写哪些令牌),不比较版本字符串。同一补丁行内的其它构建(将来的 0.2.1-rc.4 之于核对基准 rc.3)用该行的档位;整条补丁行都不在已核对范围内才收边取最近的一档并写日志——0.2.1-rc.3 之上的每一个 release 如今就是靠这一档加载的。只有解析不到 release 时归入 unknown,回退到按 DOM 形状探测(:has() 双臂)而不是猜一个版本;适配新宿主 = 新增一个版本目录并在注册表登记。
- DSHA — DeepSeek Harness 安卓启动器(免 ROOT、免 Termux)。其包内 dsh 为 0.1.5-rc.2,自 v0.3.7 起低于本插件的兼容下界:peer 门禁会在组装期拒绝它,所以插件在那上面根本不加载,而不是拿 0.2.x 的事实去改版那个壳。

权限、副作用与边界

- 接入形态:官方 Profile Bundle——package.json 声明 dsh.bundle.patch: ./cordis.patch.yml(loader 插入层),仓库提交可直接使用的预构建运行时制品(lib/index.js、lib/client.js),无安装脚本、无 postinstall、无 native 二进制、安装时不执行任何构建。
- 文件系统:服务端仅在 <dsh 主目录>/.dsh-any-background-data/ 内读写(配置 JSON、壁纸、轮换池、视频、字体),不触碰该目录之外的任何路径;配置写入为原子写(临时文件 + rename)。这些文件落在真实磁盘上,不受 generation 恢复影响,也不会被其回滚——清除它们即彻底重置插件。
- 网络:仅在用户主动粘贴 http/https 图片或视频网址并点击「应用」时发起一次出站请求下载该资源;除此之外无遥测、无外部服务调用。
- Shell / native:无。不使用 child_process、不加载 native 模块、不运行动态下载的二进制。
- HTTP 面:仅在本机 dsh web 服务下注册 /dsh-any-background/{video,wallpaper,font}(GET/HEAD 流式服务)与对应 /upload(POST,上限 100 MB)及专用 RPC 通道 /dsh-any-background;无新增对外监听端口。
- 是否需要重启:首次安装后需(重新)启动 dsh web 加载客户端 bundle;此后的设置变更实时生效、自动落盘。更换插件版本后需重启以加载新的 lib/client.js。
- 测试与验证:pnpm run typecheck(tsc 全量类型检查)与 pnpm run bundle(tsdown 产出 lib/);无自动化单测,接口行为以手动验证为准。
- 已知限制:依赖宿主 DOM 结构的稳定标记(如 [data-sidebar-right-panel]、[data-dsh-bottom-panel])与 CSS 令牌名,宿主大版本重构样式层时选择器可能失效(表现为相关滑块不再作用于对应表面,不影响稳定性);版本相关的那部分选择器集中在对应的版本目录里,宿主改版通常只需改那一份;-webkit-text-stroke 在部分单行省略号容器边缘约有 1px 裁切。另有一条规则是对其它插件的有意让步:dsh-better-display 的吸顶车道用的正是「主界面」透明度接管的那个令牌,所以认出该插件后会把它的车道钉在 20% 底板 + 30px 磨砂上、不随滑块;它若改名,这条规则就匹配不到,车道回到它自己的画法。

Star History

许可

MIT
预览分享卡片长什么样 ↓Tkingxiao/dsh-any-background
分享 · DeepSeek Harness Hub
Tkingxiao/dsh-any-background

Deepseek Harness 自定义主题插件,支持自定义图片/视频壁纸,对话框,侧边栏等透明度模糊度调整,全局主题色的色轮调整插件

回到顶部