dsh-download-indicator:给 DSH Web UI 加一个下载进度浮窗

前言

DSH 的 Web UI 负责展示会话和文件,但本身不负责盯着磁盘上的下载目录。如果你手动从站点拉大模型、数据集或训练素材,只能自己开一个资源监视器或者反复刷新文件夹,才能确认某个下载是否还在推进、速度大概多少。这类信息在下载刚结束、文件不再增长的那一刻最需要,而系统级的资源监视器又和 Web UI 脱节。

dsh-download-indicator 就是为这个缺口做的一个小插件。它由 falleneve-ctrl 维护,用插件的形式把你指定目录里「还在增长」的文件拉进 Web UI,在右上角给出一个半透明、可拖拽的进度浮窗。空闲时它自动淡出,不占界面。

下面按定位、功能、安装、用法和注意事项依次介绍。

这是什么

一句话定位:这是一个面向 DSH Web UI 的下载进度指示插件,只在文件确实在增长时出现,显示进度条、已下载大小和实时速度。

它解决的问题很具体:

  1. 手动下载大模型或数据集时,缺少一个和 Web UI 在一起的进度视图,只能另外开系统工具确认。
  2. 百分比常常算不出来(远端不给总大小),很多工具会显示假百分比,这个插件选择不显示假数据。
  3. 下载完成前界面位置常被其他窗口占着,需要一个可以随手拖走、不遮挡工作的浮窗。

它面向的是本地挂载了下载目录、且用 DSH Web UI 做日常操作的开发者。

核心功能

下面每条都来自插件 README 的说明。

1、按需出现

插件每 2 秒轮询一次被监视目录,连续两次没有发现增长的文件,浮窗就淡出并停止显示。空闲时它不占界面。

2、可拖拽,位置被记住

浮窗可以任意拖动,位置保存在 localStorage,刷新页面和重启客户端都不会丢。它不会被拖出屏幕,窗口尺寸变化时如果位置越界,会自动拉回可见区域。

3、实时速度是测量出来的

服务端对比相邻两次轮询之间的文件大小变化来测量速度,而不是在客户端猜一个数。为了让读数平稳,取最近三个采样点做平均。

4、自动发现下载,不需要逐个声明

插件扫描被监视目录(递归深度不超过 3 层),保留大小超过 20 MB 且扩展名属于已知压缩包或模型格式的文件,在其中找出还在增长的那些。你只需要给目录,不用在配置里罗列每个下载任务。

5、总速度

浮窗头部显示当前所有活动下载的总速度。

6、没有总大小也不给假百分比

当最终大小未知时,插件显示条纹状的不确定进度条加上已下载量,而不是编一个百分比。已知总大小维护在 lib/index.js 内的 KNOWN_TOTALS 里,按小写文件名索引;未登记的文件只显示进度不显示百分比。

安装与启用

官方安装命令如下,用桌面 profile:

dsh plugin --profile desktop add dsh-download-indicator

装完需要重启一次客户端,因为桌面外壳是在启动时收集 index-injection 表的。如果你当时正开着页面,再刷新一次。

卸载命令:

dsh plugin --profile desktop remove dsh-download-indicator

典型用法

默认开箱即用。插件默认监视两个目录:

F:\ComfyUI\models
F:\training\downloads

也就是说,如果下载落在这两个位置,安装并重启后浮窗就会自动出现,不需要改任何配置。常用场景就是从站点拖模型或数据集到 F:\ComfyUI\models,然后在 Web UI 右上角直接看进度和速度。

如果下载目录不在上面这两个,通过环境变量指定一个或多个目录,用分号分隔:

DSH_DOWNLOAD_WATCH=D:\downloads;E:\datasets

这是 README 里唯一的配置项,默认值就是前面那两个 Windows 路径。想更精细地控制扫描行为,可以改 lib/index.js 顶部的三个常量:

const MIN_SIZE = 20 * 1024 * 1024   // ignore files smaller than this
const MAX_DEPTH = 3                 // folder scan depth
const MIN_GROWTH = 128 * 1024       // growth needed to count as "downloading"

MIN_SIZE 决定忽略多大的文件,MAX_DEPTH 决定目录扫描深度,MIN_GROWTH 决定一个文件至少要增长多少才被判定为「下载中」。

工作原理

插件分成服务端和客户端两部分,因为桌面客户端只接受一种注入方式。这一点值得说明,因为它解释了插件为什么这样分层。

服务端(lib/index.js)在 DSH Web 服务上注册两个路由:/dsh-download/status 返回 JSON(活动下载、大小、速度),/dsh-download/widget.js 返回客户端脚本。同时它推送一条结构化的 index-injection 记录,把脚本加载进来。

客户端(assets/widget.js)负责构建浮窗元素、轮询 status 路由并渲染。

注入刻意使用内联 script 行,而不是 script-src 行。原因是 script-src 加载失败会直接拒绝客户端启动,一旦路由缺失,整个 UI 会跟着起不来;内联行自己创建 <script> 标签并吞掉 onerror,所以这个插件永远不会阻止客户端启动。对一个只是显示进度的插件来说,这个容错处理是必要的。

适用场景与注意

适合的场景:

  1. 本地用 DSH Web UI,并且在固定目录里下载模型、数据集或训练素材,需要边看边等。
  2. 想确认某个下载是否还活着,而不只是看文件大小有没有变。
  3. 下载总大小未知,不愿看一个可能不准的百分比,更希望看到实测速度和已下载量。

需要注意的几点:

  1. 插件直接读取你指定的目录,并以当前 DSH 进程的权限运行。安装前应先打开 lib/index.js 和 assets/widget.js 核对源码,确认监视的目录范围和扫描行为符合预期。
  2. 许可证在仓库中标注为 MIT,安装前仍建议自行确认许可证条款。
  3. 它是 UI 辅助类插件,不参与下载本身的管理,也不改变下载行为,只做展示。
  4. 默认路径是 Windows 风格,Linux 或 macOS 用户需要在环境变量里改成自己的目录。

结尾

这个插件的价值在于把「下载进行中」这件事放进了 DSH Web UI 本身,用实测的速度和进度替代猜测,空闲时自动消失。安装一条命令,配置项全部可选,代码量不大,适合当作自己下载流程里的一个常驻小工具。

插件目录页:https://www.skillhub.cn/plugins/falleneve-ctrl/dsh-download-indicator

GitHub:https://github.com/falleneve-ctrl/dsh-download-indicator

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜