前言¶
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