DSH界面美化 · DSH UI Beautify
给 DSH 桌面端页面加壁纸 + 毛玻璃的轻量美化插件:不碰布局、不改宿主代码,自带开屏动画、方块光标、重启键与深浅色主题适配。
- 版本:v0.9.7-1 · 包名
dsh-ui-beautify· 路由/dsh-ui-beautify/*· 全局__DSHUI__· 存储键__dshui.* - 支持 Windows 10/11 + DSH 桌面端;所有改动都发生在本插件自己的节点/样式里。
- 详细开发记录、实测数据与决策记录见 HANDOFF.md;重启键独立说明见 restart/README.md。

功能
| 功能 | 说明 |
|---|---|
| 壁纸模式 | 纹理:整页乘法混合,白底正文仍清晰;背景:图片铺在最底层,面板天然在图上 |
| 浓度 | 每个模式独立浓度,面板滑块即时生效;淡入淡出换图 |
| 毛玻璃 | 主表面 / 二级面板 / 问答窗口 / 输入框 / 气泡;模糊 + 白层 + 透明度可调 |
| 气泡视觉 | 气泡自动取原色、可调透明/模糊/自定义颜色;代码块与 chat 高亮同样适配 |
| 深浅色主题 | 自动检测 body[data-ds-dark-theme];深色用桌面 DeepSeek 暗夜模式.png(包内 assets/deepseek-dark.webp 兜底),浅色保持原两张 |
| 深色独立参数 | 深色纹理浓度默认 0.85、背景 0.7;浅色仍为 0.49/0.5,滑块按主题分别保存 |
| 开屏动画 | 新「弧线定稿」:拟合/乱码两种开场每次随机;跟随 DSH 深浅色;欢迎卡片由插件统一显示;可重播/跳过/关闭 |
| 方块光标 | 命令提示符风格方块光标;光晕模糊可在面板调(默认 5px);Ctrl+Shift+Alt+M 开关动效 |
| AI 思考视效 | 纹理/背景模式下,思维链与回复的左侧细线 + 淡渐变;逐行重播可读 |
| 重启键 | 标题栏原生「重启」按钮;可选壳补丁;与 dsh-restart-key 自动让位/接管 |
| 主题过渡 | 切换深浅色时旧壁纸先隐藏、新壁纸淡入 + 浓度/毛玻璃补间 + 自家 GUI 颜色过渡;启动预加载另一主题壁纸;减少动态时关闭补间 |
| 模式层级 | 顶层 关闭 / 静态;静态包含 纹理 / 背景 |
| 诊断 | 屏幕内诊断面板 + diag.json,无需控制台 |
安装
要求:Windows 10/11、DSH 桌面端(Chromium/Electron)。
- 下载
dsh-ui-beautify-0.9.7-1.zip并解压; - 在 DSH 插件管理里安装本地目录(target 用绝对路径,例如
file:C:/path/to/dsh-ui-beautify); - 重启 DSH 一次。
若 pnpm 报
ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION锁文件校验,安装时指定官方 registry:https://registry.npmjs.org/。
安装会写入 profile 的 node_modules/dsh-ui-beautify 一项,并启用该 bundle;不安装服务、不写计划任务。
使用
- 左上角胶囊:点一下开/关面板;按住可拖到任意位置。面板里:
关闭 / 纹理 / 背景切换模式;- 图片栏:浅色显示原两张,深色只显示「暗夜」一张,深浅选择分开保存;
- 浓度、白层、毛玻璃、气泡、面板白层等滑块即时生效并自动保存;
- 快捷诊断、重启键状态、开屏开关等。
- 快捷键:
Ctrl+Shift+Alt+1关闭 ·+2纹理 ·+D面板 ·+I诊断 ·+M动效开关。 - 诊断:屏幕内面板直接看状态;也可以访问
/dsh-ui-beautify/status.json、/dsh-ui-beautify/diag.json,或页面 hash#dshui-diag(旧#dsniang-diag兼容)。 - 控制台 API(
window.__DSHUI__):
| API | 作用 |
|---|---|
status() / diagnose() |
状态快照 / 诊断文本 |
setMode('off'|'multiply'|'backdrop') |
切换模式 |
setOpacity(v) / setScrim(v) |
浓度(当前主题)/ 薄纱 |
setFrostEnabled(v) / setFrostBlur(px) / setFrostAlpha(v) |
毛玻璃开关 / 模糊 / 白层 |
setBubbleFx(v) / setAiReplyFx(v) |
气泡视觉 / AI 思考视效 |
switcher() / diag() |
打开面板 / 诊断 |
splash.replay() / skip() / setEnabled(v) / setSound(v) |
开屏控制 |
restart.state() / click() / enable() |
重启键状态 / 点一次 / 启用 |
深浅色主题
- 判定以 DSH 的真实标记
body[data-ds-dark-theme]为准,CSS token /color-scheme/ 系统偏好仅兜底; - 深色壁纸:优先读桌面
DeepSeek 暗夜模式.png(兼容大小写变体);桌面没有时使用包内assets/deepseek-dark.webp(已去 EXIF/XMP,125 KB); - 浅色壁纸:完全保持原来的两张(
deepseek 4k/deepseek 黑白无水面); - 深色参数:纹理浓度默认 0.85(浅色 0.49)、背景 0.7(浅色 0.5);深色纹理用
lighten混合让暗夜图可见,浅色仍用multiply; - 主题切换时全量重算:图层、毛玻璃、气泡/代码块原色、二级面板遮罩、薄纱、胶囊与面板配色。
重启键
- 首用点标题栏「重启」时自动准备:若壳补丁缺失,会随包安装器补
app.asar补丁(需要完全退出 DSH 一次); - 补丁带 BEGIN/END 标记与双 SHA 备份,可逐字节还原;卸载时可自动清理;
- 与独立插件
dsh-restart-key共存:对方已启用并由它提供按钮时,本插件让位;对方未提供时本插件接管,反之亦然(1.8s 重试); - 手动安装/还原/自检脚本在
restart/,说明见 restart/USAGE.txt。
文件结构
dsh-ui-beautify/
├── lib/index.js # Host 半区:路由、图片解析、重启桥接
├── lib/client.js # Client 半区:样式、图层、面板、开屏、诊断
├── assets/ # 壁纸(webp)与开屏页面
├── restart/ # 重启键:壳补丁 spec/snippet、PowerShell 安装/还原脚本
├── scripts/ # 安装/卸载/自检辅助
├── test/ # host / client 测试
├── tools/build-dist.ps1# 整包构建(ASCII 路径)
├── README.md # 本文件
└── HANDOFF.md # 开发记录(详细)
外部副作用
| 项 | 说明 |
|---|---|
app.asar |
仅「启用重启键」时改两个已存在条目的重试壳(标记 + 双 SHA 备份 + 可还原);插件本体不碰 |
child_process |
仅重启键链路:面板启用或自动准备时启动随包 PowerShell 安装器,安装器用 WMI 逃逸长驻编排进程 |
| 用户数据 | 设置只存 localStorage(__dshui.*),默认保留;清除需显式操作 |
| 网络 | 无请求、无遥测 |
| 其他进程/服务 | 无 |
开发与测试
node test/host.test.mjs # host 侧
node test/client.test.mjs # client 侧(fake DOM)
powershell -ExecutionPolicy Bypass -File tools/build-dist.ps1 # 出 zip
当前测试:host 31/31 · client 111/111。
版本
v0.9.8(2026-11-08)
- 版本统一为 0.9.8:回退到 0.9.7 稳定基线,保留思考链/动效合集;
- 发送箭头替换为两个透明描边胶囊:Enter 发送、Esc 停止 AI;
- 胶囊位于输入卡右侧空白区,不遮挡麦克风/模型等按钮;
- 胶囊功能:Enter 复用原生发送/排队;Esc 优先点原生停止,否则双击 Esc;
- host 31/31 · client 111/111。
v0.9.7-1(2026-11-08)
- 回退到 0.9.7 基线,丢弃 0.9.8–0.9.27 的覆盖层/模糊实验;
- 发送键改为仅 UI:保留外观,但鼠标点击不再触发发送;发送使用 Enter / Ctrl+Enter;
- 输入卡、壁纸、正文对比保持 0.9.7 的稳定行为。
- host 31/31 · client 111/111。
v0.9.7(2026-11-06)
- 修复思考链“两条蓝色竖线”:AI 回复容器的左侧线现在排除包含 step/variant 的容器,只保留真正的回复块;
- 步骤行只匹配最深一层
[data-variant],避免内外两层同时画线; - pending 规则提高特异性,真正能在动画前隐藏条纹;启动时清理旧版残留 pending;队列溢出时也清理被丢弃行的 pending。
- 浏览器实测嵌套容器只有一条线。
- host 31/31 · client 111/111。
v0.9.6(2026-11-06)
- 批量插入修复:一次 DOM 变化插入多行思考步骤时,旧逻辑只给
querySelector找到的第一行排队,其余行保持静止;现在遍历全部匹配行,逐行动画。 - 清理动态模式遗留的锚点常量与参考线 CSS。
- 新增
ai-rows诊断的replayCount,便于确认新行是否真的触发。 - 全量动效 debug:WAAPI 单行/批量、diff 红绿、主题交叉淡化、毛玻璃开关、方块光标、发送键 hover 均已做浏览器实测。
- host 31/31 · client 111/111。
v0.9.5(2026-11-04)
- 修复输入后鼠标悬浮发送键闪烁:输入卡在所有毛玻璃模式下关闭
backdrop-filter,发送键去掉 hover 变色和过渡; - 保留卡片半透明渐变与阴影;
- 测试:host 31/31 · client 111/111。
v0.9.4(2026-11-04)
- 增加思考行计算样式诊断(
/diag的probe:"ai-rows"),用于确认条纹来源与动画是否实际生效; - 测试:host 31/31 · client 111/111。
v0.9.3(2026-11-03)
- 思考链入场动画改为只在新插入的行触发;流式文字更新不再重播,避免每 500ms 整行闪一次;
- 动画继续用 WAAPI,不依赖会被 React 重写的 class;pending 先隐藏条纹,动画启动再显示;
- 测试:host 31/31 · client 111/111。
v0.9.2(2026-11-03)
- 思考链条纹动画改用 WAAPI(
element.animate),不再依赖会被 React 重写掉的 class; - 流式文字更新时也先挂 pending 隐藏条纹,动画启动再显示;
- 动画统一挂在
[data-variant](渐变/细线同一节点),8px + opacity 0→1; - 测试:host 31/31 · client 111/111。
v0.9.1(2026-11-03)
- 思考链文件修改统计
+xx / -xx恢复常显绿色/红色(DSH 原生只在 hover/展开时上色)。 - 蓝条纹淡入只给新文字:启动后 2 秒历史加载窗口只登记不播放;已完成行重渲染/折叠/切主题不再重播。
- 新增回归测试;client 111/111。
v0.9.0(2026-10-31,清理版)
- 移除「动态」模式:删除动态分镜引擎、定位锚点/参考线、动态导入与预览入口,以及专用 2× 壁纸和分镜 JSON;主包只保留「关闭 / 静态(纹理|背景)」。
- 主题同步收敛:去掉
pendingDarkTheme兜底状态,启动/主题晚到/暗色候选晚到统一走一次同步;首装深色的状态请求直接带theme。 - 包体瘦身:发布 zip 不再包含
HANDOFF.md、动态专用资产(约 544KB)。 - 保留
backup/dynamic-mode-v0.8.49分支供本地继续研究;测试:host 31/31 · client 109/109。
v0.8.25(2026-10-25)
- 动态预览补全:「预览思考态」除了壁纸放大/真实输入卡片重排,还会画出输入气泡 / 思考链区的虚线示意框,并加暗角,方便看整套分镜构图;
- 分镜目标元素选择改为可见元素优先(多输入卡片/隐藏节点时选真正在屏幕上的那个),真实思考时的气泡/思考链/输入卡片重排更可靠;
- 离开动态分组时先停止分镜再切模式,避免壁纸 transform 残留到静态模式;
- 新增动态分镜探针(
/diag里probe:"dynamic"):上报候选输入卡片、选中的气泡/思考链、图层 transform,便于远程定位偏差; - 测试:host 30/30 · client 110/110。
v0.8.24(2026-10-25)
- 动态模式真实分镜:出现思考链时,壁纸按「思考中」分镜放大/平移,当前轮的用户气泡、思考链容器、输入卡片+发送键做真实 DOM transform 重排;
- AI 正式输出的第一个字出现时立刻恢复「开始前」布局(之后保持普通布局);新会话/停止同样恢复;
- 滚轮交互:思考分镜态任意滚轮先退出分镜,便于浏览旧消息;滚离底部后再回到底部上滑,可恢复分镜;
- 面板动态分组新增:预览思考态 / 导入分镜 JSON / 恢复默认分镜;内置设计器导出的三阶段布局,可随时覆盖;
- 修复回答过程中方块光标退回默认:新增光标看护(900ms 检查 + 重绑光标覆盖层/body 类);
- 测试:host 30/30 · client 110/110。
v0.8.23(2026-10-25)
- 动态参考线实时预览:动态分组面板新增「参考线:开/关」;打开后(或定位工具打开时)实时显示四个锚点的影响:
- 背景变化:锚点处双脉冲圆环;
- 输入气泡:锚点处幽灵气泡 + 指向当前输入区的虚线;
- 思考链起点 A/B:虚线连到当前思维链前两行(无思维链时连到输入区上方参考位);
- 拖动锚点时参考线实时更新(700ms 兜底刷新 + resize);参考线开关持久化
__dshui.dynamic.guides.v1; - API:
__DSHUI__.anchors.showGuides(bool)、__DSHUI__.anchors.guides(); - 测试:host 30/30 · client 109/109。
v0.8.22(2026-10-25)
- 新增模式层级:顶层 关闭 / 静态 / 动态;静态包含原有的「纹理 / 背景」;动态为「开发中」(暂复用静态渲染);
- 静态分组记忆最后一次使用的纹理/背景;分组选择持久化(
__dshui.group.v1);热键 Ctrl+Shift+Alt+1/2/3 对应 关闭/静态纹理/动态; - 动态定位功能(开发中):四个可保存锚点 —— 背景变化 / 输入气泡 / 思考链起点 A、B;面板「定位工具」可拖动、保存、重置,存
__dshui.dynamic.anchors.v1(视口百分比 0~1);API__DSHUI__.anchors.get/set/save/reset/openTool/closeTool; - 测试:host 30/30 · client 108/108。
v0.8.21(2026-10-25)
- 新开屏动画:接入「弧线定稿 v17a」;每次播放随机 AI 拟合 / 乱码生成(重播重新随机);隐藏开屏自带 CFG/欢迎卡片,跟随 DSH 深浅色;
- 欢迎卡片:不再挡顶部「打开侧边栏」按钮(右上角下移 64px);更小、半透明、跟随主题、2.4s 自动消失、任意操作立即消失;
- 追加信息气泡:
data-chat-flow-kind="steering"与普通用户消息一样套用气泡/毛玻璃视觉; - 方块光标:新增「光标模糊」滑块(0–16px,默认 5px,持久化 +
__DSHUI__.setCaretBlur);修复面板重播开屏后光标退回普通竖线; - 悬浮发送键闪烁排查:探针确认插件无抢修动作(合成层问题);壁纸层加
will-change、tooltip 不误清、去掉发送键 hover 过渡、纹理模式关闭输入卡片backdrop-filter;新增悬浮探针上报/diag; - 测试:host 30/30 · client 106/106。
v0.8.20(2026-10-22)
- 修复主题切换“黑罩/闪”互相冲突的根因:旧壁纸层的混合模式由
body[data-ds-dark-theme]的 CSS 规则控制,切主题瞬间被翻转;- 深→浅:旧深色图瞬间变
multiply压在新浅色 UI 上 = 黑色遮挡; - 浅→深:旧浅色图瞬间变
lighten压在新深色 UI 上 = 白闪; - 之前“隐藏旧图”能消黑罩但会空白闪,“旧图淡出”能消空白但会黑罩 —— 所以两个 bug 反复出现;
- 深→浅:旧深色图瞬间变
- 现在主题交叉淡化期间给两层分别钉住各自主题的混合模式(旧层保留旧主题的 lighten/multiply,新层用新主题的),淡化结束后再把内联值交还 CSS;
- 深→浅不再黑罩、浅→深不再白闪,且始终有壁纸覆盖(不隐藏、不空白);启动预解码两种壁纸保留;
- 测试:host 30/30 · client 102/102。
v0.8.19(2026-10-22)
- 撤销 0.8.18 的“隐藏旧壁纸”方案:隐藏再淡入会让壁纸瞬间消失(看起来像被删/空白闪);
- 主题切换恢复正常交叉淡化:旧图淡出的同时新图淡入,任何时刻都有图覆盖;
- 启动时预加载并
decode()两种主题的壁纸(保留 Image 引用),首次切换不等下载/解码; - 无全屏遮罩;浓度/毛玻璃补间与自家 GUI 颜色过渡保留;
- 测试:host 30/30 · client 102/102。
v0.8.18(2026-10-22)
- 修复首次深色→浅色切换的黑色遮挡:首次切换时浅色壁纸还没下载完,旧深色壁纸仍以深色浓度留在新浅色 UI 上 → 看起来像黑色遮罩;之后图片进缓存所以正常;
- 去掉 0.8.17 的全屏旧底色遮罩;
- 主题切换时旧壁纸先隐藏(不再做“深色旧图淡出”),新壁纸就绪后淡入;
- 启动时预加载「当前主题 + 另一主题」的壁纸,首次切换也不用等下载;
- 测试:host 30/30 · client 102/102。
v0.8.17(2026-10-22)
- 主题切换防闪修正:0.8.16 的遮罩晚了约 60ms 才插入(观察器里 setTimeout 去抖),新主题先画出来再盖旧底色 → 仍会闪一下;现在观察器回调里同步执行,遮罩赶在同一帧绘制前插入;
- 遮罩等壁纸就绪后再淡出:先盖住旧主题底色,等新壁纸加载完成(或 260ms 兜底)再淡出,避免“遮罩淡完了壁纸还没出来”的空白帧;
- 遮罩/补间不再跟随插件的「动效总开关」,只尊重系统「减弱动态效果」;关动效的用户切换主题也平滑;
- 测试:host 30/30 · client 102/102。
v0.8.16(2026-10-22)
- 主题切换柔化:深浅色切换时不再"啪"地整页跳变;
- 旧主题底色做一层全屏遮罩淡出(插件自己的节点,覆盖 DSH 原生 UI,不改宿主样式);
- 壁纸走交叉淡化,浓度/毛玻璃走补间;胶囊/面板/诊断/模式按钮加颜色过渡;
- 减少动态(系统减弱动态或关闭动效)时自动跳过全部过渡,行为与之前一致;
- 测试:host 30/30 · client 102/102。
v0.8.15(2026-10-22)
- 修真实 Host 里的壳补丁检测:Cordis Host 以
ELECTRON_RUN_AS_NODE运行,普通fs会把resources/app.asar当成虚拟目录(stat.size=0、open读不到字节),导致/restart-status.json永远patched:false:面板误报「壳补丁缺失」、每次启动还会白启动一次安装器。 现在读取原始 asar 全部走original-fs(不可用时临时process.noAsar=true兜底), 纯 Node/测试环境自动退化为普通 fs;restart-status.json新增asarPath/rawAsarFs便于诊断。 - 看护增强:标题栏整体重建时自动补回按钮;休眠恢复若没有 visibility/focus 事件,用计时器跳变(≥30s)
兜底检查并强制重绘;冲突让路时停看护;诊断新增
watchdog/repairs/lastRepairAt。 - 测试:host 29 → 30(新增 Electron 虚拟目录 + 注入原始 fs 的回归)、client 101 → 102 (新增「标题栏整体重建后看护重注入」回归与看护诊断字段)。
v0.8.14(2026-10-22)
- 修复休眠恢复后「重启」键短暂消失:标题栏「重启」是注入的 DOM;窗口长时间隐藏 / 系统休眠恢复、
或宿主重排菜单栏时,按钮可能被摘掉而「应用」「编辑」仍在。新增看护:
visibilitychange(变为可见)、window.focus、pageshow后立即检查,并用 1.5s 低频轮询 + 菜单栏childList观察兜底; 发现按钮不在菜单栏 → 自动重新注入(仍遵守与dsh-restart-key的双向冲突让路)。 - 关闭壁纸/背景模式不再摘重启键:
uninstall()增加keepRestart,关模式只拆视觉层; 只有__DSHUI__.uninstall()/ 卸载插件才摘按钮。 - 测试:host 29/29 · client 101/101(新增休眠看护、关闭模式保留重启键回归)。
v0.8.13(2026-10-22)
- 修复浅色主题被误判成深色:DSH 浅色底是 paper-white(
#f7f8fa类),旧兜底"非纯白即深色"导致浅色也套暗夜壁纸/深色参数,纹理与背景模式都出现一层灰罩; - 判定顺序改为:
body[data-ds-dark-theme]→color-scheme→ token 亮度(亮度 < 0.5 才算深色)→ 系统偏好;浅色不再误判; - 测试:host 29/29 · client 99/99(新增 paper-white 浅色回归)。
v0.8.12(2026-10-22)
- 深/浅色主题壁纸:深色用桌面
DeepSeek 暗夜模式.png(包内 webp 兜底),浅色不变;胶囊图片栏按主题切换,深浅偏好分开保存; - 深色独立参数:纹理浓度 0.85 / 背景 0.7,滑块分主题存储;深色纹理
lighten混合,暗夜图可见; - 主题切换全量重算面板/气泡等主题相关视觉;
- 深色 GUI 可读性:胶囊/面板/诊断深底浅字,激活胶囊按钮白底黑字(修复白底白字);
- 随包深色壁纸已去元数据;仓库历史中的本机路径已脱敏。
更早版本
0.8.0–0.8.11 的逐版本记录见 HANDOFF.md 与 GitHub Releases;0.7.x 及以前为旧包名 dsh-dsniang-beautify 时代。
隐私
- 不收集、不上传任何数据;设置仅保存在本机
localStorage; - 壁纸图片仅从本机桌面/包内读取,不写入用户目录;
- 仓库与发布包不包含本机用户名、绝对用户路径等个人信息。
License
MIT。开屏动画为项目自带的单文件页面(历史版本结构参考 MIT 项目 dsh-startup-screen);DSH 为其各自权利人的产品,本项目与官方无隶属关系。
English summary
DSH UI Beautify — a lightweight UI beautifier for the DSH desktop app: wallpaper + glass (texture/backdrop modes, adjustable opacity, frosted surfaces, bubble visuals), theme-aware wallpapers (dark mode uses the desktop DeepSeek 暗夜模式.png with a bundled assets/deepseek-dark.webp fallback; light mode unchanged), dark-mode-specific opacity defaults, startup splash, block caret, AI-thinking visual effects and a title-bar restart key (optional shell patch; cooperates with dsh-restart-key).
Install: unzip, install the folder as a local DSH plugin (file:C:/path/to/dsh-ui-beautify), restart DSH. Shortcuts: Ctrl+Shift+Alt+1/2/D/I/M. Diagnostics: on-screen panel, /dsh-ui-beautify/status.json, /dsh-ui-beautify/diag.json.
No network, no telemetry, no user-data collection; settings live in localStorage only. Tests: host 30/30, client 102/102. MIT license; see HANDOFF.md for detailed development notes.
No comments yet. Be the first to write one.