用一份预设文件同时更换界面配色与背景壁纸
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/6 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add qin839/dsh-visual-system该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · vision
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 29 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 14 处,展示前 8 条)
- 读取本地文件index.js:52
if (!existsSync(presetsDir)) return []; - 读取本地文件index.js:54
for (const entry of readdirSync(presetsDir, { withFileTypes: true })) { - 读取本地文件index.js:58
if (!existsSync(manifest)) continue; - 读取本地文件index.js:60
out.push({ dir, preset: JSON.parse(readFileSync(manifest, 'utf8')) }); - 读取本地文件index.js:72
active = JSON.parse(readFileSync(configPath, 'utf8')).active; - 读取本地文件index.js:147
return existsSync(preset.assetPath) && statSync(preset.assetPath).isFile() - 写入本地文件index.js:357
writeFileSync(configPath, `${JSON.stringify({ active: body.active }, null, 2)}\n`); - 发起网络请求lib/client.js:84
const response = await fetch(`${ROUTE}/state`, { headers: { accept: 'application/json' } });
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 预设文件切换配色
- 同步更换背景壁纸
壁纸驱动的视觉系统,用于 DeepSeek Harness Web GUI——一个 preset.json 就能换掉整套配色和背景。
README
由 DeepSeek 最新模型翻译生成dsh-visual-system
壁纸驱动视觉系统 —— 给 DeepSeek Harness 的 Web GUI 与桌面端用。
一份 preset.json(十来个颜色锚点 + 一个媒体文件)就能换一整套配色和背景,支持静态图、 视频和 CSS 微动,并自带一个网页版切换器。
A wallpaper-driven visual system for the DeepSeek Harness Web GUI and the desktop app:
one preset file swaps the entire colour system and the background, with image/video media,
subtle CSS motion, and a built-in switcher page.
主界面:demo 预设(深色)
切换页
⚠️ 素材说明(先读这个)本仓库只包含代码、预设定义,以及一张自绘的演示壁纸(presets/demo/)。
presets//assets/ 下的第三方素材——Steam 创意工坊场景封面、系统壁纸等——不入库,版权不属于本项目,也不在 MIT 许可证覆盖范围内。
展开完整文档(README 剩余 1 节)
dsh-visual-system
壁纸驱动视觉系统 —— 给 DeepSeek Harness 的 Web GUI 与桌面端用。
一份 preset.json(十来个颜色锚点 + 一个媒体文件)就能换一整套配色和背景,支持静态图、 视频和 CSS 微动,并自带一个网页版切换器。
A wallpaper-driven visual system for the DeepSeek Harness Web GUI and the desktop app:
one preset file swaps the entire colour system and the background, with image/video media,
subtle CSS motion, and a built-in switcher page.
主界面:demo 预设(深色)
切换页
⚠️ 素材说明(先读这个)本仓库只包含代码、预设定义,以及一张自绘的演示壁纸(presets/demo/)。
presets//assets/ 下的第三方素材——Steam 创意工坊场景封面、系统壁纸等——不入库,版权不属于本项目,也不在 MIT 许可证覆盖范围内。
仓库里的 executioner / emblem / desktop / legion 只保留 preset.json 定义(颜色锚点与取景参数),运行需要你自己放入素材。
Third-party artwork is deliberately not shipped. Only code, preset definitions and one
original demo wallpaper are included.*
支持范围
| 运行环境 | 插件加载 | 主题 + 壁纸 |
| Web profile(dsh web) | ✅ | ✅ 已验证 |
| 桌面端(Electron,desktop profile) | ✅ | ✅ 已验证 |
两端都靠同一份客户端实现(lib/client.js)落地,原因见下。
为什么需要客户端半边(一段踩坑记录)
最早的实现只做宿主侧:用 webserver/index-inject 往宿主渲染的 index.html 里塞 和 body 片段。这在 web 端没问题,但桌面端完全不生效——桌面端窗口加载的是打包页面(dsh-app://app/),它只消费注入表里的「全局变量」那类条目(桌面端自己用它注入 __DSH_CONNECTION_RECOVERY__、启动注入、快捷键配置),不吃 style / html 行。当时用一个「配色改成品红」的探针预设做过对照实验确认:窗口重载后毫无变化。
修法是把「应用主题」搬到客户端插件里(渲染进程直接操作 DOM),宿主只负责算和发:
宿主半边 index.js 客户端半边 lib/client.js ├─ 生成完整 --dsw-* CSS ├─ GET /dsh-visual/state(拿 CSS + 素材地址) ├─ /dsh-visual/asset/** ├─ 往 贴 ├─ /dsh-visual/state ├─ 往 <body> 首个位置插 #dsh-visual-media └─ /dsh-visual/ 切换页 └─ 每 4 秒轮询一次,切预设即时生效
桌面端的验证方式同样是探针预设:把配色改成品红后不重启、不重载,界面在几秒内变红(客户端轮询拿到新状态),撤掉探针又恢复。web 与桌面端的渲染进程是同一套前端,所以两端行为一致。
顺带一提:桌面端支持对 cordis.patch.yml 热插拔(存盘即生效、删掉即卸载),配合上面的轮询,改预设 / 改代码基本不用重启。
特性
- 一份 preset.json = 一套主题:十来个颜色锚点,由 lib/palette.mjs 展开成 DSH 设计系统完整的 --dsw- token 集(色阶、语义别名、表面 token、状态色、滚动条),不用手写一百多个变量
- 支持静态图、视频(mp4 / webm)、CSS 微动(sway 呼吸式、drift 缓慢推移)
- 尊重 prefers-reduced-motion
- 自带切换页面 /dsh-visual/,点图即切
- 素材路由支持 Range(视频可拖动进度)与 ETag(304 复用)
- 素材路径做了目录穿越防护;预设目录外的文件只能通过 preset.json 里写死的 assetPath 引用
- 视觉失败绝不影响页面:宿主注入与客户端都各自吞掉异常,只记一条警告
安装
插件挂在某个 profile 的 patch 层里。改完存盘即生效(loader 热应用 patch),不需要重启服务。
1. 把本仓库放到任意目录,例如 <你放插件的地方>\dsh-visual-system。
2. 编辑目标 profile 的 patch 文件:
- insert:
- id: visual-system
name: 'file:///C:/你的路径/dsh-visual-system/index.js?v=1'
- Web GUI:$DSH_HOME/profiles/web/cordis.patch.yml
- 桌面端:$DSH_HOME/profiles/desktop/cordis.patch.yml (桌面端会自己重写这个文件里的 - id: 条目,但不会动你的 - insert:)
Windows 路径写成 file:///C:/...(正斜杠)。?v=N 是模块缓存破坏参数:改 index.js / lib/.mjs 之后把它递增。
客户端半边(lib/client.js)由宿主按 package.json 的 dsh.client 声明发现,改完刷新一次页面即可。
3. 刷新页面(或重载窗口)即生效。
卸载:删掉那段 - insert:,刷新页面就回到原生配色(插件目录留着不影响任何东西)。
仓库里的预设
| id | 名称 | 媒体 | 素材是否随仓库 |
| demo | 演示 · 极光 | assets/aurora.png 1920×1080,缓慢推移 | ✅ 本项目自绘,可直接用 |
| executioner | 处刑者 · ゆらぎ | assets/cover.png 3840×2160 + 呼吸式微动 | ❌ 需自备 |
| emblem | 国徽 | assets/emblem.mp4 3840×2400 30s 视频(可配 poster) | ❌ 需自备 |
| desktop | 唤起工农千百万 | 视频,通过 assetPath 直接引用本机已有文件 | ❌ 需自备 |
| legion | LEGION 蓝龙 | assets/wallpaper.jpg 3840×2400 + 缓慢推移 | ❌ 需自备 |
把素材放进对应的 presets/<id>/assets/ 目录即可;assetPath 那种写法用于「素材已经在别处、不想复制一份」的情况(只接受 preset.json 里写死的文件名, URL 里传的路径不会碰到磁盘)。
切换
浏览器打开 http://<你的 DSH 地址>/dsh-visual/,点图即切。(桌面端也可以在 http://127.0.0.1:<桌面端端口>/dsh-visual/ 打开同一个页面。)等价于直接改 config.json:
{ "active": "demo" }
因为客户端每 4 秒轮询一次状态,改完不刷新页面也会生效。
其它接口:
GET /dsh-visual/config # 当前预设 + 预设清单 POST /dsh-visual/config {"active":"…"} # 切换 GET /dsh-visual/state # 客户端半边用:CSS + 素材地址 GET /dsh-visual/asset/<id>/<path> # 预设素材(支持 Range,视频可拖动)
加一个预设
1. 建 presets/<id>/,放 preset.json 和媒体文件。
2. 锚点写进 dark / light 两套。最少只要这几个:
{
"id": "mywall",
"title": "显示名", "note": "一句话来源说明", "kind": "image", // 或 "video" "asset": "assets/cover.png", "assetPath": "D:\\...\\x.mp4", // 可选:素材在别处(只允许 preset 里写死的名字) "focus": "center 40%", // object-position
"motion": { "kind": "drift", "duration": 70, "shift": 1.2 }, // 或 "sway"
"dark": { "base": "#070a20", "surface": "#151b3b", "ink": "#eef1fb",
"accent": "#f2c14e", "accent2": "#5ad2e6", "business": "#f2c14e",
"veil": 0.5,
"scrim": { "base": "rgba(5,7,20,0.66)", "wash": ["radial-gradient(...)"], "vignette": 0.46 } },
"light": { "base": "#ffffff", "surface": "#f8f9fe", "ink": "#090b1f",
"accent": "#c98a12", "accent2": "#0f6d88", "veil": 0.97 }
}
veil 控制表面透明度(越大越不透明),scrim 是压在图上面的那层纱。
图层顺序(这是关键)
body 的背景色会被传播成画布底色,所以纱(scrim)不能放在 body 上,否则会跑到壁纸下面。
现在的顺序是:
body 背景色(画布) → #dsh-visual-media 媒体 → ::after 纱/晕影 → 应用表面(半透明 token) → 内容
#dsh-visual-media 位于 z-index:-1,::after 承载 scrim,读长文本时靠 vignette
在阅读栏下压出一片墨色。浅色模式默认不显示壁纸(用纸面配色),预设里加
"light": { "showWallpaper": true } 可以打开。
工具
生成演示壁纸
仓库自带的那张极光是代码画出来的,可复现、无版权问题:
pwsh -NoProfile -File tools/make-demo-wallpaper.ps1
pwsh -NoProfile -File tools/make-demo-wallpaper.ps1 -Out out.png -Width 2560 -Height 1440
做法是把光斑先画在 1/8 分辨率的小图上,再用高质量双三次插值放大回原尺寸,得到柔和的光带而不是能看出边界的椭圆;星星和底部压暗仍画在全分辨率上。
Wallpaper Engine 素材提取
tools/we-pkg.mjs / tools/we-tex.mjs 用于从你自己机器上的 Wallpaper Engine 场景里取出原始美术(presets/executioner 的 3840×2160 封面就是这么来的):
node tools/we-pkg.mjs list "…\431960\3223543799\scene.pkg"
node tools/we-pkg.mjs extract "…\scene.pkg" "materials/封面.tex" cover.tex
node tools/we-tex.mjs probe cover.tex
node tools/we-tex.mjs carve cover.tex cover.png
we-tex.mjs 另外带一套 DXT1/3/5 与 RGBA 解码器,供老版本(裸 mip 链)的 .tex 用。
这两个脚本与 Wallpaper Engine 官方无关,只是读取你自己已有的文件。
目录结构
index.js 宿主半边:生成 CSS、提供素材/状态/切换器路由 lib/client.js 客户端半边:把 CSS 与壁纸贴进页面(web + 桌面端通用) lib/palette.mjs 颜色锚点 → 完整 --dsw-* token 集 presets/<id>/ 一个目录一个预设(preset.json + assets/) preview/ README 用的截图(均为自绘 demo 预设,版权干净) tools/make-demo-wallpaper.ps1 生成演示壁纸 tools/we-pkg.mjs, we-tex.mjs Wallpaper Engine .pkg / .tex 提取工具 config.json 当前选中的预设(每台机器不同,已 gitignore)
客户端 bundle 的格式
lib/client.js 是手写的,没有构建步骤。它遵循官方 tsdown 预设产出的闭包工厂格式:
window.__ModuleLoader__.load({
id: 'dsh-visual-system',
factory: function (require) { /* ... */ return { name, apply }; },
});
因为本插件只用 DOM 和 fetch,不依赖任何平台模块,所以 dsh.client.inject 是空的,也就不需要打包器。
环境要求
- 一个能起 Web GUI 的 DeepSeek Harness profile,或桌面端(Electron)。
- 宿主半边跑在 DSH 进程里;客户端半边跑在页面里(Node 版本取决于 DSH 本体)。
License
MIT,见 LICENSE。只覆盖代码与预设定义,不覆盖任何第三方素材。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
qin839/dsh-visual-system
用一份预设文件同时更换界面配色与背景壁纸
相关插件 · 视觉能力
智能体工作台Devin-AXIS/iPolloWork
企业级、本地优先的智能体工作台,面向个人和智能体团队——一个工作区,容纳多个智能体引擎;一套统一体系,管理插件和技能;支…
★ 7,364已汉化DSH
72
开源设计工作台nexu-io/open-design
OpenDesign:首个协作式 AI 设计智能体工作区
★ 105,709已汉化DSH
71.8
GPT 图像提示词库freestylefly/awesome-gpt-image-2
Prompt as Code | GPT Image 2 / 2.5 提示词与案例库,530+ 个案例、20+…
★ 34,534已汉化DSH
71.5
多智能体编码工作区spacering-net/codeg
多智能体协作的 AI 编程工作区:汇总 Claude Code、Codex、OpenCode、Pi、Grok Build 等来源的会话。支持桌面应用、自托管服务器或 Docker。
★ 4,319已汉化DSH
71.5
AI 用量桌面小部件Javis603/token-monitor
EN | 简 | 繁 | KO | JA | PT
★ 3,533已汉化DSH
71.1
架构图生成器tt-a1i/archify
把你想理解、规划或分享的事,变成可以互动的可视化作品。
★ 93,105已汉化DSH
71.1
这是你的仓库?认领条目