NexTags - 自架音樂庫管理系統

2024/10 ~ 現在

全端開發
資料庫設計
Docker
AI 整合
進行中

基於 FastAPI + React + SQLite 的自架音樂庫管理工具,支援 metadata 批次編輯、智慧播放清單、AI 歌詞處理與自動化匯入流程

NexTags - 自架音樂庫管理系統

採用技術

FastAPI

Python 非同步 API 框架,處理後端邏輯與音檔操作

React 19

前端 UI 框架,搭配 Vite 建構

SQLite

輕量嵌入式資料庫,儲存智慧播放清單與系統設定

Redis

音檔標籤快取層,加速大型音樂庫的 metadata 查詢

Docker Compose

容器化部署,一鍵啟動完整服務堆疊

Mutagen

Python 音訊 metadata 讀寫,支援 ID3v2、Vorbis、FLAC 標籤

Claude API

AI 歌詞處理,自動校正格式、翻譯與時間軸對齊

shadcn/ui

基於 Radix UI 的元件庫,搭配 Tailwind CSS

專案介紹

NexTags 是一套自架式音樂庫管理系統,專為有大量數位音樂收藏的使用者設計。核心解決的問題是:音樂檔案的 metadata 管理太分散,需要在多個軟體之間切換才能完成整理。

透過 NexTags,所有操作都在瀏覽器裡完成:瀏覽音樂庫、編輯標籤、建立播放清單、處理歌詞,搭配 Docker Compose 部署在自己的伺服器上,完全掌控資料。

歌曲管理

音樂庫主頁面支援多條件篩選與即時搜尋,可依資料夾語言最愛等條件快速定位歌曲。支援 MP3、FLAC、M4A、OGG、WAV 等主流格式,分頁瀏覽大型音樂庫也不卡頓。

行內標籤編輯

在歌曲列表直接開啟側邊面板,編輯 20+ 種 metadata 欄位。支援 ID3v2、Vorbis Comment、FLAC 三種標籤格式,修改後即時寫入原始檔案。

欄位涵蓋 Title、Artist、Album 及對應的 Sort 欄位,還有 Genre 多標籤選擇、Language、Favorite 等自訂欄位。搭配 pypinyin 自動產生拼音排序值,不用手動填寫 Sort 欄位。

智慧播放清單

以動態篩選條件組成播放清單,支援依標籤包含/排除語言最愛等條件過濾,搭配多種排序邏輯(標題、建立時間、專輯、歌手)。

單一或批次匯出 M3U 檔案,直接給 Navidrome、Jellyfin 等播放伺服器使用。播放清單設定也支援 JSON 格式匯出入,方便備份跟遷移。

音樂匯入流程

設計了 7 步驟的引導式匯入流程,把新音樂入庫所需的所有操作串成一條線:

Step 1 - 上傳

將音檔上傳到暫存區,支援批次拖曳上傳。

Step 2 - 自動轉檔

M4A 檔案透過 FFmpeg 自動轉為 FLAC,轉檔過程保留所有原始標籤。

Step 3 - 提取 Metadata

使用 Mutagen 自動讀取音檔的現有標籤資訊。

Step 4 - 標籤編輯

在入庫前校對跟補齊 metadata,確認歌曲資訊正確。

Step 5 - 歌手管理

檢查目標音樂庫裡尚未建立的歌手資料夾,可同步上傳歌手圖片。

Step 6 - 歸檔

依設定的規則自動將檔案移動到正確的資料夾路徑。

Step 7 - ReplayGain

透過 r128gain 批次分析響度並寫入 ReplayGain 標籤,確保所有歌曲播放音量一致。

AI 歌詞處理

整合 Claude API,在標籤編輯器裡一鍵觸發 AI 歌詞處理,支援三種操作:

格式標準化

自動清理 LRC 歌詞格式,統一時間碼標記方式。

簡繁轉換

將簡體中文歌詞轉為繁體中文,保留原始 LRC 時間軸。

歌詞翻譯

支援英文、韓文等語言歌詞的行內中文翻譯。

技術架構

後端

FastAPI 處理 API 邏輯,Mutagen 負責音檔 metadata 讀寫,FFmpeg 處理格式轉換,r128gain 進行 ReplayGain 分析。資料層改用 Python 內建 sqlite3 管理智慧播放清單與系統設定,並啟用 WAL 模式與外鍵支援;Redis 保留作為音檔標籤快取層,加速大型音樂庫查詢。

前端

React 19 搭配 Vite 建構,使用 shadcn/ui 元件庫與 Tailwind CSS 設計介面。dnd-kit 處理設定頁面的拖曳排序,Sonner 提供操作通知。

部署

Docker Compose 編排 FastAPI 後端、Nginx 前端與 Redis 快取,SQLite 資料庫檔案透過 app-data volume 持久化,不再需要額外維護 PostgreSQL container。支援開發模式(Hot Reload)跟正式部署兩種配置。