dsh-boot-video-manager
A companion playlist panel for the dsh-boot-animation intro-video plugin: add clips without leaving the app, order them, and switch between sequential, random and single-clip playback. Sequential order is made deterministic by parking every clip except the one due to play in a disabled/ subdirectory
Install
dsh plugin --profile web add dsh-boot-video-manager
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
dsh-boot-video-manager
给 DSH 开屏动画插件(dsh-boot-animation)配的
开屏视频播放列表面板:装在 设置 → 插件管理 里,不用离开 app 就能排片。
上游插件自己的设置卡片只能开关、调淡入时长、勾选素材池,
没法把新视频放进去、也没法决定先后。这个插件补的就是这两块。
前置要求
- 装好 DSH(DeepSeek Harness),并已安装上游开屏插件
dsh-boot-animation。 - 本插件是它的「管理端」:自己不播视频,而是替你维护上游的素材池目录和播放顺序。
没装上游的话,页面会提示「没有找到开屏动画插件」,此时什么都管不了。
功能
- 添加视频:从文件选择框多选,直接传进素材池(
.mp4.webm.m4v.mov,单支上限 512 MB)。 - 排序:拖不动就用每行的
↑↓,或整列重排。 - 三种播放方式:
顺序播放/随机播放/单次播放(见下)。 - 声音开关 + 音频自检:把上游插件的「播放影片声音」「点鼠标直接进入」搬到这个面板里,并显示上次启动到底出没出声(见下「开屏声音」)。
- 勾选参与:不想让它出现就取消勾选,不用删文件。
- 回收:把某支移出播放列表(挪进
recycle\,可随时找回)。 - 打开素材文件夹:一键在资源管理器里定位。
安装
三种方式,按需选一种。前两条命令里的 --profile <profile 名> 是必需参数 —— dsh plugin
少了它会直接报错 error: required option '--profile <name>' not specified。profile 名就是
%USERPROFILE%\.dsh\profiles\ 下的目录名,查一下:
Get-ChildItem "$env:USERPROFILE\.dsh\profiles" -Directory | Select-Object -ExpandProperty Name
方式 A —— 从 npm 装(推荐)
dsh plugin --profile <profile 名> add dsh-boot-video-manager
包已发布在 npm:dsh-boot-video-manager
(npmjs.com/package/dsh-boot-video-manager)。
本仓库当前版本 1.2.1(音频自检 + 「冷启动直接出声」脚本),已同步发布到 npm
(npm view dsh-boot-video-manager version 会看到 1.2.1)。
通过 dsh.bundle.patch(cordis.patch.yml)自动挂载宿主入口,装完刷新页面即可。
方式 B —— 直接从 GitHub 仓库装
dsh plugin --profile <你的 profile 名> add github:Firefly-TheHerta/dsh-boot-video-manager
同样由 cordis.patch.yml 自动挂载,不需要手改配置文件。git 来源的包会走它自己的 prepare
脚本构建,本插件没有构建步骤(lib/client.js 是手写的成品),所以和方式 A 等价。
方式 C —— 桌面版(desktop profile)junction 脚本
desktop 这个 profile 由 Electron 应用独占管理,官方说法是先完全退出 DSH 再对它执行
dsh plugin --profile desktop ...(profile 的 package.json 被应用锁着)。不想退出、或者只是拿
本地这份代码调试,就走脚本建 junction:
# 安装(profile 默认 desktop) powershell -NoProfile -ExecutionPolicy Bypass -File .\tools\install.ps1 -ProfileName desktop # 卸载(只摘插件,不动视频文件) powershell -NoProfile -ExecutionPolicy Bypass -File .\tools\uninstall.ps1 -ProfileName desktop
install.ps1 只做三件事:在 profile 的 node_modules 里建一个指向本目录的
junction、备份 cordis.patch.yml、往里追加一段 - insert: 挂载项(id: boot-video-manager)。
不改 package.json、不跑 pnpm —— 所以它不会出现在 dsh plugin --profile desktop list 的输出里,
这是正常的(pnpm 只认 package.json 里记过的依赖)。
装好之后长什么样
设置(齿轮)→ 左侧导航多出一条 「插件管理」:
区域 · 说明
顶部一行 · 素材总体积、参与播放条数 / 总条数
添加视频… · 打开系统文件选择框,可多选;第 1 个加进来的就是 1 号,排在最上面(有进度条)
刷新 · 重新读一遍磁盘与播放列表
打开素材文件夹 · 在资源管理器里打开素材目录
播放方式 · 顺序播放 / 随机播放 / 单次播放 三选一
播放影片声音 / 点鼠标直接进入 · 直接改上游插件的设置(见下「开屏声音」),改完立刻生效
播放列表每一行 · 1. 编号 · 勾选框(是否参与播放)· 文件名 · 体积 · ↑ ↓(调顺序)· 设为下一个(顺序模式)/ 固定播这支(单次模式)· 回收
徽章 · 下一个 = 下次启动播它;每次播 = 单次模式下固定播它;在池中 = 此刻就在素材池里;上次启动播了 = 已经播过
已回收 · 回收掉的素材(只列出来,不参与播放)
底部说明 · 提醒改动刷新页面即生效
三种播放方式
方式 · 行为 · 池目录里留什么
顺序播放 · 第一次启动播 1 号、第二次 2 号……播完最后一支回到 1 号 · 只留「下一个」那支
随机播放 · 每次启动在勾选参与的那些里随机抽一支 · 参与播放的全部留着
单次播放 · 每次都播同一支(用「固定播这支」选它),永远不换 · 只留固定那支
顺序播放 = 「第一次启动播 1 号,第二次播 2 号」
上游插件每次启动都会在素材池里随机抽一支。为了不改上游一个字节还能做到确定性播放,
本插件用的是「池目录里只留该播的那一支」:
- 顺序模式下,只有「下一个」那一支待在
assets\videos\,其余参与播放的都停在assets\videos\disabled\
(这不是被停用,是在排队 —— 轮到自己时会被自动搬回池目录)
- 每次 DSH 启动(插件
apply()跑的时候)把游标往前推一格,于是下次启动就是下一支;播完最后一支回到 1 号 - 单次播放用同一套机制,只是不推进游标,所以每次都是它
- 因此:在资源管理器里看到
disabled\里堆着视频是正常现象,别手动去搬 - 随机模式则相反:所有勾选参与的视频都待在池目录里,由上游随机抽
开屏声音(以及「开机启动为什么没声音」)
面板上的 「播放影片声音」、「点鼠标直接进入」 两个开关,改的不是本插件的配置,而是
上游 dsh-boot-animation 自己的设置(命名空间 boot-animation):客户端通过 DSH 的
configForms 服务直接读写它。所以:
- 和上游插件设置页里的开关是同一个值,两边改都行,改完立刻生效,不用重启 DSH。
- 这里只做搬运、不另存一份配置,也就不会出现「两处设置打架」。
开机第一次没声音的元凶是「开屏自己把自己静音了」,不是浏览器那条规矩。 上游
dsh-boot-animation 的启动逻辑是「先试着不静音播,播不动就退回静音」,但那个「播不动」的判定只有一个
1.2 秒的窗口:开机后第一次播放时音频管线还没起来,经常要两三秒才响应,窗口先到,它就把自己静音了
(第二次启动管线已经热了,所以从此都有声)。这正好解释「启动一次、退出、再启动才有声」,也解释了为什么
加启动参数没用 —— 参数让带声播放合法了,可它自己掐掉得更早。
已在 dsh-boot-animation 的 src/boot-screen.js 里修好(本机那份就是正在跑的那份):
- 1.2 秒的窗口只用来把「点一下重试」架起来,不再静音元素;
- 真正静音推迟到 5 秒的兜底窗口(给冷管线留出时间,同时仍在 6 秒无画面看门狗之内);
- 已经在放静音片子时,最多再要三次声音,把声音在中途接回来;
- 结论写进
.dshba根元素的data-sound(on:/late:/muted:+ 毫秒数),面板上的自检能看出
这次到底是哪一种。
浏览器那道 autoplay 规矩依然存在,只是在这台机器上不是主因:页面在用户交互过之前不许自动播放带声音
的视频,右下角的「开声音」按钮就是为它准备的;点一下画面(或那个按钮),这一支才会带上声音(第一次点
先开声音,再点一下才进界面)。
开关 · 开 · 关
播放影片声音 · 尝试带声音播,右下角显示「开声音」按钮(默认) · 彻底不尝试,连按钮都不出现
点鼠标直接进入 · 点一下画面就直接进界面,不再拿第一下去开声音 · 第一下先开声音、第二下才进界面(默认)
素材池里这两支都有音轨(maid-splash.mp4 8.06 s / 1280x720 / 带音频,绝区零蕾米埃尔.webm
是 VP9 + Opus 立体声),所以「没声音」不是文件的问题。
冷启动直接出声的保险(启动参数)
真正的修复在 dsh-boot-animation 里(就是上面那段 1.2 秒抢跑)。这一段是保险:万一某台机器上
autoplay 策略真的是拦路的那一道,浏览器只认启动参数 —— DSH 的 Electron 没有开 autoplayPolicy,
插件本身也改不了它(宿主半侧跑在没有 Electron API 的子进程里),所以只能从快捷方式的参数上加:
--autoplay-policy=no-user-gesture-required
tools\autoplay-on.ps1 帮你把它加到 DSH 的快捷方式上(开始菜单 / 桌面 / 任务栏固定项挨个扫),
原始参数备份在同目录的 .autoplay-backup.json:
# 先看一眼会改哪个(不改动任何东西) powershell -NoProfile -ExecutionPolicy Bypass -File .\tools\autoplay-on.ps1 -DryRun # 加上参数 powershell -NoProfile -ExecutionPolicy Bypass -File .\tools\autoplay-on.ps1 # 想回到默认策略 powershell -NoProfile -ExecutionPolicy Bypass -File .\tools\autoplay-on.ps1 -Revert
加完要完全退出 DSH 再启动(启动参数只在进程启动时读一次),之后开屏就直接带声音。
tools\uninstall.ps1 卸载时会自动调一次 -Revert,把它摘干净。
这条只对「从被改过的快捷方式启动」有效:直接双击 DeepSeek Harness.exe、或换别的启动器,
还是默认策略。它不写任何注册表键,随时可以还原。
面板上的音频自检
声音卡片底下多一行采样结果,说明上次启动到底有没有出声——取的是启动画面里那个 <video> 的
真实状态:当时是否被静音、Chromium 的 autoplay 策略、页面有没有拿到用户手势、以及上游「开声音」
按钮的提示文案(浏览器为什么拒)。上次是「先静音」的话这一行会直接说出来;配完上面的启动参数、
重启 DSH,看它变成「出声了」就知道生效了。没装上游时这一行显示「上次启动的音频状态未知」。
如果页面提示「没找到上游开屏插件」、或开关不出现,说明 dsh-boot-animation 没装,
或者它的设置服务还没就绪(先刷新一下页面)。
数据放
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::8,最后更新 2026-10-17