🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

壁纸引擎开机动画 sdfsd85fds74f9d8/dsh-plugin-wallpaper-engine-Yun

DeepSeek Harness
sdfsd85fds74f9d823 天前有提交已提供中文文档扫描:含敏感能力

用动态壁纸做开机动画,进入后继续美化界面

31.1/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add sdfsd85fds74f9d8/dsh-plugin-wallpaper-engine-Yun
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]!
实装验证未通过(runtime_smoke_failed),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
数据截至 2026/10/31·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 23 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(runtime_smoke_failed · 2026/10/31) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 196 处,展示前 86 条)
  • 读取本地文件
    lib/index.js:143
    webShimCache = readFileSync(join(WEBWALLGL_DIR, 'web-shim.js'), 'utf8');
  • 读取本地文件
    lib/index.js:177
    const pj = JSON.parse(readFileSync(join(dirname(entryAbs), 'project.json'), 'utf8'));
  • 读取本地文件
    lib/index.js:212
    try { letters = (await readdir('/mnt')).filter((n) => /^[a-zA-Z]$/.test(n)); } catch { return null; }
  • 执行外部命令来自配置/变量
    lib/index.js:227
    execFile(
  • 读取本地文件
    lib/index.js:256
    try { await access(p); return true; } catch { return false; }
  • 读取本地文件
    lib/index.js:259
    try { return (await stat(p)).isDirectory(); } catch { return false; }
  • 读取本地文件
    lib/index.js:263
    try { return (await stat(p)).mtimeMs; } catch { return null; }
  • 写入本地文件
    lib/index.js:655
    writeFileSync(fd, data);
  • 写入本地文件
    lib/index.js:661
    renameSync(tmp, filePath);
  • 写入本地文件
    lib/index.js:664
    writeFileSync(filePath, data);
  • 写入本地文件
    lib/index.js:679
    await writeFileP(tmp, data);
  • 写入本地文件
    lib/index.js:681
    await renameP(tmp, filePath);
  • 写入本地文件
    lib/index.js:684
    try { await writeFileP(filePath, data); } finally {
  • 删除本地文件
    lib/index.js:685
    try { await unlinkP(tmp); } catch { }
  • 删除本地文件
    lib/index.js:1318
    try { unlinkSync(tmp); } catch { }
  • 删除本地文件
    lib/index.js:1392
    try { unlinkSync(join(dir, name)); } catch { }
  • 删除本地文件
    lib/index.js:1418
    try { unlinkSync(abs); } catch { }
  • 发起网络请求
    lib/index.js:1473
    const res = await fetch(url, { redirect: 'follow', signal: ctrl.signal, headers: { 'User-Agent': 'dsh-wallpaper-engine' } });
  • 删除本地文件
    lib/index.js:1549
    try { unlinkSync(tmpFiles[i]); } catch { }
  • 删除本地文件
    lib/index.js:1565
    try { tmpFiles.forEach((f) => { try { unlinkSync(f); } catch { } }); } catch { }
  • 执行外部命令来自配置/变量
    lib/index.js:1656
    proc = spawn(a.file || ff, a.args || args,
  • 读取本地文件
    lib/scene-manifest.js:89
    if (lstatSync(abs).isSymbolicLink())
  • 读取本地文件
    lib/scene-manifest.js:91
    if (!statSync(abs).isFile())
  • 读取本地文件
    lib/scene-manifest.js:96
    return { path, bytes: new Uint8Array(readFileSync(real)) };
  • 读取本地文件
    lib/scene-manifest.js:109
    names = readdirSync(sub === '' ? normDir : joinPath(normDir, sub));
  • 读取本地文件
    lib/scene-manifest.js:119
    const lst = lstatSync(joinPath(normDir, rel));
  • 读取本地文件
    lib/routes/now-playing.js:126
    if (!f || !existsSync(f)) { res.statusCode = 404; res.end('no-artwork'); return; }
  • 读取本地文件
    lib/routes/scene-frame.js:98
    return p && existsSync(p) ? p : null;
  • 读取本地文件
    lib/routes/scene-frame.js:138
    trackStream(createReadStream(servePath), res);
  • 删除本地文件
    lib/routes/scene-frame.js:176
    try { unlinkSync(slot.gpuPath); removed = true; }
  • 读取本地文件
    lib/routes/scene-frame.js:221
    if (existsSync(slot.gpuPath)) return { code: 409, payload: { error: 'gpu-frame-exists' } };
  • 删除本地文件
    lib/routes/scene-frame.js:265
    try { unlinkSync(join(customFrameDir(), id + '.' + e)); removed = true; } catch { }
  • 删除本地文件
    lib/routes/scene-frame.js:284
    if (e !== ext) { try { unlinkSync(join(dir, id + '.' + e)); } catch { } }
  • 写入本地文件
    lib/routes/scene-frame.js:288
    const ws = createWriteStream(tmpAbs);
  • 删除本地文件
    lib/routes/scene-frame.js:296
    try { unlinkSync(tmpAbs); } catch { }
  • 写入本地文件
    lib/routes/scene-frame.js:333
    try { renameSync(tmpAbs, target); } catch { fail(500, { error: 'publish failed' }); return; }
  • 写入本地文件
    lib/routes/upload.js:96
    const ws = createWriteStream(tmpAbs);
  • 删除本地文件
    lib/routes/upload.js:104
    try { unlinkSync(tmpAbs); } catch { }
  • 读取本地文件
    lib/routes/upload.js:159
    if (existing && existsSync(existing)) {
  • 写入本地文件
    lib/routes/upload.js:180
    renameSync(tmpAbs, fileAbs);
  • 删除本地文件
    lib/routes/upload.js:261
    try { unlinkSync(abs); removed = true; } catch { }
  • 写入本地文件
    lib/routes/upload.js:325
    try { mkdirSync(dir, { recursive: true }); } catch { }
  • 读取本地文件
    lib/routes/upload.js:327
    try { isDir = statSync(dir).isDirectory(); } catch { }
  • 读取本地文件
    lib/routes/fontsets.js:101
    try { entries = readdirSync(dir, { withFileTypes: true }); } catch { return []; }
  • 读取本地文件
    lib/routes/fontsets.js:122
    try { text = readFileSync(abs, 'utf8'); } catch { return { ok: false, reason: 'missing' }; }
  • 删除本地文件
    lib/routes/fontsets.js:351
    try { unlinkSync(userAbs); } catch {
  • 读取本地文件
    lib/routes/presets.js:99
    try { entries = readdirSync(dir, { withFileTypes: true }); } catch { return []; }
  • 读取本地文件
    lib/routes/presets.js:122
    try { text = readFileSync(abs, 'utf8'); } catch { return { ok: false, reason: 'missing' }; }
  • 删除本地文件
    lib/routes/presets.js:347
    try { unlinkSync(userAbs); } catch {
  • 发起网络请求
    lib/routes/github-stars.js:41
    const res = await fetch(url, {
  • 读取本地文件
    lib/routes/github-stars.js:76
    const o = JSON.parse(readFileSync(cachePath(), 'utf8'));
  • 写入本地文件
    lib/routes/github-stars.js:86
    writeFileSync(tmp, JSON.stringify({ count: v.count, at: v.at }));
  • 写入本地文件
    lib/routes/github-stars.js:87
    renameSync(tmp, file);
  • 删除本地文件
    lib/routes/avatar.js:82
    try { unlinkSync(p); removed = true; } catch { }
  • 读取本地文件
    lib/routes/avatar.js:121
    for (const name of readdirSync(dir)) {
  • 删除本地文件
    lib/routes/avatar.js:123
    try { unlinkSync(join(dir, name)); } catch { }
  • 执行外部命令固定命令
    lib/media/legacy.js:111
    const r = spawnSync('pactl', ['info'], { encoding: 'utf8', timeout: 3000, windowsHide: true });
  • 执行外部命令固定命令
    lib/media/legacy.js:124
    const r = spawnSync('ffmpeg', ['-hide_banner', '-list_devices', 'true', '-f', 'dshow', '-i', 'dummy'],
  • 写入本地文件
    lib/media/legacy.js:167
    mkdirSync(dir, { recursive: true });
  • 删除本地文件
    lib/media/legacy.js:169
    if (e !== ext) { try { unlinkSync(join(dir, 'now-playing.' + e)); } catch { } }
  • 写入本地文件
    lib/media/legacy.js:172
    writeFileSync(f, buf);
  • 读取本地文件
    lib/media/legacy.js:192
    if (existsSync(bin) && statSync(bin).mtimeMs >= statSync(src).mtimeMs) return bin;
  • 读取本地文件
    lib/media/legacy.js:192
    if (existsSync(bin) && statSync(bin).mtimeMs >= statSync(src).mtimeMs) return bin;
  • 写入本地文件
    lib/media/legacy.js:194
    mkdirSync(dirname(bin), { recursive: true });
  • 执行外部命令固定命令
    lib/media/legacy.js:195
    const r = spawnSync('swiftc', ['-O', src, '-o', bin + '.tmp'], { timeout: 180000, windowsHide: true });
  • 写入本地文件
    lib/media/legacy.js:200
    try { renameSync(bin + '.tmp', bin); } catch { }
  • 执行外部命令来自配置/变量
    lib/media/legacy.js:206
    audioProc = spawn(bin, [], { stdio: ['ignore', 'pipe', 'pipe'] });
  • 执行外部命令固定命令
    lib/media/legacy.js:235
    audioProc = spawn('ffmpeg', spec.args, {
  • 执行外部命令固定命令
    lib/media/legacy.js:294
    execFile('media-control', args, { timeout: 3000 }, (err, stdout) => {
  • 发起网络请求
    lib/media/legacy.js:344
    fetch(String(art), { signal: AbortSignal.timeout(5000) })
  • 读取本地文件
    lib/media/legacy.js:349
    try { writeArtwork(readFileSync(String(art).replace(/^file: /, '')), 'image/jpeg'); }
  • 发起网络请求
    lib/media/legacy.js:403
    fetch(url, { signal: AbortSignal.timeout(5000) })
  • 执行外部命令来自配置/变量
    lib/media/supervisor.js:338
    p = spawn(binPath, childArgs(), { stdio: ['pipe', 'pipe', 'pipe'], ...a.opts });
  • 读取本地文件
    lib/media/provision.js:129
    const st = statSync(path);
  • 发起网络请求
    lib/media/provision.js:163
    const res = await fetch(url, {
  • 执行外部命令固定命令
    lib/media/provision.js:206
    try { spawnSync('xattr', ['-d', 'com.apple.quarantine', path], { timeout: 3000 }); } catch { }
  • 读取本地文件
    lib/media/provision.js:233
    if (existsSync(localBin)) {
  • 读取本地文件
    lib/media/provision.js:241
    if (existsSync(target)) {
  • 删除本地文件
    lib/media/provision.js:246
    try { unlinkSync(target); } catch { }
  • 读取本地文件
    lib/media/provision.js:262
    if (existsSync(tryTarget)) {
  • 写入本地文件
    lib/media/provision.js:266
    try { mkdirSync(dirname(tryTarget), { recursive: true }); } catch { }
  • 写入本地文件
    lib/media/provision.js:274
    if (process.platform !== 'win32') { try { chmodSync(tmp, 0o755); } catch { } }
  • 写入本地文件
    lib/media/provision.js:275
    renameSync(tmp, tryTarget);
  • 删除本地文件
    lib/media/provision.js:283
    try { unlinkSync(tmp); } catch { }
  • 发起网络请求
    lib/boot-panel.js:63
    globalThis.fetch(cfg.route + '/status.json?report=' + s, { cache: 'no-store', keepalive: true }).catch(function () {})
  • 发起网络请求
    lib/boot-panel.js:356
    fetch('/wallpaper-engine/inventory', { cache: 'no-store' })
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-host-webserver
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

让 DSH 更美观的插件,它接入了 Wallpaper Engine —— 基于 elysia395/dsh-wallpaper-engine v1.3.1 二次开发(合体版:壁纸美化 + 开机画面),致谢原作者及其所有贡献者。

README

由 DeepSeek 最新模型翻译生成
dsh-plugin-wallpaper-engine-Yun 合体版 · 壁纸引擎 + 开机动画 —— 基于 elysia395/dsh-wallpaper-engine v1.3.1 二次开发 🎬 打开 DSH 时,你的壁纸铺满整个窗口当作开机动画,停留片刻后以机械感离场动画无缝揭幕;进入界面后,它继续做你的动态壁纸与液态玻璃美化。 插件作者:小云(抖音:xyh6bai6shi6,二维码见插件「关于」页签) 🙏 致谢(请先读这一段) 本插件的每一块基石都来自 elysia395/dsh-wallpaper-engine 及其台前幕后的贡献者——原作者 elysia395,以及 oneincase(WebWallGL 渲染引擎)、YV3507、yuxilao、Jerry 和所有通过 issue / PR 参与改进的朋友。没有他们的辛勤工作与长期维护,就不会有这个项目的存在。 本合体版只是在他们优秀的代码之上做了少量增量(见下),若有任何可取之处,功劳属于原作者团队;若有不足,皆因小云学艺不精,还请多多包涵与指正。如果你喜欢这个插件,请务必去原版仓库点一颗 ⭐ 支持原作者。 原版完整文档见 docs/UPSTREAM-README.md(English / 新手指南)。
展开完整文档(README 剩余 1 节)
dsh-plugin-wallpaper-engine-Yun

合体版 · 壁纸引擎 + 开机动画 —— 基于 elysia395/dsh-wallpaper-engine v1.3.1 二次开发

🎬 打开 DSH 时,你的壁纸铺满整个窗口当作开机动画,停留片刻后以机械感离场动画无缝揭幕;进入界面后,它继续做你的动态壁纸与液态玻璃美化。

插件作者:小云(抖音:xyh6bai6shi6,二维码见插件「关于」页签)

🙏 致谢(请先读这一段)

本插件的每一块基石都来自 elysia395/dsh-wallpaper-engine 及其台前幕后的贡献者——原作者 elysia395,以及 oneincase(WebWallGL 渲染引擎)、YV3507、yuxilao、Jerry 和所有通过 issue / PR 参与改进的朋友。没有他们的辛勤工作与长期维护,就不会有这个项目的存在。

本合体版只是在他们优秀的代码之上做了少量增量(见下),若有任何可取之处,功劳属于原作者团队;若有不足,皆因小云学艺不精,还请多多包涵与指正。如果你喜欢这个插件,请务必去原版仓库点一颗 ⭐ 支持原作者。

原版完整文档见 docs/UPSTREAM-README.md(English / 新手指南)。

✨ 合体版新增功能

| 功能 | 说明 |
| 🖼 开机画面 | 打开 DSH 时壁纸铺满全窗口当作开机动画:可跟随当前壁纸,也可自选壁纸库里的某一段(视频/场景壁纸直连播放);停留设定时长后无缝揭幕 |
| ⚙️ 离场动画 ×5 | 溶解(经典)/ 光圈收束(相机快门感)/ 机械百叶 / 扫描离场 / 故障抖切(赛博机械) |
| 🎵 自选开机音乐 | 独立音轨 + 独立音量,壁纸静音策略不影响它;随离场动画同步淡出 |
| 🚀 起播缓冲自适应 | 开机风暴期起播必丢帧(原版作者实测结论):深色底先顶着,实测帧节奏、帧率一稳即提前揭幕——流畅与快速兼得 |
| 🔊 声音优先 | 开机画面期间可选静音全部壁纸声音(原型级拦截,含场景音频与 new Audio() 隐形音频),进入界面后恢复 |
| 🔧 全部设置就地可调 | 设置 → 壁纸引擎 → 壁纸库 → 「开机画面」区块:所有参数即时保存 |
| 🩹 切屏恢复修复 | 修复切回窗口后壁纸恢复播放失败的问题(静音续播 + 回屏救援双保险) |

所有新增设置与原版共用同一个配置文件(~/.dsh-wallpaper-engine/config.json 的 boot 字段),原版设置项原封不动。

📦 安装

⚠️ 重要:本插件与原版 dsh-plugin-wallpaper-engine 不能共存(路由与 ID 完全相同,同时启用会冲突)。请先卸载原版,再安装本合体版;你的壁纸选择、玻璃参数等所有设置都会原样保留。

DSH profile 目录下(默认 ~/.dsh/profiles/desktop/) package.json 的 dependencies 加入: "dsh-plugin-wallpaper-engine-Yun": "github:sdfsd85fds74f9d8/dsh-plugin-wallpaper-engine-Yun" 然后:
pnpm install
重启 DSH

国内直连 GitHub 困难时,可用镜像前缀(如 https://gh-proxy.com/ + tarball 地址)或克隆到本地以 file: 路径安装。

⚙️ 配置

- 壁纸 / 美化 / 开机画面:全部在 设置 → 壁纸引擎 内(壁纸库页签底部「开机画面」区块)
- 开机音乐素材:把 mp3/wav/m4a/ogg 等丢进 ~/.dsh-wallpaper-engine/boot-audio/,设置页下拉即选
- 配置文件:~/.dsh-wallpaper-engine/config.json(与原版同一文件,字段互不干扰)

🧩 技术要点(给后来的维护者)

- fork 基线:原版 v1.3.1 源码;客户端产物由 node scripts/build-client.mjs 重建(零依赖构建,产物与官方逐字节一致验证过)
- 开机画面通过 webserver/index-inject 在 注入面板脚本:开机时把应用外壳临时隐藏,壁纸引擎挂在 body 上的活壁纸层即成为全窗口开机画面;与 dsh-boot-2077 插件自动互斥
- 「开机画面」设置存于原版 settings 结构的 boot 字段(schema 见 lib/settings-schema.js),宿主注入逻辑见 lib/index.js 的 boot inject,面板脚本见 lib/boot-panel.js
- 切屏恢复的静音续播/回屏救援见 src/client.js(wePlayMutedResume / installVisibilityRescue)

📄 许可

MIT(与原版相同)。见 LICENSE——该 LICENSE 保留原作者 elysia395 的署名。本衍生作品同样以 MIT 发布,任何再分发请保留双方署名与本声明。

📮 联系

- 本合体版作者:小云 —— 抖音 xyh6bai6shi6(「关于」页签有二维码)
- 原版项目:github.com/elysia395/dsh-wallpaper-engine —— 问题反馈、功能建议请优先去原版仓库(通用问题那边都能答);仅与开机画面相关的问题欢迎来找小云
预览分享卡片长什么样 ↓sdfsd85fds74f9d8/dsh-plugin-wallpaper-engine-Yun
分享 · DeepSeek Harness Hub
sdfsd85fds74f9d8/dsh-plugin-wallpaper-engine-Yun

用动态壁纸做开机动画,进入后继续美化界面

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部