deepseek-harness
starsstreaming/beautiCode为 DSH Web 与 Desktop 设置本地图片与 MP4 视频背景(也支持 Codex、Cursor、豆包、WorkBuddy):侧栏「背景」面板、可保存命名主题、声音开关、恢复上次背景、只留背景的摸鱼模式,以及 /bg、/bg-theme、/bg-clear 命令。
DeepSeek Harness 外观自定义:主题调色、壁纸与视频背景、半透明与毛玻璃。
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)。
毛玻璃与多维独立半透明机制 —— 主面板、侧边栏、设置与弹窗、输入框、代码块均拥有独立的 0%~100% 连续不透明度滑块,互不干扰(彻底解决主面板全透时设置弹窗看不清字的问题)。毛玻璃强度(`glassBlur`)与背景模糊(`backgroundBlur`)完全解耦:背景模糊仅作用于底层壁纸/视频,而毛玻璃精准作用于侧边栏、输入框、斜杠命令(/)浮层、消息气泡、代码块、设置弹窗及弹窗外围遮罩。行内代码等强调字保留低透明度主色相,配合「强调字浓度」滑块精细微调;中性控件 hover 状态同步烘焙透明度,鼠标悬停平滑自然,绝不闪现死白/死黑的实心水泥块(解决 hover snapped opaque)。
背景三层架构与氛围 —— 独创三层渲染架构:底层基础画布(承载自定义纯色背景)、中层媒体层(承载壁纸/视频的独立不透明度与模糊)、顶层防眩光遮罩(随深浅色模式自动配色的纱帘渐变)。调低壁纸不透明度时平滑融入自定义背景底色,消除白斑;遮罩层有效保证亮图之上的文字易读性。
双模式专属预设 —— 浅色 5 款专属预设(晨曦、云天、薄荷、樱粉、雅灰)+ 深色 6 款经典预设(默认、午夜、海洋、森林、玫瑰、单色),一键应用并支持自由微调。
配色方案分享 —— 一键导出配色 JSON 至剪贴板,粘贴即可导入应用;欢迎在 GitHub Discussions 社区分享交流你的专属配色方案。
所有修改实时生效,无需刷新,无需保存。
dsh plugin --profile <name> add dsh-ui-appearancepowershell -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 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 外扩延伸,彻底消除屏幕四周半透明羽化白边;毛玻璃强度(glassBlur)则解耦为组件级 backdrop-filter,并在侧边栏([class*="_sidebarCol"]::before)与输入框卡片([data-composer-card]::before)采用伪元素隔离技术,既不捕获 Windows 桌面端 position: fixed 标题栏按钮,也不形成 CSS Backdrop Root 裁剪斜杠命令(/)浮层 交互悬停闭环 · 中性控件与操作按钮的 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(),拖动滑块时自动冻结全局 CSS 过渡动画确保 60fps 丝滑跟手;若设备性能有限可直接将“毛玻璃”和“背景模糊”滑块归零关闭。desktop,Web 版通常为 web;可运行 dsh plugin list 检查)。pnpm prepare 生成 lib/ 产物,并重启 DSH 服务(如 dsh web)。Ctrl + F5(Mac 为 Cmd + Shift + R)强制刷新浏览器,清除前端旧缓存。z-index: -1,并通过将官方底座 --dsw-alias-bg-base 设为 transparent 实现透光。若您同时启用了第三方实心全量皮肤(如部分强制给 body 或 #root 赋予了不透明背景色的主题插件),底部的天窗会被堵住。建议排查并停用全实心第三方皮肤,或在其设置中降低不透明度。backdrop-filter)需要组件底色处于半透明状态才能透出背后的磨砂画面。若对应的「侧边栏不透明度」「输入框不透明度」或「设置与弹窗不透明度」仍在 100%(纯实心),实心底色会遮住毛玻璃效果;只需将其调低至 40%~80% 即可呈现通透的磨砂玻璃质感。0% 让聊天区完整透出壁纸,同时将「设置与弹窗不透明度」保留在 80%~95% 并开启「毛玻璃」,兼顾全透壁纸与设置弹窗的高可读性。.mov 容器或特定音频轨),会导致解码失败。建议使用转码工具(如 HandBrake 或 FFmpeg)将其转码为标准的 H.264 MP4 格式后再次上传。deleteImage 与 deleteVideo 清理 IndexedDB 中的旧 Blob 记录,绝不会残留孤儿文件。localStorage 中,图片与视频本体保存在 IndexedDB 中。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。174 个 vitest 测试全绿(独立仓库可独立运行),CI 构建与产物断言全绿。
MIT