彻夜之歌动态壁纸 yangcanbin31-coder/dsh-nazuna-wallpaper-engine
DeepSeek Harnessv0.7.5把本机视频壁纸渲染到界面后方,配七草荠吉祥物
29.3/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:npm 同名包「dsh-plugin-wallpaper-engine」归属 elysia395/dsh-wallpaper-engine,装到的可能不是本插件。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add yangcanbin31-coder/dsh-nazuna-wallpaper-engine该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 55 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/6) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意npm 同名包「dsh-plugin-wallpaper-engine」归属 elysia395/dsh-wallpaper-engine,装到的可能不是本插件
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-plugin-wallpaper-engine @ 0.7.5
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/22 19:20:24
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 137 处,展示前 56 条)
- 读取本地文件lib/index.js:91
try { letters = (await readdir('/mnt')).filter((n) => /^[a-zA-Z]$/.test(n)); } catch { return null; } - 执行外部命令来自配置/变量lib/index.js:106
execFile( - 读取本地文件lib/index.js:135
try { await access(p); return true; } catch { return false; } - 读取本地文件lib/index.js:138
try { return (await stat(p)).isDirectory(); } catch { return false; } - 读取本地文件lib/index.js:141
try { return (await stat(p)).isFile(); } catch { return false; } - 读取本地文件lib/index.js:152
try { letters = (await readdir('/mnt')).filter((n) => /^[a-zA-Z]$/.test(n)); } catch { return []; } - 读取本地文件lib/index.js:213
try { text = await readFile(vdfPath, 'utf8'); } catch { return []; } - 写入本地文件lib/index.js:472
writeFileSync(fd, data); - 写入本地文件lib/index.js:478
renameSync(tmp, filePath); - 写入本地文件lib/index.js:481
writeFileSync(filePath, data); - 写入本地文件lib/index.js:488
await writeFileP(tmp, data); - 写入本地文件lib/index.js:490
await renameP(tmp, filePath); - 写入本地文件lib/index.js:493
try { await writeFileP(filePath, data); } finally { - 删除本地文件lib/index.js:494
try { await unlinkP(tmp); } catch { } - 删除本地文件lib/index.js:664
try { unlinkSync(tmpVideo); } catch { } - 删除本地文件lib/index.js:667
try { unlinkSync(tmpVideo); } catch { } - 删除本地文件lib/index.js:1158
try { unlinkSync(join(dir, name)); } catch { } - 发起网络请求lib/index.js:1214
const res = await fetch(url, { redirect: 'follow', signal: ctrl.signal, headers: { 'User-Agent': 'dsh-wallpaper-engine' } }); - 删除本地文件lib/index.js:1290
try { unlinkSync(tmpFiles[i]); } catch { } - 删除本地文件lib/index.js:1306
try { tmpFiles.forEach((f) => { try { unlinkSync(f); } catch { } }); } catch { } - 执行外部命令来自配置/变量lib/index.js:1392
proc = spawn(a.file || ff, a.args || args, - 读取本地文件scripts/prepare.mjs:17
const hasSource = existsSync(resolve(root, 'src', 'client.js')) && - 读取本地文件scripts/prepare.mjs:18
existsSync(resolve(root, 'scripts', 'build-client.mjs')); - 执行外部命令来自配置/变量scripts/prepare.mjs:21
const r = spawnSync(process.execPath, [resolve(root, 'scripts', 'build-client.mjs')], { - 读取本地文件lib/scene-manifest.js:990
if (lstatSync(abs).isSymbolicLink()) - 读取本地文件lib/scene-manifest.js:992
if (!statSync(abs).isFile()) - 读取本地文件lib/scene-manifest.js:997
return { path, bytes: new Uint8Array(readFileSync(real)) }; - 读取本地文件lib/scene-manifest.js:1010
names = readdirSync(sub === '' ? normDir : joinPath(normDir, sub)); - 读取本地文件lib/scene-manifest.js:1020
const lst = lstatSync(joinPath(normDir, rel)); - 读取本地文件lib/pkg-extract.js:863
if (!statSync(abs).isFile()) return null; - 读取本地文件lib/pkg-extract.js:864
return { path, bytes: new Uint8Array(readFileSync(abs)) }; - 读取本地文件lib/pkg-extract.js:875
names = readdirSync(sub === '' ? dir : join(dir, sub)); - 读取本地文件lib/pkg-extract.js:884
const stat = statSync(join(dir, rel)); - 读取本地文件inline_svg.cjs:3
let src = fs.readFileSync(srcPath, 'utf8'); - 读取本地文件inline_svg.cjs:4
const svg = fs.readFileSync('08b5f70da6268b9d8d4f320718fdb21d.svg', 'utf8') - 写入本地文件inline_svg.cjs:17
fs.writeFileSync(srcPath, src); - 读取本地文件scripts/build-client.mjs:31
const pkg = JSON.parse(readFileSync(resolve(root, 'package.json'), 'utf8')); - 读取本地文件scripts/build-client.mjs:34
const src = readFileSync(resolve(root, 'src', 'client.js'), 'utf8'); - 写入本地文件scripts/build-client.mjs:61
mkdirSync(dirname(target), { recursive: true }); - 写入本地文件scripts/build-client.mjs:62
writeFileSync(target, output); - 读取本地文件scripts/diagnose-scenes.mjs:180
for (const p of probes) { if (existsSync(p)) out.push(p); } - 读取本地文件scripts/diagnose-scenes.mjs:187
if (existsSync(ws)) { try { for (const n of readdirSync(ws)) { const d = join(ws, n); if (statSync(d).isDirectory()) dirs.push(d); } } catch {} } - 读取本地文件scripts/diagnose-scenes.mjs:187
if (existsSync(ws)) { try { for (const n of readdirSync(ws)) { const d = join(ws, n); if (statSync(d).isDirectory()) dirs.push(d); } } catch {} } - 读取本地文件scripts/diagnose-scenes.mjs:187
if (existsSync(ws)) { try { for (const n of readdirSync(ws)) { const d = join(ws, n); if (statSync(d).isDirectory()) dirs.push(d); } } catch {} } - 读取本地文件scripts/diagnose-scenes.mjs:189
if (existsSync(we)) { for (const sub of ['projects\\defaultprojects', 'projects\\myprojects']) { const p = join(we, sub); if (existsSync(p)) { try { f - 读取本地文件scripts/diagnose-scenes.mjs:189
if (existsSync(we)) { for (const sub of ['projects\\defaultprojects', 'projects\\myprojects']) { const p = join(we, sub); if (existsSync(p)) { try { f - 写入本地文件scripts/diagnose-scenes.mjs:327
writeFileSync(report, out.join('\n'), 'utf8'); - 读取本地文件scripts/verify-client.mjs:99
const code = readFileSync(new URL('../lib/client.js', import.meta.url), 'utf8'); - 读取本地文件scripts/verify-scene.mjs:331
if (!existsSync(fx.file)) { console.log(' (skip fixture ' + fx.file + ' — not present)'); continue; } - 读取本地文件scripts/verify-scene.mjs:333
const r = pkgExtract.extractSceneMainImage(new Uint8Array(readFileSync(fx.file))); - 读取本地文件scripts/verify-scene.mjs:413
const cached = existsSync(cacheDir) ? readdirSync(cacheDir).filter((f) => f.startsWith('sf33_' + token + '_')) : []; - 读取本地文件scripts/verify-scene.mjs:413
const cached = existsSync(cacheDir) ? readdirSync(cacheDir).filter((f) => f.startsWith('sf33_' + token + '_')) : []; - 读取本地文件scripts/verify-transcode-state.mjs:165
const code = readFileSync(new URL('../lib/client.js', import.meta.url), 'utf8'); - 读取本地文件splice_rope.cjs:3
const b64 = fs.readFileSync('_rope_small.png').toString('base64'); - 读取本地文件splice_rope.cjs:4
let src = fs.readFileSync(srcPath, 'utf8'); - 写入本地文件splice_rope.cjs:20
fs.writeFileSync(srcPath, src);
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-host-webserver给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 本机视频壁纸渲染
- 七草荠吉祥物
- 月光紫液态玻璃
NAZUNA(彻夜之歌)主题壁纸引擎,用于 DeepSeek Harness:七草荠吉祥物,月光紫液态玻璃。衍生自 elysia395/dsh-wallpaper-engine v0.7.1(MIT)。
README
由 DeepSeek 最新模型翻译生成dsh-nazuna-wallpaper-engine
NAZUNA(彻夜之歌)主题的 DeepSeek Harness 动态壁纸引擎 ——基于 elysia395/dsh-wallpaper-engine v0.7.1(MIT) 的衍生主题版:把你本机 Wallpaper Engine / 自定义上传的视频壁纸渲染到 DSH 界面后方,配 iOS 液态玻璃、可调配色/玻璃透明度、七草荠拉绳吉祥物。
⚠️ 衍生项目:底层全部来自上游 dsh-plugin-wallpaper-engine(MIT),本仓库仅做主题与工具层面的修改,上游版权声明见 LICENSE,来源与改动清单见 THIRD_PARTY_NOTICES.md。
展开完整文档(README 剩余 1 节)
dsh-nazuna-wallpaper-engine NAZUNA(彻夜之歌)主题的 DeepSeek Harness 动态壁纸引擎 ——基于 elysia395/dsh-wallpaper-engine v0.7.1(MIT) 的衍生主题版:把你本机 Wallpaper Engine / 自定义上传的视频壁纸渲染到 DSH 界面后方,配 iOS 液态玻璃、可调配色/玻璃透明度、七草荠拉绳吉祥物。 ⚠️ 衍生项目:底层全部来自上游 dsh-plugin-wallpaper-engine(MIT),本仓库仅做主题与工具层面的修改,上游版权声明见 LICENSE,来源与改动清单见 THIRD_PARTY_NOTICES.md。 本版(Nazuna)相对上游的改动 - 吉祥物:小女仆/鲸御姐 → 七草荠 Q版 / 全身立绘(tools/make-mascot.py 重新生成) - 默认配色:强调色 #4f8cff → 月光紫 #7c8cf8;深色玻璃底色 → 夜色 #0d0f24 - 皮肤管理器修复(host):补丁同时写入全部 profile 层 + home 层,桌面端切换皮肤立即生效 - 附加工具:tools/ 下的呼吸/发丝/视差动态视频生成器、分层 5 图合成器、rembg 抠图脚本 功能(继承上游) - Video / Web / Scene 壁纸渲染到 DSH 界面后方;自定义上传 JPG/PNG/MP4 - iOS 液态玻璃设置页(配色 6 预设+自定义、玻璃透明度、整窗液态玻璃、侧栏玻璃) - 拉绳吉祥物(拖拽吸附、仓库抽屉)、壁纸选择弹窗、轮播、隐藏/恢复、倍速/翻转 - 帧率上限抽帧转码(ffmpeg 自动下载)、遮挡暂停省电、字体自定义 - 设置持久化到 ~/.dsh-wallpaper-engine/config.json 详见上游 README 与仓库文档:https://github.com/elysia395/dsh-wallpaper-engine 安装 lib/ 已含构建产物,无需编译即可用(本地 link 安装): 在 DSH 环境里用文件夹路径安装(web profile 示例) dsh plugin --profile web add link:G:/iPolloWork/dsh-skin-dev/nazuna-wallpaper-engine dsh plugin --profile desktop add link:G:/iPolloWork/dsh-skin-dev/nazuna-wallpaper-engine 重启 DSH → 设置 → Wallpaper Engine。若从 git 克隆安装,首次请先 npm install(自动触发 prepare → 重建 lib/client.js)。 注意:npm 上已发布的上游同名包 dsh-plugin-wallpaper-engine 与本仓库并非同一份代码;本仓库请始终以 link:/文件夹方式安装。 开发 npm run build # 从 src/client.js 重新生成 lib/client.js(纯 Node,无依赖) npm run verify - 改 host(lib/index.js / src/index.ts)后重启 DSH 生效 - 改 client(src/client.js)→ npm run build → 重启 生成动态壁纸视频(可选) 见 tools/: 呼吸/发丝/视差 单主角视频(ffmpeg 需可用) python tools/make-breath-video.py out.mp4 五图连播分层合成(需要 venv:pillow+numpy;人物抠图用 rembg isnet-anime) python tools/cutout-qi5.py python tools/make-layered-loop.py out.mp4 许可 - 代码:MIT,版权 elysia395(上游)+ yangcanbin31-coder(本仓库改动) - 角色形象(七草荠 /《彻夜之歌》):版权归原作者/版权方,不随 MIT 授权,商用与再分发请自行确认授权
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
yangcanbin31-coder/dsh-nazuna-wallpaper-engine
把本机视频壁纸渲染到界面后方,配七草荠吉祥物
相关插件 · 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
这是你的仓库?认领条目