前言¶
DeepSeek Harness(DSH)啓動時,默認會先出現官方的 HARNESS / Loading plugins… 啓動頁。若想在應用 UI 掛載之前就展示自定義全屏畫面,瀏覽器半邊插件往往來不及:它們要等插件條目全部激活後才運行,那時官方啓動頁已經畫出來了;官方實踐文檔也禁止插件向 document.body 追加節點或替換 app 根節點。
oumaekumiko0821/dsh-splash-gojo(包名 dsh-boot-splash)走另一條路:只做 host 半邊,在宿主渲染啓動 HTML 時注入樣式、遮罩結構和交接腳本,把一張 JPEG 內聯爲 data URI,零運行時 npm 依賴。下面介紹它做什麼、怎麼裝、怎麼調參。
這是什麼¶
維護者 oumaekumiko0821 在 GitHub 開源的 DSH 開機動畫插件,社區目錄 SkillHub 分類爲「趣味換裝」。當前倉庫版本 1.0.0(見 package.json),代碼 MIT 許可;默認啓動圖素材另有出處說明,不在 MIT 範圍內(見倉庫 NOTICE)。
一句話:把一張圖變成全屏啓動序列——第一幀就位,啓動期間緩慢縮放、橫向光帶掃過、中心輝光與 HUD 進度,應用掛載完成時閃一下並淡出。
核心功能¶
視覺與交互¶
- 全屏主視覺:圖片
cover鋪滿,從約 1.14 倍緩落到 1.005 倍。 - 橫向光帶:帶輝光的掃描光帶從左到右。
- 中心輝光:中央紫色光暈由暗到亮,隨呼吸停在中段。
- HUD:左下字標(默認
DEEPSEEK HARNESS,字距收攏 + 去模糊浮現)、副標題、進度條(先自行推進到 88%,就緒時補滿)、階段文案(初始化內核 → 裝載插件 → 恢復會話 → 就緒)、右上角百分比。 - 跳過:點擊屏幕任意處,或按
Esc/ 空格 /Enter;約 1.5 秒後右下出現「點擊跳過」提示。 - 語言:跟隨宿主
<html lang>,中文環境顯示中文,其它顯示英文。 - 無障礙:
prefers-reduced-motion: reduce時關閉位移動畫,只保留淡入淡出。
爲什麼是 host 插件¶
開機動畫必須早於應用 UI。本插件監聽 webserver/index-inject,每渲染一次啓動 HTML 就推三行:
| 行 | 位置 | 內容 |
|---|---|---|
style |
<head> |
全部動畫 CSS + 兜底動畫 |
html |
<body> 之後 |
遮罩結構 + 內聯爲 data URI 的圖片 |
script |
同一 body 組 | 就緒 / 上限 / 跳過交接邏輯 |
沒有 client 半邊,不 import 其它模塊;遮罩在 <div id="root"> 之前,React hydrateRoot 不會碰到它。
就緒判斷:前端加載卡 [data-dsh-boot] 被 React 接管替換時視爲掛載完成;#root 出現非加載卡子節點爲兜底。
三層退出(避免界面被卡住):
- 就緒信號 → 淡出(約 620ms + 閃光)。
- 硬上限
maxShowMs(默認 9s)→ 腳本自行淡出。 - 純 CSS 兜底:
dshs-failsafe在maxShowMs + 1.5s時將visibility設爲hidden,即使腳本全部失敗界面也會露出。
安裝與啓用¶
插件以當前 dsh 進程權限運行;安裝前請自行閱讀倉庫源碼與許可證(含啓動圖 NOTICE)。
dsh plugin --profile <profile> add <本目錄絕對路徑>
Windows 下必須使用絕對路徑(裸目錄名會被當成 npm 包名)。因聲明瞭 dsh.bundle,管理器會同時寫入 dsh.profile.bundles。
- 新增插件需重啓宿主:動畫寫在啓動 HTML 裏,重啓後首次加載頁面才能看到。
- 桌面端(Electron)的
desktopprofile 由應用獨佔,全局dshCLI 會拒絕;須通過應用自帶載體 CLI 或應用內插件管理頁安裝。
卸載與暫停¶
卸載:
dsh plugin --profile <profile> remove dsh-boot-splash
暫停(不卸載):在 profile 的 cordis.patch.yml 增加一行,重啓後生效:
- id: dsh-boot-splash
disabled: true
調參¶
在同一 patch 條目的 config: 塊中修改;保存後下一次頁面加載生效,不必重啓宿主:
- id: dsh-boot-splash
name: dsh-boot-splash
disabled: false
config:
minShowMs: 2000 # 開場動畫時長,同時驅動進度條自行推進
maxShowMs: 6000 # 硬上限,超時自行收掉
wordmark: 'DEEPSEEK HARNESS'
allowSkip: true
enabled: true # false = 不注入任何行
取值會被夾到安全範圍(minShowMs 200–30000,maxShowMs 500–120000),wordmark 會做 HTML 轉義。
更換啓動圖¶
替換 assets/boot-splash.jpg(任意尺寸 JPEG)後執行構建,圖片會重新內聯進 lib/index.js:
npm install
npm run build
倉庫自帶測試(需 jsdom):
npm test
tests/verify.mjs 會走宿主真實路徑:收集註入行 → jsdom 渲染並執行腳本 → 斷言遮罩、退出時機與清理。若要驗證宿主是否把行寫進 HTML,可用隔離 profile 冷啓動探針(README 中有 dsh --profile splash-probe --no-open --port 0 等步驟)。
適用場景與注意¶
適合:希望在 DSH 首屏前展示品牌化或趣味開機動畫、且接受每次頁面加載(含刷新)都會播放一次的語義。
邊界(來自 README):
- 不需要時在 patch 裏
disabled: true或config.enabled: false。 - 啓動期遮罩攔截指針事件(便於「點擊跳過」);就緒後節點移除,不殘留。
- 不做亮度/主題自適應;默認暗色遮罩,淺色主題下偏「片頭」觀感。
- 圖片內聯進 HTML,每次加載約 400KB 本機傳輸。
- 遮罩
z-index: 100000,僅存在於啓動期。
DSH 生態理念是「一切皆插件」;SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。