milmil
你自己嘅動畫媒體伺服器
媒體庫管理、新番日曆、動畫熱度、彈幕播放
English | 日本語 | 한국어 | 简体中文 | 繁體中文(台灣) | 粵語
功能 •
睇下個樣 •
macOS 應用程式 •
點樣開工 •
點樣部署 •
設定 •
開發 •
授權
---
## 睇下個樣
---
## macOS 桌面應用程式
原生 SwiftUI 客戶端,內置以 [mpv](https://mpv.io) 為核心嘅播放器、Core Animation 彈幕,同埋離線下載。佢用嘅係同 Web 版一樣嘅 API,所以要有一部行緊嘅 milmil 伺服器。
首頁——片架、今日時間表同熱門
播放器——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-HK/docs/getting-started/macos)。
---
## 功能
### 媒體庫管理
- **多種儲存嚟源** — 本地檔案系統、SMB、SFTP,仲可以透過 rclone 接 40+ 種雲端後端
- **自動掃描** — 掃描間隔自己設,順便用 FFmpeg 抽媒體資料
- **檔案比對** — 多個來源一齊認動畫(DandanPlay 哈希、Bangumi、TMDB、AniList)
- **集數解析** — 自動由唔同來源補齊集數資料
### 探索
- **新番日曆** — 當季新番逐日睇
- **熱門排行** — 嚟自 Bangumi 嘅人氣榜
- **搜尋** — 跨晒動畫資料庫做全文搜尋
- **類型同標籤瀏覽** — 按類型、年份、季度、格式同評分揀
### 播放
- **直接串流** — 相容格式用 byte-range 請求直接播
- **容器重新封裝** — MKV 轉 MP4,唔使轉碼
- **HLS 轉碼** — 用 FFmpeg 做自適應串流,有 session 快取
- **彈幕** — 嚟自 弹弹play开放弹幕网络(DandanPlay) 嘅彈幕覆蓋層
- **字幕支援** — 內嵌同外掛字幕軌都 OK
- **觀看進度** — 自動幫你記位置、續返上次嗰度
- **外部播放器支援** — 透過 Jellyfin 相容 API 駁 Infuse、VLC、Kodi、mpv,仲支援 LAN 自動搵返個伺服器
### 下載
- **內建 torrent 客戶端** — 基於 anacrolix/torrent,做種規則自己揸
- **HTTP 下載** — 直接拎檔案,仲可以斷點續傳
- **RSS 自動下載** — 訂閱動畫,可以用正則揀、揀解析度/字幕組
- **種子搜尋** — 一次過揾 Nyaa、DMHY、Mikan、Bangumi.moe、ACG.rip
- **落完之後嘅流程** — 下載完自動掃描、比對、解析
### 收藏
- **觀看狀態** — 想睇、而家睇緊、睇咗、擱低、唔追啦
- **用戶評分** — 自己打分
- **最近紀錄** — 上次停咗喺邊就由邊繼續
- **Bangumi 同 AniList 同步** — 用 OAuth 對清單
### 系統
- **PWA** — 可以裝做 app,仲有離線支援
- **國際化** — 英文、日文、韓文、簡體中文、繁體中文(台灣/香港)
- **通知** — WebSocket 即時推送(下載/掃描嘅事件)
- **雙重驗證** — TOTP 嘅 2FA
- **設定匯出/匯入** — 配置 full backup 冇難度
---
## 技術堆疊
| 層 | 用乜嘢 |
|----|--------|
| 後端 | 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 簽章 key(至少 32 字,一定要填) |
| `MILMIL_ENCRYPTION_KEY` | — | AES-256 key,用嚟加密儲存嘅憑證 |
| `API_PORT` | `8080` | API 伺服器端口 |
| `DATA_DIR` | `./data` | 下載同轉碼快取放呢度 |
| `TORRENT_LISTEN_PORT` | `42069` | Torrent DHT/peer 端口 |
| `SEED_RATIO` | `1.0` | 做種比率目標 |
| `SEED_TIME_MINUTES` | `60` | 做種幾耐 |
| `DANDANPLAY_APP_ID` | — | DandanPlay API 憑證 |
| `DANDANPLAY_APP_SECRET` | — | DandanPlay API 憑證 |
| `DEBUG` | `0` | 開埋 debug log |
### 外部整合(唔開都得)
| 服務 | 用嚟做 | 喺邊度設定 |
|------|--------|-----------|
| **Bangumi** | 動畫資料、OAuth 同步 | 設定 > 整合 |
| **AniList** | 備用資料來源、OAuth 同步 | 設定 > 整合 |
| **弹弹play开放弹幕网络(DandanPlay)** | 檔案比對、彈幕 | 環境變數或者設定頁 |
| **TMDB** | 對返電視劇資料 | 設定 > 整合 |
---
## 開發
### 專案結構
```
milmil/
api/ # Go 後端
cmd/server/ # 入口
internal/
api/ # HTTP handler + router
auth/ # JWT + 2FA
cache/ # Redis / 記憶體快取
config/ # 環境組態
db/ # 資料庫 + migration
downloader/ # Torrent + HTTP 引擎
ffmpeg/ # 轉碼
integration/ # Bangumi, AniList, DandanPlay, TMDB
matcher/ # 多來源動畫比對器
metadata/ # 中繼資料豐富化
notification/ # 事件通知
resolver/ # 集數解析器
rss/ # RSS 訂閱解析
scanner/ # 媒體庫檔案掃描
storage/ # SMB/SFTP/本地 provider
store/ # sqlc 生成嘅查詢
torrent/ # 種子搜尋 provider
worker/ # 背景工作
ws/ # WebSocket hub
migrations/ # SQL migration
web/ # React 前端
src/
components/ # UI 元件
hooks/ # 自訂 hooks
lib/ # API client、工具
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+
- **Migration:** 啟動時用 golang-migrate 自動做
- **查詢:** SQL 優先,用 sqlc 生成代碼
---
## 支援嘅語言
- English
- 日本語 (ja)
- 한국어 (ko)
- 简体中文 (zh-CN)
- 繁體中文 — 台灣 (zh-TW)
- 粵語 — 香港 (zh-HK)
---
## Star History
---
## 授權
milmil 用 [GNU Affero General Public License v3.0](LICENSE) 授權。
即係話你可以自由用、改、同派 milmil,不過如果你改咗之後攞去做網絡服務行,就要將個 source code 畀返嗰個服務嘅用戶睇。