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-CN/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,但若你将修改版本作为网络服务运行,你必须向该服务的用户提供源代码。