前言¶
DSH 的 Web UI 负责展示会话和文件,但本身不负责盯着磁盘上的下载目录。如果你手动从站点拉大模型、数据集或训练素材,只能自己开一个资源监视器或者反复刷新文件夹,才能确认某个下载是否还在推进、速度大概多少。这类信息在下载刚结束、文件不再增长的那一刻最需要,而系统级的资源监视器又和 Web UI 脱节。
dsh-download-indicator 就是为这个缺口做的一个小插件。它由 falleneve-ctrl 维护,用插件的形式把你指定目录里「还在增长」的文件拉进 Web UI,在右上角给出一个半透明、可拖拽的进度浮窗。空闲时它自动淡出,不占界面。
下面按定位、功能、安装、用法和注意事项依次介绍。
这是什么¶
一句话定位:这是一个面向 DSH Web UI 的下载进度指示插件,只在文件确实在增长时出现,显示进度条、已下载大小和实时速度。
它解决的问题很具体:
- 手动下载大模型或数据集时,缺少一个和 Web UI 在一起的进度视图,只能另外开系统工具确认。
- 百分比常常算不出来(远端不给总大小),很多工具会显示假百分比,这个插件选择不显示假数据。
- 下载完成前界面位置常被其他窗口占着,需要一个可以随手拖走、不遮挡工作的浮窗。
它面向的是本地挂载了下载目录、且用 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,所以这个插件永远不会阻止客户端启动。对一个只是显示进度的插件来说,这个容错处理是必要的。
适用场景与注意¶
适合的场景:
- 本地用 DSH Web UI,并且在固定目录里下载模型、数据集或训练素材,需要边看边等。
- 想确认某个下载是否还活着,而不只是看文件大小有没有变。
- 下载总大小未知,不愿看一个可能不准的百分比,更希望看到实测速度和已下载量。
需要注意的几点:
- 插件直接读取你指定的目录,并以当前 DSH 进程的权限运行。安装前应先打开
lib/index.js和assets/widget.js核对源码,确认监视的目录范围和扫描行为符合预期。 - 许可证在仓库中标注为 MIT,安装前仍建议自行确认许可证条款。
- 它是 UI 辅助类插件,不参与下载本身的管理,也不改变下载行为,只做展示。
- 默认路径是 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