上传壁纸与动图,调色并保存专属界面方案
30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Chang-An2002/dsh-diy-skin该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/29) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 57 处,展示前 50 条)
- 读取本地文件analysis/blue-audit.mjs:74
const source = readFileSync(clientPath, 'utf8'); - 读取本地文件analysis/embed-consumers.mjs:152
const source = readFileSync(CLIENT, 'utf8'); - 读取本地文件analysis/embed-consumers.mjs:213
const docStale = !existsSync(REACH) || readFileSync(REACH, 'utf8') !== doc; - 读取本地文件analysis/embed-consumers.mjs:213
const docStale = !existsSync(REACH) || readFileSync(REACH, 'utf8') !== doc; - 写入本地文件analysis/embed-consumers.mjs:222
writeFileSync(CLIENT, next); - 写入本地文件analysis/embed-consumers.mjs:223
writeFileSync(REACH, doc); - 读取本地文件analysis/fix-css-backticks.mjs:24
const source = readFileSync(CLIENT, 'utf8'); - 写入本地文件analysis/fix-css-backticks.mjs:49
writeFileSync( - 读取本地文件analysis/lib/asar-css.mjs:166
const source = readFileSync(clientPath, 'utf8'); - 读取本地文件analysis/palette-defaults.mjs:168
const client = readFileSync(CLIENT, 'utf8'); - 读取本地文件analysis/plugin-guards.mjs:31
const client = readFileSync(join(root, 'client.js'), 'utf8'); - 读取本地文件analysis/plugin-guards.mjs:88
check(existsSync(reachPath), 'KNOB-REACH.md is present'); - 读取本地文件analysis/plugin-guards.mjs:89
if (existsSync(reachPath)) { - 读取本地文件analysis/plugin-guards.mjs:90
const reach = readFileSync(reachPath, 'utf8'); - 读取本地文件analysis/plugin-guards.mjs:136
const raw = readFileSync(join(root, 'package.json')); - 读取本地文件analysis/pubcheck.mjs:47
const read = (relative) => readFileSync(join(ROOT, relative), 'utf8'); - 读取本地文件analysis/pubcheck.mjs:63
if (!existsSync(MANIFEST)) { - 读取本地文件analysis/pubcheck.mjs:67
const raw = readFileSync(MANIFEST); - 读取本地文件analysis/pubcheck.mjs:89
if (!existsSync(path)) { - 读取本地文件analysis/pubcheck.mjs:93
const text = readFileSync(path, 'utf8'); - 写入本地文件analysis/pubcheck.mjs:99
writeFileSync(path, text.split(previous).join(next)); - 读取本地文件analysis/pubcheck.mjs:105
return existsSync(path) && readFileSync(path, 'utf8').includes(previous); - 读取本地文件analysis/skin-desktop-audit.mjs:7
const catalog = JSON.parse(readFileSync(CATALOG, 'utf8')); - 读取本地文件analysis/theme-surface.mjs:187
`${(statSync(ASAR).size / 1024 / 1024).toFixed(1)} MB)`, - 读取本地文件analysis/theme-surface.mjs:293
return readFileSync( - 写入本地文件analysis/theme-surface.mjs:365
writeFileSync(OUT, lines.join('\n') + '\n', 'utf8'); - 读取本地文件dsh-diy-skin/preview/embed-logo.mjs:31
if (!existsSync(asarPath)) throw new Error(`asar not found: ${asarPath}`); - 读取本地文件dsh-diy-skin/preview/embed-logo.mjs:66
const client = readFileSync(CLIENT, 'utf8'); - 写入本地文件dsh-diy-skin/preview/embed-logo.mjs:82
writeFileSync(CLIENT, client.slice(0, start) + block + client.slice(end + END.length), 'utf8'); - 读取本地文件preview/check-host-import.mjs:37
const pkg = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8')); - 读取本地文件preview/check-host-import.mjs:40
console.log('client bundle :', clientRel, existsSync(clientPath) ? '(exists)' : '(MISSING)'); - 读取本地文件preview/check-host-import.mjs:42
const client = readFileSync(clientPath, 'utf8'); - 读取本地文件preview/check-host-import.mjs:54
if (bootJson && existsSync(bootJson)) { - 读取本地文件preview/check-host-import.mjs:55
const boot = JSON.parse(readFileSync(bootJson, 'utf8')); - 读取本地文件preview/check-patch.js:9
const raw = fs.readFileSync(patchPath); - 读取本地文件preview/check-patch.js:37
const stat = fs.existsSync(name) ? fs.statSync(name) : undefined; - 读取本地文件preview/check-patch.js:47
if (fs.existsSync(candidate)) { pkgJson = candidate; break; } - 读取本地文件preview/check-patch.js:52
const pkg = JSON.parse(fs.readFileSync(pkgJson, 'utf8')); - 读取本地文件preview/check-patch.js:58
` client bundle: ${clientRel} ${clientPath && fs.existsSync(clientPath) ? '(exists)' : '(MISSING)'}`, - 读取本地文件preview/check_install.js:6
const pkg = JSON.parse(fs.readFileSync(path.join(dir, 'package.json'), 'utf8')); - 读取本地文件preview/check_install.js:7
const has = (rel) => fs.existsSync(path.join(dir, rel)); - 读取本地文件preview/check_install.js:17
const src = fs.readFileSync(path.join(dir, 'client.js'), 'utf8'); - 读取本地文件preview/check_install.js:32
const host = fs.readFileSync(path.join(dir, 'index.js'), 'utf8'); - 读取本地文件preview/probe-server.js:10
const raw = fs.readFileSync(CRED, 'utf8'); - 发起网络请求preview/probe-server.js:39
const res = await fetch(url, { headers }); - 读取本地文件preview/show-tokens.js:3
const text = fs.readFileSync(process.argv[2], 'utf8'); - 读取本地文件preview/show-tokens.js:42
if (dir && fs.existsSync(dir)) { - 读取本地文件preview/show-tokens.js:43
for (const file of fs.readdirSync(dir)) { - 读取本地文件preview/show-tokens.js:45
if (!fs.statSync(p).isFile() || !file.endsWith('.js')) continue; - 读取本地文件preview/show-tokens.js:46
const src = fs.readFileSync(p, 'utf8');
扫描于 2026/11/3(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DSH插件:可添加壁纸、图片、GIF,自定义并保存UI配色方案(零运行时依赖)
README
由 DeepSeek 最新模型翻译生成dsh-diy-skin
一个给 DSH 用的皮肤插件:可以自己上传静态图片、GIF、壁纸(位于整个界面底部),图片可以调整位置、大小、模糊、透明度、去白底;22 个配色旋钮、可以把自定义的UI配色保存为独立方案;左下角显示当前账户余额,每15分钟刷新。零依赖,即装即用。
安装
前提:DeepSeek Harness 桌面端应用(Web 端没有测试过,见下)。
1. 侧栏打开「插件」面板 → 添加插件 → 输入包名 dsh-diy-skin → 确认
2. 重启应用
3. 左下角出现「背景」入口,点它开始编辑
也可以手动改 profile 的 package.json:加一行 "dsh-diy-skin": "^1.30.3",然后在 profile 目录跑 pnpm install。
实测范围
下面这些是真的跑过的,不是"理论上应该可以":
- 平台:Windows + 桌面端应用,以及本机已安装的那个 DSH 版本
- 功能:界面挂载、背景图片(拖动 / 滚轮 / 四角拉伸)、去白底(容差与收边)、22 个配色旋钮与自定义方案的存取、余额芯片、右键图片小窗、动图(GIF)、存储读数与上限测量
Web 端(浏览器里的 DSH)从未运行验证过,表现未知;代码里有一部分是桌面端专属的(例如 Windows 标题栏那条修正),在 Web 端不生效。
展开完整文档(README 剩余 1 节)
dsh-diy-skin 一个给 DSH 用的皮肤插件:可以自己上传静态图片、GIF、壁纸(位于整个界面底部),图片可以调整位置、大小、模糊、透明度、去白底;22 个配色旋钮、可以把自定义的UI配色保存为独立方案;左下角显示当前账户余额,每15分钟刷新。零依赖,即装即用。 安装 前提:DeepSeek Harness 桌面端应用(Web 端没有测试过,见下)。 1. 侧栏打开「插件」面板 → 添加插件 → 输入包名 dsh-diy-skin → 确认 2. 重启应用 3. 左下角出现「背景」入口,点它开始编辑 也可以手动改 profile 的 package.json:加一行 "dsh-diy-skin": "^1.30.3",然后在 profile 目录跑 pnpm install。 实测范围 下面这些是真的跑过的,不是"理论上应该可以": - 平台:Windows + 桌面端应用,以及本机已安装的那个 DSH 版本 - 功能:界面挂载、背景图片(拖动 / 滚轮 / 四角拉伸)、去白底(容差与收边)、22 个配色旋钮与自定义方案的存取、余额芯片、右键图片小窗、动图(GIF)、存储读数与上限测量 Web 端(浏览器里的 DSH)从未运行验证过,表现未知;代码里有一部分是桌面端专属的(例如 Windows 标题栏那条修正),在 Web 端不生效。 从这里去哪 - dsh-diy-skin/README.md —— 插件自己的文档:它做了什么、怎么装、怎么用、有哪些限制 - dsh-diy-skin/DESIGN.md —— 设计记录:每个决定的理由、量出来的数字、踩过的坑 - dsh-diy-skin/KNOB-REACH.md —— 每个旋钮对应界面上哪一处(实测) - dsh-diy-skin/THEME-SURFACE.md —— 应用自身的可调 token 与消费方全景 仓库结构 | 目录 | 是什么 | | dsh-diy-skin/ | 插件本体(发布到 npm 的就是这个目录) | | analysis/ | 校验脚本:发布检查、主题守卫、冻结色审计、从已安装应用里实测 token | | preview/ | 插件加载检查、探针、logo 提取 | 每次改动后跑这几条 node analysis/fix-css-backticks.mjs --check # 只检查;去掉 --check 才会真的修 node dsh-diy-skin/test/client.test.mjs # 74 条测试 node analysis/plugin-guards.mjs # 结构守卫 node analysis/blue-audit.mjs # 没有游离的蓝色 node analysis/palette-defaults.mjs # 旋钮默认值 vs 已安装应用 node analysis/embed-consumers.mjs --check # 文档里的数字还与代码一致 node analysis/pubcheck.mjs # 发布就绪清单 许可 MIT。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Chang-An2002/dsh-diy-skin
上传壁纸与动图,调色并保存专属界面方案
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这是你的仓库?认领条目