中文EN

dsh-video-skin

theme已测通过npmMIT

把一段循环短片铺成聊天背景(可调透明度),启动时再播放一段有声片头动画。首次启动若为浅色主题,会一次性切到深色(附撤销提示)。

下载量 / Downloads
32,261
依赖体积 / node_modules
17.49 MB
测试时间 / Tested
2026-11-06

安装

dsh plugin --profile web add dsh-video-skin

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载—
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

dsh-video-skin

![Awesome DSH Plugin](https://awesome-dsh-plugin.com)

DSH 的视频皮肤:把一段短片铺成整个 Web 界面的聊天背景,并在启动时用另一段短片做开机动画——

有声播放、完整放完再渐变淡出进界面、点击画面随时跳过。

  • 开机动画:全窗短片(带声音)+ 真实启动进度条 + 常驻的「点击画面跳过」提醒;片子先完整放完

(ended),再用固定时长 fadeMs 渐变淡出,音量也跟着一起淡、不会被硬切。

> 早先的版本是"从片尾往前 fadeMs 开始交叉溶解、片子放完那一刻正好淡完",而且**淡出时长用的是

> 当时的真实剩余时间 —— 界面就绪得晚时剩余可能只剩 100~200ms,那次退场看起来就是硬切**

> (用户报的"有时候还没放完就切掉了"正是它)。现在默认 exitMode: 'end':先放完,再淡;

> 想要片尾交叉溶解可以设成 'tail',淡出时长同样固定。

  • 聊天背景:无声、循环、object-fit: cover 铺满视口,画布与侧栏半透明,画面明显看得见、文字照样读得清。
  • 和别的壁纸插件共存:检测到 dsh-wallpaper-engine 这类插件在管桌面时,自动让路

(不建背景层、不抢 --dsw-alias-* token),开机动画照常保留;也可以一键切「始终接管」(见 §3.7)。

  • DSH 设置里也有一页:设置 → 视频皮肤,状态摘要 + 背景归属 + 三个透明度滑块 + 素材开关

(和 Token Monitor、刷B站 那些插件并列,见 §3.8)。

  • 素材自己说了算:面板顶部两行开关 —— 只想要背景不要开场动画?关掉就行。

「更换…」选自己的 mp4/webm 上传即可,随时「默认」退回包内素材(见 §3.6)。

  • 界面上就能调透明度:右下角一个小圆钮 → 三个滑块 + 三个预设 + 实时文字对比度读数;

改完就生效、刷新还在,不必碰 JSON、不必重启 DSH(见 §3.1)。

  • 浅色主题的用户会被自动切到深色(这条素材偏暗,浅色下视频会被冲得几乎看不见):

只做一次,切完给一条可撤销的提示,点「恢复浅色」就按原值改回去,之后永远不再动(见 §3.3)。

  • 一个依赖都没有:宿主半边只用 node: 内建,页面侧是一段内联脚本,产物里没有任何 import。
英文说明见 [README.md](README.md)。

安装(一行)

设置 → 插件 → 添加插件,贴进这一行,点「安装」,然后 完全退出并重新打开 DSH:

dsh-video-skin@0.1.6
  • npm 上有预构建产物(当前最新 0.1.5,包内已含素材与产物,不需要构建)。国内装 npm 比装 GitHub 快得多;

只想跟随最新版也可以不写版本号:dsh-video-skin。

  • 走 GitHub 源码也行(内容一致,但国内可能要代理):github:Something11235/dsh-video-skin#main
  • 桌面版(Electron)的索引注入表是宿主启动时收集一次的快照 ⇒ 装完必须完全重启 DSH(刷新页面不够)。
  • 仓库里已经提交了运行所需的一切(index.js / lib / runtime / assets 的 mp4),

而且没有 prepare 脚本 —— 这不是省事,是必须:pnpm 会拦 git 依赖的构建脚本,

带 prepare 的仓库会让 dsh plugin add "github:..." 直接失败(ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED),

即使产物已经提交。

  • 卸载:dsh plugin --profile <你的 profile> remove dsh-video-skin,或用仓库里的 scripts/uninstall.ps1。
  • 国内网络直连 github 可能慢:装不上时可以加代理,或先用 npm 那条。

0. 它长什么样(本机实测截图)

![开机动画](docs/e2e-1-boot.png) · ![亮色主题下的背景](docs/e2e-2-app.png)

开机动画:短片铺满视口(有声)+ 真实启动进度条 + 右下角常驻的「点击画面跳过」 · 亮色主题:视频铺满,画布半透明,正文对比度 5% 分位 7.90

![暗色主题下的背景](docs/e2e-3-dark.png) · ![透明度调节面板](docs/e2e-4-knobs.png)

暗色主题:视频清晰可见,正文对比度 5% 分位 6.86、中位 16.06(正文要求 4.5) · 右下角圆钮展开的调节面板:两个滑块、三个预设、实时对比度 7.9(很充裕)

设置页 / 弹层永远是实心的(画布半透明、表面不透明,见 §3.2):

![设置页(亮)](docs/e2e-5-settings-light.png) · ![设置页(暗)](docs/e2e-6-settings-dark.png)

亮色主题的设置页:不透明面板,背后正文不透进来 · 暗色主题的设置页(原来这一层只有 0.36 alpha,透得最厉害)

前四张是 scripts/verify-browser.mjs 在真 Chromium里跑出来的(见 §6.1),

后两张是同一个实例里点开设置页截的。


1. 它长什么样

启动 → 覆盖层立刻占住视口(同步,先于任何网络请求)
        ├─ 短片全窗播放(有声——桌面版默认就允许;被浏览器拦下时自动退回静音)
        ├─ 底部细进度条 = 内核真实的插件激活进度
        └─ 右下角常驻胶囊:「▶ 点击画面跳过」
     → 片子放完(ended)且界面已就绪 → 整体渐变淡出 fadeMs(底色/短片/UI/**音量**一起淡)
     → 淡完节点从 DOM 移除,背景层这时才建(避免和开机抢带宽)
exitMode: 'tail' 时第 4 步换成"片子剩余 ≤ fadeMs 且界面已就绪就开始淡"(片尾交叉溶解)。
两种模式淡出时长都是固定的 fadeMs,不会随"当时还剩多少"缩水成硬切。

参数:fadeMs(默认 1000)· holdMs 18000 / holdGraceMs 4000 · noFrameMs 12000 · endlessMs 20000。

任何时候都可以进入:点一下画面、按 Esc / 空格 / 回车。

关于声音:桌面版(Electron)没有设置 webPreferences.autoplayPolicy,于是用 Electron 的默认值

no-user-gesture-required —— 未静音的 play() 直接成功,开机动画一起就是有声的。普通浏览器

(dsh web 用 Chrome 打开)默认策略会拒掉未静音自动播放;那时运行时自动退回静音继续播

(不扣住用户),并在左下角多出一个独立的声音开关 —— 点它只开声音、不跳过,两个意图不互相踩。

如果只想要安静的开机,把 boot.sound 设成 false。

2. 装进桌面版 DSH(当前正在用的这个)

DSH 桌面版(Electron)的 index.html 来自安装包里的静态 dist,tapIndex 之类的函数式变换永远不生效;

唯一的注入通道是 Host 侧 webserver/index-inject 贡献的结构化行,而且那张表是**宿主启动时收集一次、

之后没有任何刷新路径**。所以:

装完必须完全退出并重新打开 DSH。 只刷新页面不够——注入表是开机快照。
而且第一次装完之后,"开机动画"本来也只在下次启动时才看得到。

一条命令安装(不用重启就能写进 profile,但注入行要等下次启动):

powershell -ExecutionPolicy Bypass -File "D:\Projects\DSH工作台\插件制作\dsh-video-skin\scripts\install.ps1"

# 可选参数:-Profile <名字>(默认 desktop)、-DshHome <DSH_HOME>(默认 $env:DSH_HOME)
#   —— 参数名是 -DshHome,不是 -Home:`$HOME` 是 PowerShell 的只读自动变量,赋值会让脚本直接中止。

它会:备份该 profile 的 package.json / pnpm-lock.yaml / cordis.patch.yml

→ 写 dependencies(link: 指向本包)→ 把包名加进 dsh.profile.bundles

→ 在 profile 的 node_modules 里建目录链接(junction,不需要管理员)→ 打印"请重启 DSH"。

先看一眼当前状态(不改任何东西):

node "D:\Projects\DSH工作台\插件制作\dsh-video-skin\scripts\profile-link.mjs" status --profile desktop

卸载 / 回滚(同样不用重装 DSH,但注入行仍是下次启动才消失):

powershell -ExecutionPolicy Bypass -File "D:\Projects\DSH工作台\插件制作\dsh-video-skin\scripts\uninstall.ps1"
不要动 desktop 以外的 profile 来验证:仓库里的 plugindev 是干净的开发 profile,
拿它试装不会影响你正在用的界面(见 §7)。

3. 调参:改一个 JSON,刷新页面

所有可调项都有默认值,不改也能用。要改,写这两个文件之一(后者覆盖前者):

文件 · 用途

<插件目录>/video-skin.config.json · 部署期默认值(跟着插件走)

%USERPROFILE%\.dsh\dsh-video-skin.json · 你自己的覆盖(推荐改这个)

改完刷新页面即生效(配置由一条 no-store 的路由在页面加载时读取)。

桌面版例外:注入行里的那份是开机快照,所以开机动画的参数要等下次启动。

包根目录的 [video-skin.config.example.json](video-skin.config.example.json) 是一份逐项带默认值的模板,
改个名字放进上面两个位置之一即可。
{
  "boot": {
    "enabled": true,
    "file": "assets/boot.mp4",
    "fadeMs": 1000,
    "exitMode": "end",
    "skipFadeMs": 320,
    "holdMs": 18000,
    "holdGraceMs": 4000,
    "noFrameMs": 12000,
    "endlessMs": 20000,
    "hint": "正在启动…",
    "skipLabel": "点击画面跳过",
    "sound": true,
    "volume": 1,
    "soundLabel": "开启声音"
  },
  "background": {
    "enabled": true,
    "file": "assets/background.mp4",
    "veil": 0.14,
    "surface": 0.2,
    "surfaceLight": 0.6,
    "veilLight": 0.1,
    "delayMs": 1200,
    "playbackRate": 1
  }
}

开机动画

项 · 默认 · 作用

enabled · true · 关掉就是完全不注入那一行覆盖层,回到 DSH 原生启动页

file · assets/boot.mp4 · 片子在包内的相对路径,可以换成你自己的

fadeMs · 1000 · 淡出时长(固定值)。退场永远用这个时长,不会随"当时还剩多少"缩水

exitMode · end · end = 片子放完再淡(默认,动画一定看全);tail = 片尾交叉溶解(从"剩余 ≤ fadeMs"开始淡,片子最后 fadeMs 会盖在溶解里)

skipFadeMs · 320 · 点击跳过时的淡出时长(要短,用户已经决定不等了)

holdMs · 18000 · 界面迟迟不就绪时的上界。到点只把状态转成"启动较慢",不截断动画

`holdGraceMs

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:6,最后更新 2026-11-03

链接

GitHub · Homepage · npm

同类插件