milmil logo

milmil

自架動畫媒體伺服器
媒體庫管理、新番日曆、動畫趨勢、彈幕播放

English | 日本語 | 한국어 | 简体中文 | 繁體中文(台灣) | 粵語

功能特色 • 截圖預覽 • macOS 應用程式 • 快速開始 • 部署 • 設定 • 開發 • 授權條款

--- ## 截圖預覽

首頁 — 精選輪播、今日時間表、趨勢排行

探索 — 當季熱門、類型篩選

新番日曆 — 按星期排列當季動畫

動畫詳情 — 劇集列表、角色、預告片

觀看頁 — 具粵語彈幕疊加層的播放器

--- ## macOS 桌面應用程式 原生 SwiftUI 客戶端,內建以 [mpv](https://mpv.io) 為核心的播放器、Core Animation 彈幕,以及離線下載。它使用與網頁版相同的 API,因此需要一台已在運行的 milmil 伺服器。

首頁——片架、今日時間表與熱門
首頁——片架、今日時間表與熱門

播放器——mpv 播放、彈幕列與分集列表
播放器——mpv 播放、彈幕列與分集列表

### 安裝 ```bash brew install --cask milmil-dev/milmil/milmil ``` 或從[最新發行版本](https://github.com/milmil-dev/milmil/releases/latest)下載 `milmil-macos-.dmg`。 > [!NOTE] > 應用程式為 ad-hoc 簽章且未經公證,macOS 會阻擋第一次啟動。請對 **milmil.app** 按右鍵選擇「**打開**」(若仍被拒絕,請前往「**系統設定 › 隱私權與安全性 › 強制打開**」),或自行執行 `xattr -d com.apple.quarantine /Applications/milmil.app` 清除旗標。Homebrew 的 `--no-quarantine` 已在 Homebrew 6 中移除。 ### 系統需求 - **macOS 15(Sequoia)** 或更新版本 - 僅支援 **Apple Silicon**,沒有 Intel 版本 - 可連線的 milmil 伺服器(0.1.20 以上) 完整說明:[macOS 應用程式](https://milmil.vercel.app/zh-TW/docs/getting-started/macos)。 --- ## 功能特色 ### 媒體庫管理 - **多來源儲存** — 本地檔案系統、SMB、SFTP,以及透過 rclone 支援 40+ 雲端後端 - **自動掃描** — 可設定掃描間隔,搭配 FFmpeg 擷取媒體中繼資料 - **檔案比對** — 多來源動畫辨識(DandanPlay 雜湊、Bangumi、TMDB、AniList) - **集數解析** — 自動從多個來源豐富集數中繼資料 ### 探索 - **新番日曆** — 按星期排列新番動畫 - **趨勢排行** — 來自 Bangumi 的人氣動畫排名 - **搜尋** — 跨動畫資料庫全文搜尋 - **類型與標籤瀏覽** — 按類型、年份、季度、格式和評分篩選 ### 播放 - **直接串流** — 相容格式的 byte-range 請求 - **容器重新封裝** — MKV 轉 MP4,無需轉碼 - **HLS 轉碼** — 基於 FFmpeg 的自適應串流,支援 session 快取 - **彈幕** — 來自 弹弹play开放弹幕网络(DandanPlay) 的彈幕留言覆蓋層 - **字幕支援** — 內嵌及外掛字幕軌 - **觀看進度** — 自動儲存位置及續播 - **外部播放器支援** — 透過 Jellyfin 相容 API 連接 Infuse、VLC、Kodi、mpv,支援 LAN 自動探索 ### 下載 - **內建 torrent 用戶端** — 基於 anacrolix/torrent,可設定做種 - **HTTP 下載** — 直接檔案下載,支援中斷續傳 - **RSS 自動下載** — 訂閱動畫,支援正規表示式篩選、解析度/字幕組偏好 - **種子搜尋** — 聚合搜尋 Nyaa、DMHY、Mikan、Bangumi.moe、ACG.rip - **下載後流程** — 完成後自動掃描、比對、解析 ### 收藏 - **觀看狀態** — 想看、在看、看過、擱置、拋棄 - **使用者評分** — 個人評分系統 - **最近紀錄** — 從上次離開的地方繼續觀看 - **Bangumi 及 AniList 同步** — 基於 OAuth 的清單同步 ### 系統 - **PWA** — 可安裝的漸進式網頁應用程式,支援離線 - **國際化** — 英文、日文、韓文、簡體中文、繁體中文(台灣/香港) - **通知** — 基於 WebSocket 的即時推播(下載/掃描事件) - **雙重驗證** — 基於 TOTP 的 2FA - **設定匯出/匯入** — 完整組態備份 --- ## 技術堆疊 | 層級 | 技術 | |------|------| | 後端 | Go 1.27, Echo v5, SQLite / PostgreSQL | | 前端 | React 19, TanStack Router, Tailwind CSS v4 | | 狀態 | Zustand (UI), TanStack Query (伺服器) | | 打包 | Vite 8, Bun | | 樣式 | Tailwind CSS v4, shadcn/ui, Hugeicons | | 動畫 | Motion (Framer Motion) | | 國際化 | Lingui v5 | | 影片 | Video.js, FFmpeg | | PWA | Serwist | | 快取 | Redis(選用,記憶體回退) | | 測試 | Vitest, Playwright, Go testing | | 程式碼品質 | Vite+ (Oxlint/Oxfmt), Lefthook, Commitlint | | macOS 客戶端 | Swift 6、SwiftUI、libmpv(MPVKit)、Core Animation | --- ## 快速開始 **Docker(建議):** ```bash git clone https://github.com/milmil-dev/milmil.git cd milmil cp .env.example .env cp api/.env.example api/.env # 在 api/.env 中設定 JWT_SECRET(必填,32 字元以上) openssl rand -hex 32 docker compose up -d ``` 接著開啟 [http://localhost:3000](http://localhost:3000) 並執行安裝精靈。 完整安裝指南:[docs-site/content/docs/getting-started/installation.mdx](docs-site/content/docs/getting-started/installation.mdx)。 **從原始碼建置**(Go 1.27+、Bun 1.3+、FFmpeg): ```bash make setup make dev ``` API 執行於 `http://localhost:8080`,前端執行於 `http://localhost:5173`。 --- ## 部署 環境變數、compose profile(`--profile postgres`)、資料卷及反向代理設定,請參閱 [docs-site/content/docs/getting-started/docker.mdx](docs-site/content/docs/getting-started/docker.mdx)。 --- ## 設定 ### 環境變數 | 變數 | 預設值 | 說明 | |------|--------|------| | `DATABASE_URL` | `sqlite://data/milmil.db` | 資料庫連線字串 | | `REDIS_URL` | — | Redis URL(開發環境選用) | | `JWT_SECRET` | — | JWT 簽章金鑰(最少 32 字元,必填) | | `MILMIL_ENCRYPTION_KEY` | — | AES-256 金鑰,用於加密儲存憑證 | | `API_PORT` | `8080` | API 伺服器埠 | | `DATA_DIR` | `./data` | 下載及轉碼快取目錄 | | `TORRENT_LISTEN_PORT` | `42069` | Torrent DHT/peer 埠 | | `SEED_RATIO` | `1.0` | Torrent 做種比率目標 | | `SEED_TIME_MINUTES` | `60` | Torrent 做種時長 | | `DANDANPLAY_APP_ID` | — | DandanPlay API 憑證 | | `DANDANPLAY_APP_SECRET` | — | DandanPlay API 憑證 | | `DEBUG` | `0` | 啟用除錯紀錄 | ### 外部整合(選用) | 服務 | 用途 | 設定 | |------|------|------| | **Bangumi** | 動畫中繼資料、OAuth 同步 | 設定 > 整合 | | **AniList** | 替代中繼資料來源、OAuth 同步 | 設定 > 整合 | | **弹弹play开放弹幕网络(DandanPlay)** | 檔案比對、彈幕留言 | 環境變數或設定頁面 | | **TMDB** | TV 節目交叉參照 | 設定 > 整合 | --- ## 開發 ### 專案結構 ``` milmil/ api/ # Go 後端 cmd/server/ # 進入點 internal/ api/ # HTTP 處理器 + 路由 auth/ # JWT + 2FA cache/ # Redis / 記憶體快取 config/ # 環境組態 db/ # 資料庫設定 + 遷移 downloader/ # Torrent + HTTP 引擎 ffmpeg/ # 轉碼 integration/ # Bangumi, AniList, DandanPlay, TMDB matcher/ # 多來源動畫比對器 metadata/ # 中繼資料豐富化 notification/ # 事件通知 resolver/ # 集數解析器 rss/ # RSS 訂閱解析 scanner/ # 媒體庫檔案掃描器 storage/ # SMB/SFTP/本地儲存提供者 store/ # SQLc 產生查詢 torrent/ # 種子搜尋提供者 worker/ # 背景工作 ws/ # WebSocket hub migrations/ # SQL 遷移 web/ # React 前端 src/ components/ # UI 元件 hooks/ # 自訂 hooks lib/ # API 用戶端、工具函式 locales/ # 國際化翻譯(6 種語言) pages/ # 頁面元件 routes/ # TanStack Router 定義 store/ # Zustand stores styles/ # 全域 CSS + 主題 e2e/ # Playwright 測試 ``` ### 指令 ```bash # 開發 make dev # 啟動雙伺服器(熱重載) make dev-api # 僅 API(使用 air) make dev-web # 僅前端(使用 Vite) # 建置 make build # 正式環境前端建置 # 測試 make test # 執行所有測試(Go + 前端) cd web && bun run test:run # 前端單元測試 cd web && bun run test:e2e # Playwright E2E 測試 # 品質 make lint # Go vet + vp lint (Oxlint) cd web && bun run check:all # 型別檢查 + lint + 格式化 + 測試 # 國際化 cd web && bun run i18n:extract # 擷取翻譯字串 cd web && bun run i18n:compile # 編譯翻譯 ``` ### 資料庫 - **開發:** SQLite(零設定) - **正式:** PostgreSQL 16+ - **遷移:** 啟動時自動套用,使用 golang-migrate - **查詢:** SQL-first,使用 sqlc 程式碼產生 --- ## 支援語言 - English - 日本語 (ja) - 한국어 (ko) - 简体中文 (zh-CN) - 繁體中文 — 台灣 (zh-TW) - 繁體中文 — 香港 (zh-HK) --- ## Star History Star History Chart --- ## 授權條款 milmil 採用 [GNU Affero General Public License v3.0](LICENSE) 授權。 這表示您可以自由使用、修改及散布 milmil,但若您將修改版本作為網路服務執行,您必須向該服務的使用者提供原始碼。