dsh-custom-theme
Manifest valid★ 1DSH自定义主题:可自行修改背景图片,主题色,表情包与文案。基于[dsh-vesna-theme](https://github.com/Mahiru0427/dsh-vesna-theme)
dsh-custom-theme · 外观全项自定义
为 DeepSeek Harness Web / Desktop 制作的独立可自定义主题插件。出厂外观是延续原项目(Mahiru0427/dsh-vesna-theme)的青蓝与奶白的明暗双色,配一整张角色壁纸和六个卡通表情;这套外观的每一项都可以改成你自己的。
壁纸、明暗两套配色、欢迎语、主题名称与描述、浅色/深色的名字、六个表情与它们的名字全部可以自定义,并且可以导出/导入配置文件。
能自定义什么
设置 → 通用 → 卡片下方有三个折叠区:
| 折叠区 | 可改内容 |
|---|---|
| 配色自定义 | 浅色与深色各 19 个颜色项,用十六进制色值(#rrggbb)直接改,左边色块实时预览,右边是这一项的名字。最后三项是三个辅助色(辅助色1 / 辅助色2 / 辅助色3,出厂值分别是珊瑚粉、淡金、淡紫)。改过的项会高亮,可单项清除,也可整组恢复。 |
| 文案与名称 | 主题名称、主题描述、欢迎语(默认「找我什么事呀,亲爱的朋友~」)、浅色名称(默认「春日浅色」)与深色名称(默认「夜宴深色」)。留空即回到内置文案。 |
| 图片与表情 | 全窗口壁纸,以及六个表情槽位(比耶→新会话、思考→欢迎区、读书→文件入口、疑惑→负面评价、点赞→正面评价、爱心→发送)。每个槽位可单独选图、单独改名字、单独恢复默认。 |
卡片底部:导出配置 / 导入配置 / 恢复默认配置。自定义的名称会同时出现在配色分组的标题、明暗切换按钮和表情图库上。
聊天框效果
勾选「全窗口壁纸」后,卡片上多一个聊天框效果开关:
- 高斯模糊:用户气泡与模型回答换成静态模糊的玻璃面板,关掉开关恢复宿主原生面板。
- 高级模糊:给每条消息卡片套一圈 2px 的高斯模糊边框——环里的模糊半径(10px)比卡片内部(3px)更大,所以卡片边缘会多出一层更柔的毛玻璃边,以实现接近于液态玻璃的显示效果。
- 发送框 3px 高斯模糊:输入卡保留 92%/95% 的近实色底,再叠一层
blur(3px),壁纸在它下面被轻轻化开。 - 信息栏胶囊:「N 轮 M 步 · x tok/s · 缓存命中 x%」那一行套上侧栏同色的胶囊底,以提升可读性。
关掉「全窗口壁纸」,或点「默认配色」,上述效果一起撤下,原生界面完全回来;系统关闭透明效果时会自动调整。
十六进制配色
配色输入框接受 #a1b2c3 也接受 a1b2c3:
- 输入到第六位合法数字时立即生效,色块同步更新;
- 还没打完的中间状态会标出来,但不会写进设置;
- 失焦或回车时若仍不合法,就退回原来的颜色——所以打错字不会把颜色改坏。
配置文件
导出得到 dsh-custom-theme-<时间>.json:
{
"format": "dsh-custom-theme",
"version": 1,
"palette": { "light": { "accent": "#227c89" }, "dark": {} },
"title": "", "description": "", "greeting": "找我什么事呀,亲爱的朋友~",
"modeNames": { "light": "春日浅色", "dark": "夜宴深色" },
"stickerNames": ["比耶", "", "", "", "", ""],
"images": { "wallpaper": "data:image/webp;base64,...", "stickers": ["data:...", null, null, null, null, null] }
}
- 只写自定义项:图片是内嵌 data URL,所以一个文件就是一整套外观,换机器直接导入即可。
- 导入是全量替换:文件里没有的图片会被清空。
- 校验失败(格式不对、版本不符、颜色非法、图片过大或不是图片)会拒绝整份文件并提示,不会改坏现有配置。
数据存放
| 内容 | 位置 |
|---|---|
| 启用开关、壁纸/表情开关、聊天框效果 | localStorage 键 dsh-custom-theme.preference.v1 |
| 配色、文案与名称 | localStorage 键 dsh-custom-theme.custom.v1 |
| 壁纸与表情图片 | IndexedDB 数据库 dsh-custom-theme,对象仓库 assets |
上传的图片会先在 canvas 里缩放并重新编码(壁纸最长边 2560,表情最长边 320,优先 WebP 以保留透明通道),再存入 IndexedDB。图片不会上传到任何服务器。
安装
- 从 Releases 下载
dsh-custom-theme-0.1.0.tar.gz,你也可以复制项目主页让dsh帮你装。 - 设置 → 插件 → 添加插件,选择该安装包,然后「立即启用」。
- 重启 DSH:插件清单是在启动时按包名组装的,改名必须重启才生效。
- 重启后到 设置 → 通用设置 找到这张卡片。
从旧名字的版本升级的话:先在旧版里导出配置,装好新包、重启,确认外观无误后再把旧插件移除,然后导入配置文件。启用开关与明暗偏好归 DSH 自己保存,重启后仍然保留。
卸载与恢复
- 临时恢复:卡片里点「默认配色」,撤下插件配色与壁纸、隐藏表情,原生明暗模式保留。
- 清除自定义:点「恢复默认配置」,配色、文案、名称、图片回到默认状态,但主题仍是启用状态。
- 卸载:先「默认配色」,再到插件页禁用或移除
dsh-custom-theme,然后重新打开窗口。自定义记录留在本机,重新安装会沿用。
原理与边界
- 配色通过官方
ThemeRuntime.overrideTokens(source, { light, dark })覆盖--dsw-alias-*令牌,插件不替换程序文件、不改 DOM 结构。 - 卡片用
useSyncExternalStore读控制器的不可变快照,所有状态只有一份。 - 图片以 Blob URL 喂给 CSS,样式表里只出现短 URL,不会把几 MB 的 base64 反复写进 CSS。
- 欢迎语只改主页那一个已验证的标题文本节点,禁用或卸载时还原。
- 表情挂在原有按钮的伪元素上,按钮的文字、快捷键、禁用状态与事件处理都会保留。
- 错误、警告、成功与差异配色不参与覆盖,保留平台语义。
- 停止与插话按钮全部用强调色:修正原有项目中停止按钮不够醒目的问题。回合运行中,输入区那颗按钮会从「发送」变成「停止生成」——同一个元素,只换了标签。主题的令牌把它的填充色定成偏淡的
raised,所以运行中看着发灰;这条规则单独把该状态指到强调色(悬停用强调悬停色,图形用强调前景色)。它挂在body[data-dct-theme]上,跟着主题开关走,选「默认配色」时一切还原。
开发
node scripts/build.mjs # 生成 lib/client.js(内嵌素材,无运行时依赖)
node tests/controller.test.mjs # 状态、持久化与配置校验
node tests/plugin.smoke.mjs # 打包产物:真实渲染设置卡片
node scripts/verify-served-bundle.mjs <已安装的 lib/client.js> [origin] [entry-id]
plugin.smoke.mjs 会用一个假的模块加载器把 lib/client.js 真正跑起来:解码内嵌素材、装配插件、渲染设置卡片的各种状态、检查卡片用到的每个文案键都存在于词典里,还要求卡片渲染出的每个 class 在 card.css 里都有规则(否则界面会静默掉样式)。部署前请让它先通过。
verify-served-bundle.mjs 复算宿主用来做缓存版本号的那串 sha1,再比对宿主实际返回的字节,因此「旧文件被当成新版」不可能蒙混过关。DSH 的网页服务需要启动时打印的带 token 链接才能打开首页,但插件包本身的路由不受影响,所以这个脚本不需要 token。
node scripts/build.mjs <模块 id> <输出路径> 可以把同一份代码构建成另一个模块 id,用于在过渡期让已启动的会话继续拿到新功能。
源码在 src,预构建产物在 lib,无新增 npm 依赖:
| 文件 | 职责 |
|---|---|
src/palette.js | 出厂配色、颜色校验、令牌层构建 |
src/config.js | 配置文件的构建与校验(纯函数,可测) |
src/controller.js | 状态、持久化、图片、覆盖层 |
src/image-store.js | IndexedDB 存取、上传图片处理 |
src/art.js | 壁纸/表情 CSS、按钮预览、欢迎语替换 |
src/glass.js | 聊天框高斯模糊(含开关标记与标记扫描)、高级模糊环、发送框模糊、信息栏胶囊 |
src/client.js | 设置卡片与插件装配 |
版权与来源
- 作者:@km5473
- 项目主页:km5473/dsh-custom-theme
- 许可:MIT — © 2026 km5473
- 基于:Mahiru0427/dsh-vesna-theme(原项目主页),© 2026 dsh-vesna-theme contributors
原作者B站主页Cyrefirefly
本项目由上游主题改名而来,并在基础上扩展了配色与文案自定义、表情命名、配置导入导出;原项目的版权归原作者所有,MIT 许可的完整条款见 LICENSE。
这是非官方主题。MIT 许可仅适用于本插件代码,不包含角色名称与角色图像的权利。
Comments
Loading…
From the same category
by awesome-dsh-plugin
A curated list of plugins for DeepSeek Harness (dsh) · DeepSeek Harness 插件精选列表
★ 19.2k
CC0-1.0
Python
Oct 17, 2026
by 0xsline
DeepSeek Harness (DSH) ecosystem: curated plugins, tools, and infrastructure from dsh-external/hub and the public dsh-plugin topic.
★ 1.2k
CC0-1.0
Python
Oct 16, 2026
by pax-beehive
Open-source CLI, schemas, resolver, and DSH agent tools for DSH Plugin Hub
★ 391
MIT
TypeScript
Oct 6, 2026
by xiajiajun516
DeepSeek Harness (DSH) backup & restore plugin — export, import, migrate and sync your complete DSH configuration, plugins, MCP servers, skills and workspace. One-click migration to another machine.
★ 201
MIT
TypeScript
Oct 17, 2026
dsh plugin --profile web add dsh-config-managerby yjh051108
推荐组件(非必须):DeepSeek Harness 运行时注入器;已随 dsh-routing-suite 单仓库化保留,本仓库继续维护/发布。
★ 167
TypeScript
Oct 16, 2026
dsh plugin --profile web add @dsh-external/dsh-super-injectorby jigjoy-ai
A CLI that turns a goal into a pull request - and a sandbox for testing concurrent AI coding agents on the Mozaik runtime.
★ 124
MIT
TypeScript
Oct 13, 2026