前言¶
DeepSeek Harness(DSH)的右側欄與「文件 / 終端 / 瀏覽器」共用同一套 apps 機制,第三方插件可以在裏面再掛一個入口。長時間寫 prompt、跑終端、查文檔時,若希望旁邊有一塊不搶主工作區的「氛圍區」——帶畫面、能聽臺、又不依賴單獨開瀏覽器標籤——就需要一個嵌在側欄裏的輕量方案。
下面介紹維護者 lemonhall 的 dsh-radio-dock(社區分類:趣味換裝)。它把作者 Godot 項目 godot_citys 裏的車載電臺邏輯移植到 DSH:右側欄一個 tab,three.js 渲染車內視角與彎夜公路,電臺頻道來自 radio-browser.info,預設標籤含 City Pop 等方向。
這是什麼¶
- 倉庫:lemonhall/dsh-radio-dock
- 目錄頁:skillhub.cn 插件頁
- 版本(package.json):0.1.1
- 許可證:MIT
一句話:在 DSH 桌面版右側欄增加「📻 車載電臺」——左邊照常聊天與開發,右邊是夜路場景 + 網絡電臺 UI(開關、切臺、音量、快捷槽)。
核心功能¶
視覺與場景(客戶端)¶
- 車內視角:駕駛位高度、儀表臺與方向盤剪影;月光、星空、帶光暈的月亮。
- 會彎的公路:路面由三個正弦疊加曲線做頂點位移(96 段);相機橫向跟隨曲線、朝向跟隨切線。
- 車流與環境:同向慢車被超越(紅尾燈)、對向車輛掠過(暖白大燈);護欄柱、路燈、遠處城市剪影循環。車流爲程序生成,非真實交通模擬。
three.js 使用包內 vendor(r169),不依賴 CDN。
電臺(UI + 宿主中轉)¶
- 頻道目錄來自 radio-browser;界面提供四個標籤預設:City Pop / Jazz / Synthwave / Lofi,以及頻道列表、8 個快捷槽,以及開關 / 上下臺 / 音量。
- 斷流自愈:公共電臺常被服務器斷開;客戶端含重連與看門狗(含「未暫停但播放位置不前進」的殭屍連接檢測)。
音頻與目錄請求經宿主半邊路由中轉(見下文「架構」),以便走本機代理、避免混合內容與 CORS。
宿主提供的 HTTP 路由¶
| 路徑 | 作用 |
|---|---|
/dsh-radio/ping |
配置自檢 |
/dsh-radio/stations |
取頻道目錄(經本機代理訪問 radio-browser) |
/dsh-radio/stream |
音頻流轉發(curl 走代理,邊收邊 pipe) |
/dsh-radio/three.module.js |
提供插件自帶的 three.module.js |
安裝與啓用¶
官方 README 給出的安裝方式爲 plugin_manager install_bundle,目標爲本地鏈接路徑(請換成你機器上的實際路徑):
plugin_manager install_bundle target=link:E:\development\dsh-radio-dock
若倉庫已在本地,將 target=link: 後改爲該目錄即可。README 亦給出 clone 後替換路徑的示例,但安裝動作仍是 install_bundle,而非其他臆造的 CLI 子命令。
注意:客戶端半邊(右側欄 tab)的改動需要重啓一次 DSH 應用;宿主半邊可熱生效。
裝好後:右側欄點「+」→ 選擇 📻 車載電臺。
典型用法¶
- 安裝 bundle 並按要求重啓(若剛更新客戶端腳本)。
- 在右側欄添加「車載電臺」tab,展開後可看到當前播放臺、四個風格標籤與 radio-browser 實時結果列表。
- 用開關、上下臺、音量與 8 個快捷槽切換常聽頻道;場景在 tab 內持續渲染夜路。
- 若目錄或流拉取失敗,檢查
cordis.patch.yml中的代理與 API 基址是否與你的網絡環境一致(默認代理爲http://127.0.0.1:7897)。
熱鍵語義移植自原 Godot 項目 project.godot 中的 vehicle_radio 相關動作(如 power_toggle、next、prev、quick_open 等),具體是否在 DSH 內全部映射以當前版本客戶端爲準。
配置¶
編輯插件包內的 cordis.patch.yml:
| 鍵 | 默認 | 說明 |
|---|---|---|
apiBase |
https://de1.api.radio-browser.info |
電臺目錄 API |
proxy |
http://127.0.0.1:7897 |
目錄與音頻流均經此代理 |
defaultCountry / defaultTag |
Japan / city pop |
默認篩選方向 |
cacheTtlMs |
21600000(6h) |
目錄緩存時長 |
streamTimeoutMs |
21600000(6h) |
音頻流總時限(對應 curl --max-time);過小會導致播一會兒自行停止 |
架構簡述¶
lib/index.js 宿主:上述 /dsh-radio/* 路由
lib/client.js 客戶端:註冊 sidebarRightTabs;RadioScene(three.js)+ RadioPanel(電臺 UI)
vendor/three.module.js three r169
爲何音頻要宿主中轉(README 說明):目錄與音頻需走本機代理;許多公共臺爲 http 流,而頁面爲 http://127.0.0.1:19387,直接請求會觸發混合內容攔截;同時繞開 CORS。
原 Godot 側的 FFmpeg GDExtension 後端在本插件中不需要;瀏覽器 <audio> 直接播放經宿主轉發的流即可。
適用場景與注意¶
適合:已在用 DSH 桌面版、希望右側欄多一個輕量「夜駕 + 電臺」氛圍;習慣 City Pop / Jazz 等標籤從 radio-browser 選臺的用戶。
限制(README 明確):
- 頻道依賴公共目錄與公共流,可用性不保證(掛臺、限流常見)。
- 未實現「當前播放曲目」展示(多數公共流無可靠 ICY 元數據)。
安全與權限:插件以當前 DSH 進程權限運行;宿主會通過配置的 proxy 用 curl 拉取外部目錄與音頻流。安裝前請閱讀 源碼倉庫 與 MIT 許可證,確認 proxy、API 與路由行爲符合你的環境策略。
DSH 社區插件目錄(如 skillhub.cn)爲獨立生態站點,與 DeepSeek / 幻方無官方從屬關係;安裝來源以你信任的目錄頁或 GitHub 爲準。
結尾¶
dsh-radio-dock 把 godot_citys 的車載電臺體驗收進 DSH 右側欄:three.js 夜路與彎公路負責畫面,radio-browser 負責選臺,宿主路由負責代理與混流兼容。若你需要在開發主界面旁掛一個可切臺的 City Pop 側欄,可按 README 的 install_bundle 步驟接入。