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

模型随动背景 HarmlessFunny/dsh-background-by-model

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

DeepSeek Harness 背景随当前模型而切换

42.5/100
综合分
23
GitHub 星标
1,918
npm 周下载
—/5
用户评分

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

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

状态速览

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

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

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

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

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

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 14:14:03

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

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 30 处,展示前 20 条)
  • 读取本地文件
    lib/index.js:761
    await access(p);
  • 删除本地文件
    lib/index.js:789
    await rm(target, { force: true });
  • 写入本地文件
    lib/index.js:790
    await rename(legacyWallpaperPath(), target);
  • 删除本地文件
    lib/index.js:796
    await rm(dshHomePath(DATA_DIR, f), { force: true });
  • 写入本地文件
    lib/index.js:829
    await mkdir(dataDir(), { recursive: true });
  • 读取本地文件
    lib/index.js:876
    const current = await readFile(target, "utf8");
  • 写入本地文件
    lib/index.js:879
    await writeFile(backupTemp, current, "utf8");
  • 写入本地文件
    lib/index.js:884
    await writeFile(temp, text, "utf8");
  • 写入本地文件
    lib/index.js:899
    await rename(from, to);
  • 删除本地文件
    lib/index.js:903
    await rm(to, { force: true });
  • 写入本地文件
    lib/index.js:904
    await rename(from, to);
  • 读取本地文件
    lib/index.js:920
    const text = await readFile(configPath(), "utf8");
  • 读取本地文件
    lib/index.js:927
    const text = await readFile(configBackupPath(), "utf8");
  • 读取本地文件
    lib/index.js:984
    live = await readFile(configPath(), "utf8");
  • 读取本地文件
    lib/index.js:994
    backup = await readFile(configBackupPath(), "utf8");
  • 发起网络请求
    lib/index.js:1198
    const res = await fetch(url, {
  • 删除本地文件
    lib/index.js:1359
    await rm(dshHomePath(DATA_DIR, HOLIDAY_CACHE_DIR, entry), {
  • 删除本地文件
    lib/index.js:1384
    await rm(imagePath(slot), { force: true });
  • 删除本地文件
    lib/index.js:1428
    await rm(path, { force: true });
  • 发起网络请求
    lib/index.js:1576
    res = await fetch(url, {
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 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-theme@deepseek-ai/dsh-invariants
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

3 张 · 点击查看大图

功能亮点

  • 背景随模型切换
v0.11.02026-11-01
下载源换成 B 站图床:推荐配置的七张壁纸与中秋、国庆两张节日画全部改从 i0/i1/i2.hdslb.com 取,三个边缘互为回落。 推荐配置的七条模型规则与那套界面数值改为随插件内置,按钮只下载七张图 —— 不再依赖 GitHub 能通,也不再存在"远端配置比插件新"这种要拦的情况。 地址带 @3840w.webp:上传的原图是 2.4–12 MB 的 PNG(九张合计 76 MB),这样取才是 250–365 KB 的 4K WebP,与现有数据目录里那几份字节逐字节相同。 BFS 路径是上传内容的哈希,所以壁纸地址天然不可变,不像 git tag 那样能被重新指向别的字节。 节日画的缓存目录改成按内容哈希分代(holiday-cache//):换图就换目录、必然重下,旧的 tag 目录在新图落盘后由同一次清扫带走。 请求清单变成编译期常量表,preset.json、schema 版本闸与"不是配置"这类错误码一起退休。 The download source moves to Bilibili's image CDN: the recommended profile's seven wallpapers and both holiday pictures now come from i0/i1/i2.hdslb.com, three edges falling back to each other. The recommended profile's seven model rules and their interface numbers now ship inside the plugin, and the button downloads only the seven pictures — no GitHub reachability, and no "the remote profile is newer than this build" case left to refuse. The addresses carry @3840w.webp: the uploads are 2.4–12 MB PNGs (76 MB for the set), and that suffix is what serves the 250–365 KB 4K WebPs an existing data directory already holds, byte for byte. A BFS path is a hash of the upload, so a wallpaper URL is immutable in a way a git tag is not. The festival cache is keyed by content hash (holiday-cache//): new art means a new directory and a guaranteed re-download, and the old tag directories are taken by the same sweep. The request set is a compile-time constant table; preset.json, the schema gate and the "not a profile" error codes retire with it. 完整说明 / full notes: CHANGELOG.zh.md · CHANGELOG.md dsh plugin --profile web add dsh-background-by-model
v0.10.02026-10-25
0.10.0 让配置写得安全、让三个画笔效果跟着图片走。配置改成原子写并留一份 .bak,主文件坏了从备份恢复;透明度、亮度与模糊从「每条规则」下沉到「每张图」。顺手修掉两个看得见的老问题:模糊会在视口四周画一圈黑边,以及三个数值不同的图之间切换没有过渡。 0.10.0 makes the config safe to write and moves the three paint effects onto the image. Saves are atomic with a .bak, and a corrupt live file is restored from it; opacity, brightness and blur now live on each image rather than on the rule. Two visible bugs went with it: a blurred wallpaper painted a dark rim around the viewport, and a switch between two different values had no transition. · 配置改成原子写,并留一份 .bak —— 保存先写临时文件再改名覆盖,覆盖前把当前能解析的那份留成备份。 · 主文件读不出来时从备份恢复,而不是当新装 —— 两份都读不出时才是出厂默认。 · resetStore 连 .bak 一起删 —— 留着它,下一次读取会把被替换掉的配置恢复回来。 · 透明度、亮度与模糊改成逐图保存 —— 与布局模式、取景、主题色同一层。 · SCHEMA_VERSION 升到 10 —— 字段搬了位置,旧宿主会静默丢掉它们。 · 模糊的壁纸不再在视口四周画一圈黑边 —— 图层盒子向屏幕外各扩 2σ 再由容器裁掉,取景位置补回同样的距离。 · 数值不同的两张图之间切换又会有过渡了 —— 每个图层记住自己那张图的滤镜,壁纸透明度也跟着过渡走。 · 拖动滑块不再每帧整块重绘 —— 拖动只写那个字段自己的属性,松手才走一次完整重绘。 · The config is written atomically, with a .bak — a save writes a temp file and renames it over the live one, keeping the last parseable copy. · A live file that will not parse is restored from the backup, not treated as a fresh install; only when neither parses does the factory default answer. · resetStore removes the .bak — leaving it behind would restore the very config the reset replaced. · Opacity, brightness and blur are saved per image, the same layer as the layout mode, the framing and the theme colour. · SCHEMA_VERSION is 10 — the fields moved, and an older host would drop them in silence. · A blurred wallpaper no longer paints a dark rim — each layer's box is grown 2σ past the viewport and clipped, with the framing moved back by the same amount. · A switch between two different values animates again — each layer keeps its own picture's filter, and the wallpaper's opacity rides the transition too. · Dragging a slider no longer repaints everything per frame — a frame writes only that field's property, and one full repaint lands when the gesture ends. 完整说明 / full notes
v0.9.02026-10-18
0.9.0 主要是一次内部重整:RPC 通道回到 webServer 上的 prefix 路由(这一代宿主的 connection.rpc.handle 在插件侧用不了),四个定时器并成一个调度器,浏览器半边拆成模块。对外能看见的只有两处:导出的主题又能下载了,深色标记交还宿主。 0.9.0 is mostly internal: the RPC channel is a prefix route on webServer again (this host generation's connection.rpc.handle is unusable from a plugin), four timers became one scheduler, and the browser entry point split into modules. Two changes are visible: exported themes download again, and the dark-mode flag belongs to the host again. · RPC 通道是 webServer 上的 prefix 路由 —— connection.rpc.handle 经 connection 服务自己的上下文注册,那里解析不到 webServer,条目根本不会激活;鉴权围墙不变,每个请求仍询问 requestRejection。 · 导出的主题又能下载了 —— object URL 改为下一个任务释放,在同一 tick 里撤销会被部分浏览器当成取消。 · 所有周期性检查共用一条调度器 —— 模型轮询、主题看守、节日换日与两次延迟恢复,标签页隐藏时暂停,一个 dispose 全停。 · 浏览器半边重新拆成模块,index.tsx 只剩接线;check:watchdogs 钉住这条调度器。 · 旧 schema 的推荐配置又能导入了 —— 素材库声明的版本落后于本构建时,缺的字段取默认值,按钮不再误报网络问题。 · 深色标记交还宿主 —— 宿主自己切到深色后不会再被推回浅色。 · The RPC channel is a prefix route on webServer — connection.rpc.handle registers through the connection service's own context, which cannot resolve webServer, so the entry never activates. The fence is unchanged: requestRejection is asked per request. · Exported themes download again — the object URL is released on the next task, because same-tick revocation reads as a cancellation to some browsers. · One scheduler for every recurring check — model poll, theme watchdog, holiday rollover and the two delayed restores; paused while the tab is hidden and stopped by one dispose. · The browser entry point is modules again, with index.tsx as wiring; check:watchdogs pins the scheduler. · A recommended profile written for an older schema imports again — missing fields take defaults, so the button no longer reports a network problem while the asset host lags this build. · The dark-mode flag belongs to the host again — a host that went dark on its own is no longer pushed back to light. 完整说明 / full notes: CHANGELOG.zh.md · CHANGELOG.md dsh plugin --profile web add dsh-background-by-model
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-background-by-model 派生自 Tkingxiao/dsh-any-background,并重命名为 dsh-background-by-model。 一个 DeepSeek Harness 外观插件,核心是一份有序的模型规则列表:每条规则自带壁纸(可多张),每张图各有自己的布局模式、取景、主题色,以及透明度、亮度与模糊度。切换模型即切换背景,切换过程走你在「配置」页选定的全局切换效果。 v0.3.0 是破坏性更新 —— 视频背景、生成式背景与全局主题色均已被移除。详见 CHANGELOG.zh.md 的 v0.3.0 条目。 模型规则如何工作 一条规则 = 一个匹配串 + 一整套背景外观。切换模型时,插件读取当前会话的模型名,自上而下扫描列表,使用第一条「匹配串出现在模型名里」的规则(忽略大小写)—— 都没命中时用第 1 条兜底。
展开完整文档(README 剩余 1 节)
dsh-background-by-model

派生自 Tkingxiao/dsh-any-background,并重命名为 dsh-background-by-model。

一个 DeepSeek Harness 外观插件,核心是一份有序的模型规则列表:每条规则自带壁纸(可多张),每张图各有自己的布局模式、取景、主题色,以及透明度、亮度与模糊度。切换模型即切换背景,切换过程走你在「配置」页选定的全局切换效果。

v0.3.0 是破坏性更新 —— 视频背景、生成式背景与全局主题色均已被移除。详见 CHANGELOG.zh.md 的 v0.3.0 条目。

模型规则如何工作

一条规则 = 一个匹配串 + 一整套背景外观。切换模型时,插件读取当前会话的模型名,自上而下扫描列表,使用第一条「匹配串出现在模型名里」的规则(忽略大小写)—— 都没命中时用第 1 条兜底。

示例列表:

| # | 匹配串 | 背景图 |
| 1 | deepseek | 图 1 |
| 2 | flash | 图 2 |
| 3 | glm | 图 3 |

| 当前模型 | 结果 | 原因 |
| DeepSeek-Flash | 规则 1 → 图 1 | deepseek 先命中 |
| GLM-Flash | 规则 2 → 图 2 | flash 比 glm 更靠前 |
| Qwen-Flash | 规则 2 → 图 2 | flash 命中 |
| GLM-Turbo | 规则 3 → 图 3 | 只有 glm 命中 |
| Kimi-K3 | 兜底 → 规则 1 → 图 1 | 都没有命中 |

- 顺序即优先级 —— 先命中者胜,而不是最精确者胜;需要时拖动规则调整顺序。
- 匹配串留空表示该规则不参与匹配、只作兜底,所以「单规则 + 空匹配串」就是一张图到处用。
- 匹配串会同时比对 provider、模型 id 与模型显示名拼接出的字符串,三者任一都能用来选中规则。
- 当前模型取自本会话的持久化模型选择(输入框上模型选择器读的同一个 modelSelection 投影),所以会话内切换模型会立即生效;页面会显示读到的是哪个模型,只读到宿主全局默认时额外标注宿主默认。

上面的示例表里没有 kimi,所以切到 Kimi 会走到兜底 = 规则 1 = 图 1,看起来像「没反应」—— 想给 Kimi 单独配图就加一条匹配串为 kimi 的规则。

截图

同一套界面、同一份配置,只因为当前模型不同:

DeepSeek V4.1 Flash · 命中匹配串含 deepseek 的规则:浅色壁纸 + 与图相配的主题色

Kimi K2.7 Code · 命中匹配串含 kimi 的规则:深色壁纸 + 深色主题,整个界面跟着换肤

「模型背景」页的单条规则 · 布局模式、取景、主题色与透明度/亮度/模糊,全都属于它正在编辑的那张图

示例壁纸素材来源于 bilibili ZipZipPipe

功能特性

模型规则

一份有序的规则列表,按当前模型名先命中者胜,第 1 条兼任兜底。

- 规则 —— 增删、排序、命名;每条自带一个匹配串,以及一组图片与它们各自的外观。
- 每条规则多张图 —— 胶片条可用文件选择、拖放或一行一个网址填入;可排序、设为第一张、或原地替换(替换会保住它在轮换里的位置)。规则也可以一张图都没有,而只要它还有自己的主题色,空规则依旧参与匹配,所以「清空」是一个看得见的状态,而不是一个陷阱。
- 实时匹配状态 —— 「模型背景」页会显示读到的是哪个模型、落在哪条规则上。
- 导入 / 导出 —— 整套规则导出为 dsh-background-by-model-theme.json,图片全部内联;旧版本写出的文件仍可导入。
- 存在磁盘上,不在 localStorage —— 一切都在 ~/.dsh/.dsh-background-by-model-data/ 下,旧的单图配置在第一次读取时就地迁移。
- 中英双语,自动识别语言环境;宿主重置主题时由守护逻辑重新施加。

多图轮换

按规则开启,默认关闭 —— 轮换真的要花流量、内存和电,所以没有东西会替你打开它。

- 停留时长 —— 10 秒 / 30 秒 / 1 分钟 / 5 分钟 / 30 分钟,或任意自定义秒数(5 秒 – 24 小时)。
- 顺序 —— 按顺序走完列表后环绕;随机在除当前这张之外的所有图片中等概率挑选,所以不会出现「像没触发」的一跳。
- 切换模型时也换一张 —— 第二种触发,完全不排定时器。
- 下一张 —— 随时手动换图,与定时器在不在跑无关。
- 只有生效的那条规则在轮换,全插件只有一个定时器;标签页隐藏时轮换跟着画面一起停。

切换效果(全局)

壁纸切换时的样子 —— 「配置」页上的一个设置,所有规则共用,覆盖切模型、轮换一步、手动下一张与节日接管。

- 四种效果 —— 淡入淡出(默认)、直接切换、缩放淡入、平移推入;后两种只对进来的那一层做 transform,所以一个字节的额外传输都不花。
- 缓动与同一个时长 —— 标准 / 线性 / ease-out / ease-in-out,以及 0–3000 ms,其中 0 是硬切而不是「没设置」。它取代了 rotate.fadeMs 这个没有任何控件能到达的逐规则字段,手调过的值会在第一次读取时折算进来。
- 「减少动态效果」是否决,而不是把动画缩短。
- 界面配色和壁纸走同一个时钟 —— 只有浅↔深互切立即切换,因为两套调色板之间插值会走过两个方向都读不清的中间调。
- 预览色块会重放这个效果,因为壁纸淡入它自己是什么都看不见的。

节日特殊背景

「配置」页上一个开关,别的什么都没有:中秋与国庆当天壁纸换成该节日自己的画与固定主题色,第二天早上换回来。它出厂是关的,推荐配置会替你打开。

- 中秋是农历八月十五,按北京时间从中国农历解析,所以每年都动(2024-09-17、2025-10-06、2026-09-25 …);国庆是 10 月 1–7 日;两者撞上时中秋优先。
- 没有图的节日会顺延给模型规则,而不是把背景刷白。
- 画是下载的,不随包发布 —— 每个节日一张压缩后的壁纸,钉在项目 assets 仓库的一个发行 tag 上,当天第一次读取时缓存到 holiday-cache/<tag>/。下载由日历把关,所以平常的日子一个字节都不取,此后的每一次启动都直接读盘。
- 画和它的配色都不可以换 —— 节日槽位只读,颜色与满幅的「填充」都取自定义,主题导出也只带你的规则。

每条规则与每张图各自的设置

- 壁纸 —— 每条规则一张或多张图;不轮换时规则画的是第一张。
- 主题色 —— HSL 色轮、数值输入、从本图提取与吸管。它属于图片,没有自己颜色的图跟随系统主题,而不是继承规则色。
- 布局模式 —— 适应 / 填充 / 拉伸 / 平铺 / 居中,逐图保存;规则没有图片时这排是禁用而不是隐藏。
- 取景 —— 拖动平移、滚轮缩放,只在适应模式下可编辑,逐图保存,窗口缩放后保持一致。
- 图片透明度 0–100%、图片亮度 0–200%(100% 即原图)与图片模糊 0–60 px,三者都逐图保存,并通过同一条滑块 + 旁边的下拉框切换调节项 —— 一张亮图和一张夜景图因此在同一组轮换里各有各的曝光。它们只作用于图片层;「界面」页的透明度作用于界面各区域。没有任何图片的规则这三项是禁用而不是隐藏。

全局设置(「界面」页)

- 每个界面部件各自的透明度 —— 主背景、左侧栏、右侧栏、卡片与菜单、输入框与控件、设置面板、对话文本框、轨迹页与每一个插件页,各有一条滑块。
- 新装出来就已经是作者本人那套外观,所以第一次运行不需要下载任何东西。
- 与主题色无关 —— 规则没有主题色时,这些滑块全部照常可用。

推荐配置

「配置」页点一下就下载作者本人的整套配置 —— 规则、壁纸与界面设置 —— 来自项目的 assets 仓库。

- 托管在数据目录自己的形状里(preset/preset.json、preset/theme-config.json,每张壁纸一个 modelbg- 文件),所以它能在 GitHub 上直接编辑,发布它就是一次 cp。
- 里面每一个界面数字都是插件本来就用着的值,所以在新装上是「加上规则和图片」;而在你已经调过的数据目录上,它把这些也一起重置 —— 它是一整份配置,不是一个补丁。
- 先下载、后提问,所以确认框能如实说出手里有什么 —— 而清空在下载之后,绝不在之前。它是面板里唯一一张会先问再删的卡片。
- 少一张壁纸就整体失败并报出是哪个槽位,而且每个文件各自重试,已经下到的部分留给下一次。

图片存储清理

「配置」页最后一张卡片:图片是按原图保存的,所以一次被中断的上传、一次失败的文件删除,或一次整套配置的替换,都可能在磁盘上留下不再被任何规则引用的文件 —— 而这台机器上「孤儿」正常是 0。卡片把用量读出来,点清理就直接删。

- 先读、后删 —— 卡片先显示「可清理多少 MB / 几个文件」,再给出清理按钮;先删再报数的操作没人会同意。数字只描述这一按会释放什么:显示「正在使用 2.1 MB」是在回答一个没人问的问题,而显示「8 个文件」会让人以为八张全要删掉。
- 只删没人引用的 —— 当前规则用到的图一个字节都不动,配置本身也不写。清理完会重新读一次,而不是用减法算,所以删除失败的文件仍然算在里面。
- 失败会点名 —— 一个文件删不掉不会让其余六个留下来,但也不会被说成「已清理」:提示里会列出是哪几个。
- 不问确认 —— 要删的东西按定义没有任何规则引用,而且不是从一个能用的集合里挑出来的,所以「确认」在这里只教人不看就点。安全性放在前置判断上:配置读不出来时按钮是灰的(见下一条),而不是先把七个文件列出来再问一遍。
- 坏掉的主文件由备份作答 —— 主配置读不出来、而 .bak 能解析时,清理按备份里的规则走:那正是你马上会拿回的配置。两份都读不出来才是「读不到」,按钮这时候才是灰的。
- 顺手清掉误入槽位的节日文件 —— modelbg-h-* 不属于任何配置(节日画在 holiday-cache/ 里,那个槽位只读),所以它是唯一一个只有这条路径能清掉的残留。
- 宿主是旧版时显示「读不到」而不是「0 B」 —— 两种「没有」必须长得不一样。

设置界面

设置的「主题」分类下现在有三个选项卡:

| 选项卡 | 作用范围 | 内容 |
| 界面 | 全局,所有模型共用 | 主背景、左侧栏、右侧栏、卡片面板、输入框与控件、设置面板、对话文本框、轨迹页与每一个插件页的透明度 |
| 模型背景 | 每条规则、每张图片 | 有序规则列表、实时匹配状态,以及每条规则的图片(胶片条)、逐图布局模式 / 取景 / 主题色,加上规则自己的透明度、亮度、模糊度与多图轮换 |
| 配置 | — | 全局切换效果、整套规则的进出 —— 推荐配置与导入 / 导出(dsh-background-by-model-theme.json)—— 外加节日特殊背景那一个开关,以及图片存储清理 |

原先的「色彩」选项卡已删除 —— 主题色改为规则与图片各自的属性 —— 原「背景」选项卡改造成「模型背景」。

存储位置

数据目录:~/.dsh/.dsh-background-by-model-data/(Windows:C:\Users\<你>\.dsh\.dsh-background-by-model-data\)

| 文件 | 内容 |
| theme-config.json | 规则列表(每条规则含图片列表,每张图含自己的外观与轮换设置)+ 全局「界面」设置 + 全局切换效果 + 节日覆盖配置 |
| theme-config.json.bak | 上一份写成功时的配置。每次保存都是「先写临时文件、再改名覆盖」,并在覆盖前把当前这份合格的文件留成 .bak;主文件读不出来时就从这里恢复,而不是退回出厂默认。读不出且没有备份时,清理卡会拒绝删图 |
| modelbg- | 一张图片,保存为原始字节、无扩展名 —— 一张图一个文件,所以一条有三张图的规则占三个槽位 |
| holiday-cache/<tag>/<asset> | 从 CDN 下载的节日画,一个节日一个文件(mid-autumn.webp、national-day.webp),装在一个以插件所钉的 assets 发行版命名的目录里(v0.1.0)。tag 进了路径,所以钉了新 tag 的构建从一个空目录开始,而不是被告知上一代的字节就是答案;目录里的文件名仍然是素材名,刻意放在槽位命名空间之外,这正是节日槽位只读的原因。被取代的旧代会在新图落盘之后被清掉。删掉这里的文件也没关系,下次那个节日生效时会重新下载 |

安装

方式一:npm 安装(推荐)

dsh plugin --profile web add dsh-background-by-model

只有这一个来源 —— github: 装法拉到的树里没有 lib/,也没有任何东西会去构建它。

装完需要重启 dsh web。

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

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

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

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

lib/ 不在仓库里 —— 它由 src/ 构建而来:打包 tarball 时由 prepack 钩子构建,工作副本则由你自己构建。先 clone、安装,再构建:

git clone https://github.com/HarmlessFunny/dsh-background-by-model.git
cd dsh-background-by-model
pnpm install
pnpm test # 构建 lib/、类型检查、跑十三道检查

pnpm run bundle 只重建 lib/。两者都必须在插件能加载之前先跑一次:新 clone 出来没有 lib/。

想在 profile 里挂载一份工作副本,就把它加进 profile 的 package.json 并注册这个 bundle:

{
"dependencies": {
"dsh-background-by-model": "link:E:/DeepSeek/dsh-background-by-model"
},
"dsh": {
"profile": {
"bundles": ["dsh-background-by-model"]
}
}
}

改完 src/ 必须重新执行 pnpm run bundle 才会生效 —— 挂载的 profile 加载的是 lib/。

pnpm test 会构建、类型检查并跑十三道校验,十三道都不需要依赖、不需要转译器、也不需要浏览器。也可以单独跑:pnpm check:holiday / pnpm check:rotation / pnpm check:transition / pnpm check:repaint / pnpm check:code-plate / pnpm check:image-mode / pnpm check:rules / pnpm check:preset / pnpm check:ui / pnpm check:watchdogs / pnpm check:scheme / pnpm check:store / pnpm check:node:

- check:holiday —— 两个节日窗口、北京时间的跨日边界、1900–2100 年间的闰八月,以及 pickHoliday 的四道闸门。
- check:rotation —— nextIndex / isRotating:不走越界、随机不重复当前这张、没有可轮换的东西时绝不报「正在轮换」。
- check:transition —— resolveFadeMs / transitionPlan:出厂默认仍然产出与旧版本逐字节相同的过渡串、每一条硬切路径都确实是硬切、「减少动态效果」是否决而非缩短,以及每种效果结束时都完全可见且没有残留缩放。
- check:repaint —— shouldRepaint,包括那条制造赢家的编辑,以及任何一条写入路径不再询问、或轮换步骤不再重发界面调色板时报错。
- check:code-plate —— 代码块底板:token 在 :root 与 body 上都有声明、浅色分支发出 banner、两块表面各读自己的插件变量。
- check:image-mode —— 布局模式与三个壁纸效果放到图片上的那次抬升,以及某个控件编辑的是哪张图、渲染层读的又是哪张图。
- check:rules —— 选项卡背后那两个住在 src/client/rules-view.ts 的判定,以及布局所依赖的页面结构。
- check:preset —— 推荐配置的重试策略与失败那一次给下一次留下什么,并验证两侧真的在用它们。
- check:ui —— 两本字典键集一致、每个 dab-… 类都有样式、没有死键,以及每个 var(--dsw-…) 都是已安装主题发布过的 token。
- check:watchdogs —— 一条心跳、按各自到期时间触发、隐藏即暂停、dispose 不留定时器,且入口之外没有模块自己起 interval。
- check:scheme —— data-ds-dark-theme 的交接:插件只改自己写的那个值、清掉 token 时一起交还标记、方案变了会重绘。
- check:store —— 存储清理的两个判定:referencedSlots 与 orphanSlots。钉住「正在用的图不会被当成孤儿」与「节日槽位的文件必须可清」,外加浏览器半边传的是规则槽位而不是整份配置。
- check:node —— 把构建好的 node 半边通过真实的 RPC 处理器跑一遍(DSH_HOME 指向临时目录、fetch 换成桩):节日配置块、节日画的缓存与清理、镜像回落、逐图颜色与逐图效果的抬升、全局切换效果、配置的原子写与备份/恢复、图片存储的用量报告与清理,以及推荐配置的整条链路。

常见问题

所有模型看起来都一样,为什么? 多半是第 1 条规则的匹配串是空的,它成了纯兜底、把整个列表兜住了。给它填一个匹配串,或把更具体的规则加到它上面。

GLM-Flash 命中了不是我想用的规则。 匹配是先命中者胜,而不是最精确者胜:把更具体的规则往上拖,或调整顺序。

图片存在哪? 在 ~/.dsh/.dsh-background-by-model-data/:每张图一个 modelbg- 文件,外加 theme-config.json 与它的 .bak 备份。

theme-config.json.bak 是什么?可以删吗? 是上一份成功保存的配置。每次保存都先写临时文件再改名覆盖,覆盖前把当时那份能解析的文件留成备份,所以主文件哪天读不出来(断电、崩溃、手滑编辑),插件会从备份恢复而不是退回出厂默认。可以删,代价是下次真的坏掉时就没有可恢复的那一份。

我开了轮换,背景却一直没变。 有三件事会拦住它:规则至少要有两张图;标签页必须可见;只有当前模型解析出的那条规则在轮换。

轮换有代价吗? 有,所以默认关闭:每张图都按原始保真度保存,每次换图还会重画整个界面。一组控制在两到五张最合适 —— 启动时只读每条规则的第一张,所以代价落在内存和磁盘上,而不是启动时间上。

删掉规则里的图片之后,主题色为什么不起作用了? 这是已经修掉的旧行为:现在只要规则有图、或者有自己的主题色就仍然生效,照旧匹配、照旧当兜底,只是不铺壁纸、只给界面配色。

我更新了插件,面板说我的改动没有保存。 浏览器半边和宿主半边是分开加载的,所以刷新后的新客户端可能正对着仍在跑上一个 node 半边的 DSH 进程,而它读不懂新的配置格式。在你重启 DSH 之前,客户端会扣住所有写入。

我给一张图设了颜色,其它图片却没跟着变。 这是设计如此:从 0.7.1 起主题色属于图片,所以一组图可以依次是不同调性。唯一例外是一张图都没有的规则,那时控件编辑的是规则自己的主题色。

更新之前我设的主题色去哪了? 哪儿也没去:在「逐图主题色」之前写下的图片条目根本没有 color 键,而这正是加载时区分「从来没有自己的颜色」和「被主动清空过」的依据 —— 前者会把规则色抬升到每一张这样的图上。

能分享整套配置吗? 可以,在「配置」页导出即可;导出的 JSON 会把每条规则的图片内联进去。

支持视频或生成式背景吗? 不支持。两者都在 0.3.0 中移除,每条规则使用一张静态图片。

把主题色切回「系统主题」后,界面和设置弹窗为什么不是一套配色? 这是已经修掉的一个 bug:现在所有表面由同一个调色板来源驱动,清空主题色时会读回宿主自己的令牌、套上你的透明度重发。

为什么「自定义颜色」点下去就有颜色了? 因为按下它就等于离开「跟随系统主题」,必须给出一个起始色 —— 它先跑一次「从本图提取」,取不到鲜明颜色时才退回默认色。

切回「系统主题」后一开始还是浅色,拖一下滑块才变深,为什么? 同一个 bug 的另一半,也已经修掉:插件在持有主题色时会强改 body[data-ds-dark-theme],而宿主只在主题快照变化时才重写这个标记。现在切换时同步交还标记,每秒的守护定时器也会重读一次宿主调色板。

我换了新的切换效果,壁纸还是直接跳过去。 效果是「直接切换」,或者时长是 0 —— 效果和时长是同一个硬切的两种说法,而效果优先。不在插件里的第三种:系统开了「减少动态效果」时完全不做动画。

近期优化

这里只列最近两个版本;更早的版本见 CHANGELOG.zh.md。

v0.10.0

- 配置改成原子写,并留一份 .bak —— 保存先写临时文件再改名覆盖,覆盖前把当前能解析的那份留成备份;主文件坏了就从备份恢复,而不是退回出厂默认、再被你下一次拖动覆盖掉。
- 透明度、亮度与模糊改成逐图保存 —— 与布局模式、取景、主题色同一层;schema-9 的规则级三个值读取时抬到每张图上,升级不改屏幕。
- SCHEMA_VERSION 升到 10 —— 字段搬了位置,旧宿主会静默丢掉它们,所以必须让浏览器半边知道。
- 模糊的壁纸不再在视口四周画一圈黑边 —— 图层盒子向屏幕外各扩 2σ 再裁掉,取景位置补回同样的距离,模糊因此取样到屏幕之外,边缘不再透出背后页面的颜色。
- 透明度、亮度或模糊不同的两张图之间切换现在有动画了 —— 每个图层记住自己那张图的滤镜,壁纸透明度也跟着过渡走,不再直接切。
- 拖动这三个滑块不再每帧整块重绘 —— 拖动只写那个字段自己的属性,松手才走一次完整重绘。

v0.9.2

- 「配置」页多了一张「图片存储」卡片 —— 先报出可清理多少、涉及几个文件,再给你一个清理按钮;只删没有规则引用的文件,配置与节日画都不动,删不掉的文件会点名。
- check:store,于是现在十三道校验 —— 两份 README 此前一直写着「十道」,check:watchdogs 与 check:scheme 从 v0.8.1 起就没列进去,这次一并补上。

Star History

许可

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

DeepSeek Harness 背景随当前模型而切换

这是你的仓库?认领条目

回到顶部