選擇你想包含在動態中的活動類型。

對於自架設的節點,克隆URL可能會根據你的設定有所不同。

停止通過伺服器代理音訊位元組;改為302重定向至物件URL,讓尋找/範圍請求/邊緣快取由原始伺服器處理。用一個最小的僅限用戶上傳的串流查詢取代繁重的TRACK_SELECT(曲目連接加兩個LATERAL專輯/藝術家子查詢),並將解析後的資料行快取於記憶體中300秒,讓HEAD+GET配對及重複播放跳過Postgres。

從播放清單/收藏串流播放的曲目透過Navidrome,且不帶uploadId — 這些會話保存後恢復成死掉的/uploads//stream URL,因此重啟後恢復和跳轉時不會播放任何內容(看似平台特定,但實際是佇列內容特定)。相同的uploadId門檻阻止了prefetchTick和cacheTrack快取這些曲目。- 播放:統一的playable()解析器 — 每首曲目使用快取檔案、上傳端點或Navidrome串流URL;用於恢復/跳轉/下一首/上一首/加入佇列 - trackCache:以uploadId或trackId為鍵,從正確端點下載,當mimeType未知時以Content-Type命名檔案 - MusicView/PlaylistsView:收藏和播放清單透過相同路徑播放,因此快取曲目從磁碟播放;移除快取盲點播放輔助

- 下一首/上一首/佇列跳轉及MPRIS媒體鍵現在從我們自己的項目鏡像及當前快取狀態重建佇列(快取曲目從磁碟播放,其餘串流)而非引擎的next()/previous(),後者只會移動到已佇列的項目。- 恢復和跳轉立即播放 — 不再阻塞完整下載後才播放(過去在弱連線時會卡在「快取中」)。- swapQueueToLocal透過內部集合去重,而非讀取引擎的非同步佇列;在重新佇列/插入/移除時清除。

恢復時,如果要恢復的曲目尚未快取,先下載到磁碟(錯誤時回退串流),讓恢復播放時從本地檔案無縫播放。迷你播放器在下載時顯示琥珀色「⏳ 快取曲目中…」,播放開始後清除。

下一首曲目下載只在「播放下一首」時觸發(立即下載),自動前進時不觸發,因為50%觸發條件使用引擎的duration_ms — 對串流來說報告晚或為0,導致pos/dur >= 0.5很少成立。改用曲目元資料中的持續時間(API預先得知)計算中點,確保每首曲目在50%時可靠開始下載下一首。版本升級至0.4.9。

- 修正專輯鑽取頁面曲目欄位未對齊:disc-header包裝器只佔內容寬度,導致可伸展/右對齊儲存格無法填滿整行。改為包裝器填滿寬度。- 在曲目列表和專輯檢視中給藝術家欄更多空間。版本升級至0.4.8。

- 修正重複播放全部時未到最後曲目即重啟至第一首:預取交換先刪除再插入佇列項目,導致佇列暫時縮小,使當前曲目短暫成為最後一首(在重複播放全部下會循環)。現在改為先插入再刪除(不縮小),且只交換當前曲目之後的曲目。- 在當前曲目播放約50%時預取下一首(當串流持續時間未知時使用時間閾值回退)。- 避免「永遠等待」:串流令牌請求設10秒超時,快取下載設60秒(可中止),避免連線卡住導致播放/恢復掛起。- 更快恢復:當所有佇列曲目已快取時跳過串流令牌請求 — 恢復快取佇列不需網路。- 專輯檢視:依光碟編號及曲目編號排序,顯示曲目編號,並為多光碟專輯加上「Disc N」標題。版本升級至0.4.7。

等待完整下載後才播放在大檔案時體驗不佳。改回漸進式HTTP串流,讓rockbox緩衝足夠後即開始播放 — 無需等待完整下載。- streamAndPlay / resumeSession立即播放(快取曲目從磁碟,其餘串流)。無阻塞下載。- 保持防止掉線規則:僅當當前曲目從本地檔案播放時才預取/快取下一首,避免同時串流和下載。- 迷你播放器在當前曲目播放但位置未前進(初始串流載入或卡頓)時顯示琥珀色「⏳ 緩衝中…」,背景下載時顯示「快取下一首」。

掉線和啟動慢源於同時串流與下載曲目 — 在弱連線下帶寬加倍 — 以及在RAM中緩衝整首曲目。重構播放流程,確保曲目不會同時串流和下載:- 先下載再播放:streamAndPlay / resumeSession先將起始曲目下載到磁碟,再播放本地檔案(播放期間無網路 → 無緩衝不足)。- 僅當當前曲目從本地檔案播放時才預取下一首,避免背景下載與正在聽的音訊競爭頻寬。基於位置觸發(無duration_ms依賴 → 也修正Linux上串流持續時間報告延遲)。- 串流快取直接下載到磁碟,非Buffer/arrayBuffer — 無每曲目RAM峰值(對1GB SBC重要)。- 將預讀緩衝從64秒縮減至24秒(本地檔案只需交叉淡出重疊):減少記憶體,初始填充更快。

快取依賴預取超過50%觸發,該條件需duration_ms已知。對HTTP串流,rockbox在Linux上持續時間報告較晚(macOS快),導致觸發門檻很少開啟,快取曲目數量少。- 每個tick快取當前播放曲目,不受持續時間限制,下載失敗時在下一tick重試。- 保持預取及本地檔案交換以支援無縫銜接/交叉淡出。- 以uploadId去重正在進行的下載。

將單一交叉淡出秒數值替換為四個獨立欄位 — 淡出延遲、淡出持續時間、淡入延遲、淡入持續時間 — 應用於rockbox引擎(建構函式設定及setCrossfade),並保存在settings.toml。均衡器面板可編輯這些欄位(使用,/.切換欄位,[ ]調整)。預設交叉淡出為6秒混音。版本升級至0.4.4。

用於喚起作業系統/鎖屏媒體控制的無聲<audio>元素由迷你播放器渲染,當無播放時返回null(不掛載DOM)。因此一次性註冊效果捕捉到null元素且不再執行,導致playMediaAnchor()在第一首曲目時無效 — 這是最需要手勢的時刻 — Media Session從未出現。將該元素所有權移至media-session-anchor.ts:首次播放時懶惰創建並自動附加持久<audio>元素,確保手勢啟動(playNow / resume / 媒體鍵)總有真實元素可觸發,獨立於React渲染時機。移除React渲染的<audio>、ref及註冊;同步效果僅鏡像狀態。並停止靜音該元素(音訊已靜音),因為零音量元素在某些瀏覽器會抑制Media Session。

Rocksky是一個基於AT協議(Bluesky)的去中心化、開源的Last.fm替代方案。

Rocksky自動追蹤你從Spotify、Jellyfin、Navidrome、瀏覽器、Android等多平台聆聽的音樂(稱為“scrobble”),並將資料發布到你的去中心化身份。你可以擁有自己的聆聽歷史,實時查看朋友在聽什麼,獲得豐富的統計數據,並發掘新音樂 — 全部無需中央公司控制你的數據。

以下提供自架設及進階使用說明。

tools/console/是一個Clojure專案,集中管理monorepo中所有操作腳本 — 詞彙生成、資料庫遷移、資料同步/回填、Rust守護程序、開發運維整合 — 透過一個可探索的REPL。你不必記住哪個package.json腳本在哪個工作區,或哪個cargo run -p ...啟動哪個守護程序,只需呼叫函式即可。

完整指令目錄與設計說明見tools/console/README.md。

完整文件請參考docs.rocksky.app。

本倉庫為問題回報與討論中心。

Rocksky由熱愛音樂且希望掌控自己數據的使用者用❤️打造。