一键换肤并实时调节壁纸与配色参数
33.4/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add mysn777/dsh-skin-kit该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · vision
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 76 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-skin-kit(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=18.17 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/17 15:06:33
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 71 处,展示前 56 条)
- 发起网络请求lib/client.js:1076
return fetch(SKIN_KIT_API + path, { credentials: 'same-origin' }).then(function (res) { - 发起网络请求lib/client.js:1083
return fetch(SKIN_KIT_API + path, { - 发起网络请求lib/client.js:1101
return fetch(SKIN_KIT_API + '/wallpaper' + query, { - 写入本地文件bin/dsh-skin-kit.mjs:321
writeFileSync(out, `${JSON.stringify(pack, null, 2)}\n`, 'utf8'); - 读取本地文件bin/dsh-skin-kit.mjs:330
const pack = JSON.parse(readFileSync(resolve(process.cwd(), file), 'utf8')); - 读取本地文件src/host/index.mjs:49
return JSON.parse(readFileSync(join(here, '..', '..', 'package.json'), 'utf8')).version ?? '?'; - 读取本地文件src/host/index.mjs:327
size = statSync(found.file).size; - 读取本地文件src/host/index.mjs:339
createReadStream(found.file).pipe(res); - 读取本地文件src/host/index.mjs:367
const stat = statSync(file); - 读取本地文件src/host/index.mjs:380
createReadStream(file).pipe(res); - 执行外部命令固定命令src/diy.mjs:27
const probe = spawnSync('ffmpeg', ['-version'], { stdio: 'ignore' }); - 执行外部命令固定命令src/diy.mjs:36
const result = spawnSync('ffmpeg', args, { - 读取本地文件src/diy.mjs:165
if (!existsSync(file)) throw new Error(`找不到素材文件:${file}`); - 读取本地文件src/diy.mjs:167
const originalBytes = statSync(file).size; - 读取本地文件src/diy.mjs:190
report.optimizedBytes = statSync(out.file).size; - 读取本地文件src/diy.mjs:214
const bytes = readFileSync(payloadPath); - 删除本地文件递归src/diy.mjs:215
if (tempDir) rmSync(tempDir, { recursive: true, force: true }); - 写入本地文件src/diy.mjs:258
writeFileSync(temp, bytes); - 删除本地文件递归src/diy.mjs:269
rmSync(dir, { recursive: true, force: true }); - 读取本地文件src/profile.mjs:39
if (!existsSync(dir)) return []; - 读取本地文件src/profile.mjs:40
return readdirSync(dir).filter((entry) => existsSync(join(dir, entry, 'package.json'))); - 读取本地文件src/profile.mjs:40
return readdirSync(dir).filter((entry) => existsSync(join(dir, entry, 'package.json'))); - 读取本地文件src/profile.mjs:56
if (!existsSync(file)) throw new Error(`profile ${profile} 不存在(找不到 ${file})`); - 读取本地文件src/profile.mjs:57
return JSON.parse(readFileSync(file, 'utf8')); - 读取本地文件src/profile.mjs:64
if (existsSync(file)) { - 写入本地文件src/profile.mjs:67
if (!existsSync(backup)) writeFileSync(backup, readFileSync(file)); - 写入本地文件src/profile.mjs:71
writeFileSync(tmp, `${JSON.stringify(manifest, null, 2)}\n`, 'utf8'); - 写入本地文件src/profile.mjs:72
renameSync(tmp, file); - 删除本地文件src/profile.mjs:83
rmSync(join(dir, victim)); - 删除本地文件递归src/profile.mjs:93
rmSync(target, { recursive: true, force: true }); - 写入本地文件src/profile.mjs:94
mkdirSync(dirname(target), { recursive: true }); - 写入本地文件src/profile.mjs:113
mkdirSync(nm, { recursive: true }); - 删除本地文件递归src/profile.mjs:115
rmSync(link, { recursive: true, force: true }); - 删除本地文件递归src/profile.mjs:170
rmSync(link, { recursive: true, force: true }); - 删除本地文件递归src/profile.mjs:171
if (!keepData) rmSync(join(home, 'skin-kit'), { recursive: true, force: true }); - 删除本地文件递归src/profile.mjs:172
else rmSync(pluginDir(home), { recursive: true, force: true }); - 读取本地文件src/store.mjs:84
if (!existsSync(dir)) mkdirSync(dir, { recursive: true }); - 写入本地文件src/store.mjs:84
if (!existsSync(dir)) mkdirSync(dir, { recursive: true }); - 写入本地文件src/store.mjs:91
writeFileSync(tmp, `${JSON.stringify(value, null, 2)}\n`, 'utf8'); - 写入本地文件src/store.mjs:92
renameSync(tmp, file); - 读取本地文件src/store.mjs:97
return JSON.parse(readFileSync(file, 'utf8')); - 读取本地文件src/store.mjs:184
if (!existsSync(dir)) return []; - 读取本地文件src/store.mjs:186
for (const entry of readdirSync(dir)) { - 读取本地文件src/store.mjs:190
const recipe = normalizeRecipe({ ...JSON.parse(readFileSync(file, 'utf8')), builtin }); - 读取本地文件src/store.mjs:231
if (!existsSync(file)) return false; - 删除本地文件src/store.mjs:232
rmSync(file); - 写入本地文件src/store.mjs:251
if (!existsSync(file)) writeFileSync(file, bytes); - 删除本地文件src/store.mjs:336
rmSync(join(dir, entry)); - 读取本地文件src/build.mjs:54
parts.push(deEsm(readFileSync(join(root, file), 'utf8'), file)); - 读取本地文件src/build.mjs:57
parts.push(deEsm(readFileSync(join(root, CLIENT), 'utf8'), CLIENT)); - 写入本地文件src/build.mjs:92
mkdirSync(dirname(target), { recursive: true }); - 读取本地文件src/build.mjs:95
previous = readFileSync(target, 'utf8'); - 写入本地文件src/build.mjs:100
writeFileSync(target, source, 'utf8'); - 发起网络请求src/client/main.js:195
return fetch(SKIN_KIT_API + path, { credentials: 'same-origin' }).then(function (res) { - 发起网络请求src/client/main.js:202
return fetch(SKIN_KIT_API + path, { - 发起网络请求src/client/main.js:220
return fetch(SKIN_KIT_API + '/wallpaper' + query, {
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
1 张 · 点击查看大图功能亮点
- 一键换肤
- 实时调节壁纸配色
- 图片视频DIY皮肤
DeepSeek Harness 皮肤工具箱,内置 10 款壁纸,支持实时调参和图片/视频 DIY 皮肤。
README
由 DeepSeek 最新模型翻译生成dsh-skin-kit
给 DeepSeek Harness(DSH)换皮肤的工具箱。装一次,之后全在界面里点。
English · 功能规划与架构 · 做自己的皮肤 · 故障排查
Node.js >=18.17 License: MIT
DSH Desktop using the Glacier River default wallpaper
它能做什么
- 十套内置壁纸皮肤,一张壁纸对应一套完整配色:云海星球、比奇堡晴日、白崖小径、冷峻次元、冰川河谷、暮色湖灯、海岸霓虹、海边书屋、富士夜色、晴空仰望。
- 换皮肤不用重启。点一下卡片,界面立刻变。
- 三个滑杆实时调参:主界面面板不透明度、壁纸模糊、壁纸亮度。点击「设置」打开的整个对话框固定为 70%,设置之外的主界面仍可自由调节。
- 自己的图片或视频一键变皮肤。每次上传都会新增一张皮肤卡;mp4/webm 保留原始画质和帧率,ffmpeg 只负责取色,图片和其他视频格式才做必要优化。
- 调好的皮肤能打包分享。导出一个 .dshskin 文件,配色、参数、壁纸都在里面,别人导入就是一模一样的效果。
- 体检和安全卸载。DSH 有个坑:profile 里列了却解析不到的插件会让它直接启动不了。doctor 专治这个,包括别人留下的悬空依赖。
展开完整文档(README 剩余 1 节)
dsh-skin-kit 给 DeepSeek Harness(DSH)换皮肤的工具箱。装一次,之后全在界面里点。 English · 功能规划与架构 · 做自己的皮肤 · 故障排查 Node.js >=18.17 License: MIT DSH Desktop using the Glacier River default wallpaper 它能做什么 - 十套内置壁纸皮肤,一张壁纸对应一套完整配色:云海星球、比奇堡晴日、白崖小径、冷峻次元、冰川河谷、暮色湖灯、海岸霓虹、海边书屋、富士夜色、晴空仰望。 - 换皮肤不用重启。点一下卡片,界面立刻变。 - 三个滑杆实时调参:主界面面板不透明度、壁纸模糊、壁纸亮度。点击「设置」打开的整个对话框固定为 70%,设置之外的主界面仍可自由调节。 - 自己的图片或视频一键变皮肤。每次上传都会新增一张皮肤卡;mp4/webm 保留原始画质和帧率,ffmpeg 只负责取色,图片和其他视频格式才做必要优化。 - 调好的皮肤能打包分享。导出一个 .dshskin 文件,配色、参数、壁纸都在里面,别人导入就是一模一样的效果。 - 体检和安全卸载。DSH 有个坑:profile 里列了却解析不到的插件会让它直接启动不了。doctor 专治这个,包括别人留下的悬空依赖。 快速开始 装进 DSH(默认桌面端 profile,其次 web) npx github:mysn777/dsh-skin-kit install 重启一次 DSH,然后打开 设置 →「皮肤工坊」 不想开界面也行: npx github:mysn777/dsh-skin-kit list # 看有哪些皮肤 npx github:mysn777/dsh-skin-kit use fuji-night # 换皮肤 npx github:mysn777/dsh-skin-kit set alpha=0.5 blur=12 把自己的素材变成皮肤: dsh-skin-kit diy ./我的壁纸.jpg --name "我的皮肤" dsh-skin-kit diy ./城市夜景.mp4 --name "夜行" # 视频动态壁纸也行 需要更多静态或动态壁纸,可浏览哲风壁纸。它是独立第三方网站,与本项目不存在隶属、合作或授权代理关系。本项目不镜像或再分发该站素材;下载和使用前请确认具体素材许可,并遵守网站用户协议及原作者权利。 需要 Node.js ≥ 18.17。不需要 pnpm,也不需要任何构建工具——绝大多数 DSH 桌面端用户机器上没有 pnpm,所以这个工具自己完成 profile 接线。 ffmpeg 是可选的:装了可自动取色、优化图片并转换非 mp4/webm 视频;直传 mp4/webm 不转码。 十套内置皮肤 | id | 名称 | 风格 | | bikini-breeze | 比奇堡晴日 | 明亮海蓝、珊瑚橙点缀 | | chalk-cliffs | 白崖小径 | 海岸草坡、温柔浅色 | | cloud-orbit | 云海星球 | 黑色太空、蓝色地球 | | cold-anime | 冷峻次元 | 雪原灰蓝、冰蓝高光 | | fuji-night | 富士夜色 | 深蓝山影、暖光小店 | | glacier-river | 冰川河谷 | 雪山河流、青绿冷色 | | ocean-avenue | 海岸霓虹 | 紫红晚霞、街头路牌 | | seaside-study | 海边书屋 | 晴海书亭、暖木点缀 | | skyward-blue | 晴空仰望 | 蓝天树影、清透浅蓝 | | twilight-lake | 暮色湖灯 | 蓝调湖面、暖色路灯 | 十套内置皮肤和今后新建的图片/视频 DIY 皮肤统一默认:主界面不透明度 15%、模糊 0px、壁纸亮度 100%。这组值不模糊、不增减原片亮度,并尽量少遮挡壁纸;手动参数仍可覆盖。 命令一览 | 命令 | 作用 | | install [--profile ] | 装进 DSH profile | | uninstall [--purge] | 卸载;--purge 连皮肤和壁纸数据一起删 | | doctor [--fix] | 体检所有 profile,找出会让 DSH 起不来的条目 | | list | 列出皮肤和当前状态 | | use | 换皮肤 / 关掉皮肤 | | set alpha=.. blur=.. brightness=.. | 调参数 | | diy | 生成一套自己的皮肤 | | export [id] [--out 文件] | 导出 .dshskin | | import | 导入 .dshskin | | prune | 清理没人引用的壁纸文件 | 通用参数:--home 指定 DSH home(默认 $DSH_HOME 或 ~/.dsh),--json 输出机器可读结果。 它怎么工作 dsh-skin-kit(一个包,三重身份) ├─ CLI 装/卸/体检/DIY/导入导出 ├─ DSH host 半 /api/skin-kit/* 路由 + 配置读写 + 壁纸伺服 └─ DSH client 半 套用皮肤 + 「皮肤工坊」设置分区 三个值得说的设计: 皮肤改的是设计令牌,不是类名。 DSH 前端所有颜色都读 --dsw- CSS 变量,本工具覆盖其中全部 80 个。相比去命中 .pI_x6G_frame 这种构建期哈希类名,DSH 升级后不容易碎。 壁纸走 HTTP 路由,不塞进 JS。 用户上传的素材走 /api/skin-kit/wallpaper/,文件在 ~/.dsh/skin-kit/wallpapers/;随包默认壁纸走 /api/skin-kit/asset/,文件在插件的 skins/assets/。这样不会把图片或视频膨胀进 client.js。 随包资产单文件上限 600KB。 npm test 会扫描 skins/assets/,任何文件超限都直接失败。原因不是浏览器加载不了,而是项目要保持 npx github: 首次拉取够快;十张图如果不设闸门,很容易把一个轻量插件拖成几十 MB。 CSS 在浏览器里现算。 皮肤编译器是纯函数,客户端自带一份,所以换皮肤和拖滑杆都不用等服务端往返。三个实时参数还进一步做成 CSS 变量(--dsk-alpha / --dsk-blur / --dsk-brightness),拖滑杆连样式表都不用重写,只改一个变量。 用户数据都在 ~/.dsh/skin-kit/ 下:config.json(当前皮肤和参数)、skins/.json(自建皮肤)、wallpapers/(用户壁纸原文件)。十张默认壁纸随插件副本安装,不混进用户数据。 隐私与故障排查 所有图片、视频、取色和压缩都在本机完成,不会上传到 dsh-skin-kit 或哲风壁纸。遇到安装、profile、ffmpeg 或视频播放问题,请先看故障排查。安全漏洞请按 SECURITY.md 私密报告,不要直接贴到公开 Issue。 开发 npm test # 58 条用例:编译器、profile 接线、HTTP 路由、客户端 DOM 行为 npm run build # 重新生成 lib/client.js(改了 src/ 就要跑) lib/client.js 是构建产物但要提交进仓库——用户是直接从仓库装的,不会自己构建。有一条用例专门比对它和源码是否同步。 版本记录见 CHANGELOG.md。 许可 代码使用 MIT 许可。十张随包壁纸不自动继承 MIT,来源和允许范围见 ASSET_LICENSE.md 与 skins/assets/README.md。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
mysn777/dsh-skin-kit
一键换肤并实时调节壁纸与配色参数
相关插件 · 视觉能力
智能体工作台Devin-AXIS/iPolloWork
企业级、本地优先的智能体工作台,面向个人和智能体团队——一个工作区,容纳多个智能体引擎;一套统一体系,管理插件和技能;支…
★ 7,359已汉化DSH
72
开源设计工作台nexu-io/open-design
OpenDesign:首个协作式 AI 设计智能体工作区
★ 105,514已汉化DSH
71.8
多智能体编码工作区spacering-net/codeg
多智能体协作的 AI 编程工作区:汇总 Claude Code、Codex、OpenCode、Pi、Grok Build 等来源的会话。支持桌面应用、自托管服务器或 Docker。
★ 4,289已汉化DSH
71.6
GPT 图像提示词库freestylefly/awesome-gpt-image-2
Prompt as Code | GPT Image 2 / 2.5 提示词与案例库,530+ 个案例、20+…
★ 34,534已汉化DSH
71.5
架构图生成器tt-a1i/archify
把你想理解、规划或分享的事,变成可以互动的可视化作品。
★ 92,675已汉化DSH
71.2
AI 用量桌面小部件Javis603/token-monitor
EN | 简 | 繁 | KO | JA | PT
★ 3,522已汉化DSH
71
这是你的仓库?认领条目