WTStarMark/dsh-myskin ↗★ 1

dsh-myskin

DSH 通用皮肤框架:可视化自定义 + 实时预览 + 「皮肤管理」设置页。非侵入式、可逆覆盖层;适配 DSH 0.1.7-rc.2 / 0.2.0-rc.1(Web 与 Desktop 共用同一条客户端插件管线)。 适合想要深度定制DSH界面外观、换肤且不破坏原生源码的个性化用户。

パッケージ
dsh-myskin
互換性
未検証
Cordis ピア範囲
~4.0.4
バージョン
0.3.8
ライセンス
MIT
最終更新
2026/09/29

インストール

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:WTStarMark/dsh-myskin

ドキュメント

README 全文を読む ↗

dsh-myskin (v0.3.8)

DSH 通用皮肤框架:可视化自定义 + 实时预览 + 「皮肤管理」设置页,Web 与 Desktop 共用同一套客户端插件管线。

皮肤是一层完全可逆的覆盖层:不改 DSH 源码、不动 DSH 进程;关掉开关或点「还原默认」即回到原生外观。

适配 DSH 0.1.7-rc.2 与 0.2.0-rc.1(Web 与 Desktop)。


目录


这是什么

一句话:把 DSH 变成你自己的样子,而且随时能变回去。

  • 不侵入:所有改动都写在插件自己的条目里(皮肤文档 + 一个自有 ``),不碰 DSH 的源码、配置与进程。
  • 可逆:每个字段都能逐项清除,「还原默认」或关掉「启用皮肤」即精确还原。
  • 可视化:内置「绘制模式」画布编辑器——在真实页面上点选元素改样式、改文字、换字体、挪位置,边改边看。
  • 可搬运:整套皮肤连同图片、字体打包成 .dshskin(类 zip 容器),换机器/换 profile 一键导入。

能做什么

皮肤管理页(设置 →「皮肤管理」)

能力说明
启用 / 停用一键开关整套皮肤;停用即完全还原
预设主题深海 / 暖阳 / 极夜等一键换肤(走官方令牌通道)
实时预览不写入文档也能先看效果
绘制模式在真实页面上可视化编辑(见下节)
皮肤库保存 / 重命名 / 上移下移 / 复制 / 加载 / 删除多个命名皮肤
导出 / 导入皮肤包 .dshskin

绘制模式(画布编辑器)

进入方式:设置 →「皮肤管理」→ 绘制模式。设置弹窗会关闭,真实页面内缩,顶部出现工具条、右侧出现面板——不是复制一份界面,就在真实页面上改。

选中元素

  • 选择模式:悬停即显示虚线框与标签(button#go.btn · 发送),点击选中;交互模式:正常使用页面(滚动、点按钮不会误选)。
  • 面板顶部 ↑ 父级 / ↓ 子级(Alt+↑ / Alt+↓)按真实 DOM 一次走一级。
  • 快捷键:Esc 取消选择(再按退出并保存)、Ctrl/Cmd+Z 撤销、Ctrl/Cmd+Shift+Z 重做——在输入框里不会抢键。

改样式(右侧面板,可折叠)

  • 分组:文字 / 盒子 / 外观 / 位置与缩放 / 元素操作,标题带「自定义 N」计数。
  • 每个已生效的字段都能单独清除(×),不用为改一个属性去清空整个元素。
  • 字段改动即时预览;隐藏控件(保留占位)/ 移除控件(不占位)都是纯 CSS,不删除真实节点。
  • 值一律走 --dsw-* 令牌与真实 CSS,深浅色主题自动跟随。

位置与缩放

  • X / Y 位移、等比缩放(带滑块);数值框上滚轮微调(X/Y ±1px、缩放 ±0.05,按住 Shift 步长 ×5/×10)。
  • 画布上选中框左上角 ✥ 拖动=双轴移动,右下角手柄拖动=等比缩放。
  • 每个轴独立重置(↺),也可以一次「重置变换(三轴)」。
  • 对齐线(低敏吸附):移动或缩放时,元素与同级/父级元素的边与中线、以及视口中线在 4px 内会自动吸附, 并在画布上画出对齐线;磁力很小(4px)且只在已经接近时生效,按住 Alt 可临时关闭,工具条「对齐」可整体开关。
  • 只做视觉位移/缩放,不改变布局流;归零即删除 transform,不留 transform: none。

文字与字体

  • 「编辑文字」:自动定位真正承载文字的节点(含灰色的默认占位文字),边输入边预览,回车或「应用文字」写入草稿。
  • 「字体」:可直接填任意字体栈(含系统字体),或用建议列表(PingFang SC / Microsoft YaHei / Noto Sans CJK SC / HarmonyOS Sans / JetBrains Mono …)。
  • 嵌入字体文件:.woff2/.woff/.ttf/.otf(≤ 30 MB)随皮肤保存;超过 2 MB 会明确提示代价(见下)。
  • 应用到整页:把当前字体写到 body,整站生效(body 无法在画布上点选,所以单给一个入口)。

画面

  • 背景图(壁纸)+ 背景强度滑块(拖动即时预览、松手自动保存)。
  • 嵌入图片:先选中一个容器,再选图;可拖动、缩放、调不透明度与混合模式。
  • 令牌面板:按背景 / 边框 / 品牌色 / 文字 / 按钮 / 交互分组,逐项覆盖 --dsw-*。
  • 工具条可收起右侧面板看整页;所有面板、工具条、选中框都是插件自有层,退出即消失。

保存 / 应用 / 关闭

按钮行为
保存写入皮肤文档并留在绘制模式继续编辑(不改变皮肤的启用状态)
应用写入 + 启用,并退出绘制模式
✕ 关闭有未保存改动时先保存再退出;保存失败会保留编辑器并说明原因

皮肤包 .dshskin

「导出皮肤」产出的是一个标准 ZIP(任何解压工具都能打开),把"配置"和"素材"分开存:

条目内容
manifest.json完整配置:令牌、CSS、文字替换、画布(背景/图片)、图层、皮肤库,以及格式版本、生成器、时间戳与资源清单(路径/类型/MIME/字节数)
assets/…原样的图片与字体文件(不是 base64)
README.txt包内说明
  • 省体积:base64 变二进制文件。一份实测主题:351 KB 的 JSON → 141 KB 的皮肤包(−59.8%)。
  • 可换素材:解开 zip,把 assets/ 里的图/字体换成同名同格式的文件,重新打包即可导入。
  • 兼容:旧版 .json 导出仍可导入;包内资源缺失或损坏会明确报错,不会导入半个皮肤。

安装(最新版 DSH)

给已经装好并能启动的 DSH 加一个第三方插件。本插件是 profile bundle(包内自带 cordis.patch.yml,声明条目 dsh-myskin),所以只需要"装进某个 profile + 在它的 dsh.profile.bundles 里声明一次"。

方式一:用 DSH 内置的「添加插件」(推荐)

打开 设置 → 插件(Plugins)→ 添加插件,在输入框里填下面任意一种,选好安装源,点「安装」:

输入例子说明
GitHub 仓库地址https://github.com/WTStarMark/dsh-myskin走 git 安装;也可写 github:WTStarMark/dsh-myskin,需要固定版本就加 #v0.3.8
npm 包名dsh-myskin走所选安装源(registry.npmmirror.com = 中国大陆镜像源)
本地目录路径~/dsh-plugins/dsh-myskin-0.3.8等价于 link:,改源码即时生效
  • 「安装源」只影响 npm 包;填 GitHub 地址时走 git,不受它影响。
  • 安装由 pnpm 执行,机器上需要有 pnpm。
  • 安装完成后,插件管理器会自动把 dsh-myskin 写进当前 profile 的 dsh.profile.bundles——不需要手改配置文件。
  • 请注意界面上的提醒:插件暂不支持自动更新;升级请先在插件页卸载,再安装新版本。
  • 只想给桌面端装,就在桌面版里对同一个地址再装一次(Web 与 Desktop 是两个 profile,皮肤文档也各自独立)。

方式二:离线 / 手动安装(用打包好的 zip)

  1. 解压插件包 dsh-myskin-0.3.8.zip:

    # 有 unzip 就用它;没有就用 python3(zip 是标准格式)
    python3 -c "import zipfile; zipfile.ZipFile('dsh-myskin-0.3.8.zip').extractall('$HOME/dsh-plugins')"
    
  2. 放进目标 profile(目录名必须是 dsh-myskin):

    DSH_HOME="${DSH_HOME:-$HOME/.dsh}"
    PROFILE="$DSH_HOME/profiles/web"          # 桌面版改成 profiles/desktop
    mkdir -p "$PROFILE/node_modules"
    cp -r ~/dsh-plugins/dsh-myskin-0.3.8 "$PROFILE/node_modules/dsh-myskin"
    # 或软链(改包即时生效):ln -sfn ~/dsh-plugins/dsh-myskin-0.3.8 "$PROFILE/node_modules/dsh-myskin"
    
  3. 在 $PROFILE/package.json 的 dsh.profile.bundles 末尾追加 "dsh-myskin"(不要删掉原有条目):

    {
      "dsh": {
        "profile": {
          "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-myskin"],
          "patchReload": "live"
        }
      }
    }
    
  4. 生效:patchReload: live 时保存后刷新页面即可;没反应就重启 DSH(由你操作,本插件从不重启 DSH)。

装上了吗

  1. 设置里出现 「皮肤管理」 → 成功。

  2. 只用命令行确认宿主半区(把 换成实际安装目录):

    node --input-type=module -e "const m = await import('
    

/lib/index.js'); console.log(Object.keys(m))"

期望输出:[ 'Config', 'apply', 'name' ]


### 卸载 / 回滚

- **用界面装的**:插件页对该插件选「卸载」(它同时会从 `dsh.profile.bundles` 移除)。
- **手动装的**:从 `dsh.profile.bundles` 移除 `"dsh-myskin"`,删掉 `$PROFILE/node_modules/dsh-myskin`(或解除软链),刷新页面或重启 DSH。
- 皮肤文档仍留在该 profile 的 `cordis.patch.yml` 里;想彻底清干净,先「导出皮肤」备份,再删掉该条目。

---
## 快速上手

1. **设置 →「皮肤管理」**:选一个预设主题 → 点 **应用**。
2. 点 **绘制模式**:在真实页面上点选一个元素,右侧改颜色/字号,或直接在「编辑文字」里改文案(边打边变)。
3. **保存**(继续调)或 **应用**(写入并退出绘制模式)。
4. **导出皮肤**:得到 `.dshskin` 备份,换机器或换 profile 时 **导入皮肤** 即可。

---

## 数据与持久化

- 皮肤文档保存在**该 profile 的** `cordis.patch.yml`(插件条目 `dsh-myskin` 的 `config`)。
- 由于文档跟着 profile 走,**Web 与 Desktop 的皮肤互不共享**——用 `.dshskin` 导出/导入搬运。
- 「皮肤库」可以存多套命名皮肤,随时切换。
- 关掉「启用皮肤」= 页面完全还原(文档仍保留,随时再打开)。

---

## 常见问题

**Q:启动时报 `dsh-myskin (dsh-myskin): failed to import`?**
这句由 DSH 的启动器在"Loader 没拿到 fiber"时记下,**真实异常被吞掉了**。按顺序排查:

1. 目录名/位置对不对:必须是 `$PROFILE/node_modules/dsh-myskin`,里面能看到 `lib/index.js` 与 `cordis.patch.yml`;
2. 宿主半区能否独立导入:`node --input-type=module -e "await import('
/lib/index.js')"` —— 能打印 `Config,apply,name` 就没问题(本包的 `lib/index.js` 自带依赖,**解压/拷贝/软链三种装法都不需要 `node_modules`**);
3. 该 profile 的 `dsh.profile.bundles` 里是否真的写了 `dsh-myskin`;
4. 还不行就重启 DSH(`patchReload: live` 才热更)。

**Q:点「应用」提示保存失败?**
多半是文档太大。壁纸/嵌入图会按最长边自动压缩,但**嵌入字体是原样保存的**:超过 2 MB 就会让每次保存都变慢,太大可能直接被拒绝。建议整站字体用系统字体名,或使用子集化后的 `.woff2`。

**Q:改了没效果?**
确认「启用皮肤」是打开的;再看当前是哪个 profile(Web 里改的不会出现在 Desktop);用「实时预览」先确认改动本身有效。

**Q:绘制模式里设置弹窗位置怪怪的?**
这是有意的:绘制模式下真实页面会内缩,设置弹窗遵守同一条内缩规则,所以它落在应用区里居中,而不是被工具条/面板盖住。

**Q:怎么把皮肤带回原生?**
「皮肤管理 → 还原默认」清空整套皮肤;或关掉「启用皮肤」。两者都不影响 DSH 自身。

---

## 兼容性

| 项目 | 状态 |
|---|---|
| DSH `0.1.7-rc.2` | 已适配 |
| DSH `0.2.0-rc.1` | 已适配 |
| 平台 | DSH Web 与 DSH Desktop(Windows / macOS / Linux 上的桌面壳同理) |
| DSH `