
Security News
Rust 1.100 Will Add Dependency Cooldowns to Cargo
Rust 1.100 will add opt-in dependency cooldowns to Cargo, giving security scanners and maintainers time to catch malicious crate releases.
dsh-ui-appearance
Advanced tools
Appearance customization plugin for DeepSeek Harness WebUI: theme palette, background image, transparency and blur over the --dsw-* token system
English · 中文
DeepSeek Harness 生态中首个支持多维度 UI 参数深度自定义的外观插件 —— 不局限于固定预设,支持面板/输入框/代码块透明度微调、毛玻璃强度、壁纸/视频背景及色板智能衍生;WebUI 与 DSH Desktop 均可使用。
零核心代码改动:完全通过官方插件机制(
ctx.theme.overrideTokens()主题扩展点与settings.general.item插槽)实现;卸载后界面完整恢复默认。
| 设置面板 | 壁纸 + 毛玻璃效果 |
|---|---|
![]() | ![]() |
在 DSH Desktop(桌面客户端)中同样开箱即用,以下为实拍:
| 高级模式(桌面原生布局与材质) | 兼容模式(上游默认 Web client) |
|---|---|
![]() | ![]() |
官方桌面端新版实拍(社区版截图保留在上方):
| 官方桌面端(新版高级模式) |
|---|
![]() |
效果图中的壁纸素材 © MadYY(原图),仅作演示;用户上传自己的图片即可。
深浅双模式独立外观 —— 设置面板顶部提供「浅色模式 / 深色模式」独立分段卡,分别配置双模式下的 6 种颜色角色与预设,实时跟随宿主状态与系统 prefers-color-scheme 自适应切换。接入 WCAG 2.1 动态反解算法(次级文字 $\ge 7:1$、三级说明字 $\ge 4.5:1$),彻底杜绝浅色模式“白底淡字”或深色模式图标隐形。
主题颜色 —— 6 个核心颜色角色:主色、背景色、面板色、输入框色、文字色、边框色。每个角色支持原生取色器与 HEX 精确输入;文字选区、键盘焦点环、左上角 "harness" 徽标字样自动跟随主色;消息气泡主色自适应。
壁纸与视频背景(最高 200MB) —— 支持上传或拖拽图片(JPG / PNG / WebP / GIF),或粘贴 URL 一键加载(自动按扩展名分流,支持 CORS 友好直链)。原画质通过 IndexedDB Blob 存储(零额外堆内存复制,不占 localStorage 配额;超 4096px 等比缩边,限内 GIF 保留动效)。上传时自动采样平均亮度并智能提取主色衍生周边色阶。支持原生流式硬解动态视频背景(MP4 / WebM,静音循环播放,最高 200MB)。
毛玻璃与半透明机制 —— 面板不透明度与毛玻璃强度双滑块控制,让侧栏、设置面板、对话区、任务面板自然融进壁纸。输入框与代码块支持独立调节不透明度;行内代码等强调字保留低透明度主色相,配合「强调字浓度」滑块精细微调。中性控件 hover 状态同步烘焙透明度,鼠标悬停平滑自然,绝不闪现死白/死黑的实心水泥块(解决 hover snapped opaque)。
背景三层架构与氛围 —— 独创三层渲染架构:底层基础画布(承载自定义纯色背景)、中层媒体层(承载壁纸/视频的独立不透明度与模糊)、顶层防眩光遮罩(随深浅色模式自动配色的纱帘渐变)。调低壁纸不透明度时平滑融入自定义背景底色,消除白斑;遮罩层有效保证亮图之上的文字易读性。
双模式专属预设 —— 浅色 5 款专属预设(晨曦、云天、薄荷、樱粉、雅灰)+ 深色 6 款经典预设(默认、午夜、海洋、森林、玫瑰、单色),一键应用并支持自由微调。
配色方案分享 —— 一键导出配色 JSON 至剪贴板,粘贴即可导入应用;欢迎在 GitHub Discussions 社区分享交流你的专属配色方案。
所有修改实时生效,无需刷新,无需保存。
dsh plugin --profile <name> add dsh-ui-appearance
powershell -ExecutionPolicy Bypass -Command "Invoke-WebRequest 'https://raw.githubusercontent.com/TQSY114514/dsh-ui-appearance/main/install.ps1' -OutFile install.ps1; .\install.ps1"
脚本直接从 npm registry 拉取已构建的发布包(lib/ 预构建产物随包分发),链接进 profile 自己的 node_modules 并在该 profile 的 package.json 中注册(dependencies 条目 + dsh.profile.bundles,与 dsh plugin add 的产物一致)——幂等,可重复执行。可选参数:
.\install.ps1 -Version '0.1.7' # 固定版本(默认装最新发布版)
.\install.ps1 -DshHome 'D:\.dsh' # 自定义 DSH 主目录(默认 %DSH_HOME% 或 %USERPROFILE%\.dsh)
.\install.ps1 -ProfileName 'web' # 目标 profile(默认 web;profile 需已初始化)
git clone https://github.com/TQSY114514/dsh-ui-appearance.git
dsh plugin --profile <name> add file:<克隆到的本地路径>
卸载:dsh plugin --profile <name> remove dsh-ui-appearance(脚本安装则删除 profile node_modules 下的 junction 与 package.json 中对应的 dependencies/bundles 条目)。
更新:新版本发布后,重新执行 add 命令或安装脚本即可升级到最新版。
DSH Desktop 用户:Desktop 的 profile 与 Web 版相互独立——三种方式都可用,但要把插件装进 Desktop 实际激活的 profile(默认名为
desktop;Desktop 内置终端里直接跑dsh plugin即可,默认作用于当前激活的 profile)。
安装流程已验证端到端:npm registry 与
file:源码直装两种方式均实测可用(host 半部零@deepseek-ai运行时依赖,浏览器与 Host 均能正确加载)。克隆后pnpm install会自动构建;修改代码后重新执行pnpm install && pnpm prepare并重启 dsh web。 版本演进见 CHANGELOG.md。
设置面板内容一览:
| 区块 | 控件 |
|---|---|
| 预设主题 | 默认 / 午夜 / 海洋 / 森林 / 玫瑰 / 单色,一键应用后可继续微调 |
| 主题颜色 | 6 个角色 × (取色器 + HEX 输入):主色、背景色、面板色、输入框色、文字色、边框色 |
| 背景 | 图片上传/更换/删除、视频上传/删除、URL 加载(图片/视频)、背景不透明度、背景模糊、背景遮罩 |
| 界面 | 面板不透明度、输入框不透明度、代码块不透明度、强调字浓度、侧边栏保持不透明、毛玻璃强度 |
| 配色方案 | 导出配色、导入配色(JSON 文本) |
dsh-ui-appearance.settings),刷新与重启后保留,多标签页自动同步| 能力 | 机制 |
|---|---|
| 颜色与对比度 | ctx.theme.overrideTokens() 覆写 --dsw-alias-* 语义 Token,支持深浅双模式独立配置。内置 WCAG 2.1 动态反解算法(a11yLabelStep),自动计算保证次级文字 $\ge 7:1$、三级文字 $\ge 4.5:1$,彻底杜绝浅色模式“白底淡字”或深色模式图标隐形 |
| 背景三层架构 | 自主研发三层独立图层(底层纯色画布 + 中层媒体层 + 顶层防眩光遮罩),沉底在 position: fixed; z-index: -1。当壁纸/视频生效时,自动对宿主底座(--dsw-alias-bg-base)进行透明打孔,绝不给 #root 赋予 position/z-index,从原理上消除层叠上下文(Stacking Context)陷阱,保证宿主与设置弹窗永远位于最顶层 |
| 毛玻璃与边缘抗虚 | 背景图层整体滤镜(filter: blur,背景模糊 + 毛玻璃两滑块之和),配合 inset: -48px 外扩延伸,彻底消除屏幕四周的半透明羽化白边;不依赖 backdrop-filter,不改变页面内部元素的包含块 |
| 交互悬停闭环 | 中性控件与操作按钮的 Hover 态 Token(--dsw-alias-interactive-bg-hover 及 -solid)在半透明模式下同步烘焙当前透明度,保持悬停微调明暗(10%~15%)的同时严格透出背景,杜绝鼠标滑过按钮闪烁成实心水泥块(避免 hover snapped opaque) |
| 视频原生硬解 | 基于 Chromium 原生硬件加速流式解码,静音循环播放。视频文件通过 IndexedDB Blob 引用直存(最高 200MB),不经 Base64 编码,零额外堆内存复制 |
| 持久化与清理 | 外观配置存入浏览器 localStorage(键 dsh-ui-appearance.settings),跨标签页瞬时同步;图片与视频存入 IndexedDB。更换媒体或“恢复全部默认”时自动执行 Blob 垃圾回收(deleteImage / deleteVideo),绝不产生孤儿文件残留 |
.BynINW_frame)的透明打孔补丁(#31)。rgba(),滑块调节跟手丝滑;毛玻璃合并为背景层单次滤镜,若设备性能有限可直接将“毛玻璃”和“背景模糊”滑块归零关闭。Q: 安装或更新后在 DSH 设置中没有看到「个性化外观」入口?
desktop,Web 版通常为 web;可运行 dsh plugin list 检查)。pnpm prepare 生成 lib/ 产物,并重启 DSH 服务(如 dsh web)。Ctrl + F5(Mac 为 Cmd + Shift + R)强制刷新浏览器,清除前端旧缓存。Q: 为什么上传壁纸或视频后,界面依然是一片实心底色,看不到背景?
z-index: -1,并通过将官方底座 --dsw-alias-bg-base 设为 transparent 实现透光。若您同时启用了第三方实心全量皮肤(如部分强制给 body 或 #root 赋予了不透明背景色的主题插件),底部的天窗会被堵住。建议排查并停用全实心第三方皮肤,或在其设置中降低不透明度。Q: 上传视频或输入视频 URL 后黑屏、无法播放或提示解码错误?
.mov 容器或特定音频轨),会导致解码失败。建议使用转码工具(如 HandBrake 或 FFmpeg)将其转码为标准的 H.264 MP4 格式后再次上传。Q: 粘贴图片或视频 URL 提示加载失败?
Q: 重置设置或频繁更换视频,会不会导致磁盘空间被垃圾文件占满?
deleteImage 与 deleteVideo 清理 IndexedDB 中的旧 Blob 记录,绝不会残留孤儿文件。Q: 我的外观配置保存在哪里?如何备份与跨设备迁移?
localStorage 中,图片与视频本体保存在 IndexedDB 中。Q: 卸载插件后会残留样式或影响 DSH 界面吗?
dsh plugin remove dsh-ui-appearance 卸载后,插件会自动注销所有 Token 覆写、移除 #dsw-appearance-bg 图层与动态样式表,界面 100% 逐像素恢复 DSH 官方原生默认状态。src/
├── index.ts # Host 半部(空 apply,零运行时依赖)
├── invariant.ts # 运行时不变式伴生
├── appearance-settings.ts # 设置类型与默认值
└── client/
├── index.ts # apply():localStorage 持久化、插槽注册
├── applier.ts # DOM 应用器(token 覆写、三层背景、毛玻璃)
├── tokens.ts # 颜色角色 → token 映射、双模式预设、半透明烘焙
├── color.ts / image.ts # 色值工具 / 图片预处理(超 4096px 缩边,不降质)
├── blob-db.ts # IndexedDB 底座(DB v2:图片+视频两 store)
├── image-store.ts # IndexedDB 图片存储(键化引用与 GC)
├── video-store.ts # IndexedDB 视频存储(200MB 上限与 GC)
├── color-scheme.ts # 配色导出/导入(纯函数)
├── settings-store.ts # 设置镜像 store
├── locales.ts # 中英文案
└── AppearanceCustomizerRow.tsx + .module.css # 设置行 UI
tests/ # 测试(`pnpm test` 独立运行,@deepseek-ai 运行时以 tests/stubs 桩替代)
types/client.d.ts # 手写 client 半部类型声明
cordis.patch.yml # bundle patch
tsdown.standalone.config.ts # 自包含构建
vitest.config.ts # 独立测试配置(alias 指向 tests/stubs)
lib/ # 构建产物
@deepseek-ai/* 依赖全部为 optional peer,运行期由宿主提供;唯一运行时依赖是 clsx。164 个 vitest 测试全绿(独立仓库可独立运行),CI 构建与产物断言全绿。
MIT
FAQs
Appearance customization plugin for DeepSeek Harness WebUI: theme palette, background image, transparency and blur over the --dsw-* token system
The npm package dsh-ui-appearance receives a total of 0 weekly downloads. As such, dsh-ui-appearance popularity was classified as not popular.
We found that dsh-ui-appearance demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Rust 1.100 will add opt-in dependency cooldowns to Cargo, giving security scanners and maintainers time to catch malicious crate releases.

Security News
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.

Security News
Anthropic’s free OSS Scanner uses Mythos and other Claude models to find open source vulnerabilities and send maintainers reports with proposed fixes.