milmil logo

milmil

セルフホスト型アニメメディアサーバー
メディアライブラリ管理、新番カレンダー、トレンドアニメ、弾幕再生

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

機能 • スクリーンショット • macOS アプリ • クイックスタート • デプロイ • 設定 • 開発 • ライセンス

--- ## スクリーンショット

ホーム — おすすめカルーセル、今日のスケジュール、トレンド

ディスカバー — 今期の人気作品、ジャンルフィルター

新番カレンダー — 曜日別の新番アニメ

アニメ詳細 — エピソード一覧、キャラクター、予告編

再生 — 広東語の弾幕オーバーレイ付きプレイヤー

--- ## macOS デスクトップアプリ [mpv](https://mpv.io) ベースのプレーヤー、Core Animation による弾幕、オフラインダウンロードを備えた ネイティブ SwiftUI クライアントです。Web 版と同じ 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/en/docs/getting-started/macos) を参照してください。 --- ## 機能 ### ライブラリ管理 - **マルチソースストレージ** — ローカルファイルシステム、SMB、SFTP、rclone経由で40以上のクラウドバックエンド - **自動スキャン** — FFmpegメタデータ抽出付きの設定可能なスキャン間隔 - **ファイルマッチング** — マルチプロバイダーアニメ識別(DandanPlayハッシュ、Bangumi、TMDB、AniList) - **エピソード解析** — 複数ソースからのエピソードメタデータ自動エンリッチメント ### ディスカバー - **新番カレンダー** — 曜日別の新作アニメ - **トレンド** — Bangumiの人気アニメランキング - **検索** — アニメデータベース横断の全文検索 - **ジャンル・タグブラウズ** — ジャンル、年、シーズン、フォーマット、スコアでフィルタリング ### 再生 - **ダイレクトストリーミング** — 互換フォーマットのbyte-rangeリクエスト - **コンテナリマックス** — トランスコードなしでMKVからMP4へ - **HLSトランスコード** — FFmpegベースのアダプティブストリーミング(セッションキャッシュ付き) - **弾幕** — 弹弹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** — オフラインサポート付きインストール可能なプログレッシブウェブアプリ - **i18n** — 英語、日本語、韓国語、簡体字中国語、繁体字中国語(台湾/香港) - **通知** — 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) | | i18n | 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 | --- ## クイックスタート ### 前提条件 - Go 1.27+ - Bun 1.3+ - FFmpeg(トランスコードとメディア情報用) - Redis(オプション) ### 開発モード ```bash # ツールのインストール make setup # API + フロントエンドをホットリロードで起動 make dev ``` APIは `http://localhost:8080`、フロントエンドは `http://localhost:5173` で起動します。 ### Docker ```bash # 公開イメージを使用(API + Web + Redis、SQLiteで起動) docker compose up -d # Postgresを使う場合(オプトイン) docker compose --profile postgres up -d # ローカルコードからビルド docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d --build ``` --- ## デプロイ ### Docker Compose(本番環境) ```bash # 環境変数ファイルをコピーして編集 cp .env.example .env cp api/.env.example api/.env # JWT_SECRETやREDISの認証情報を設定 # Docker Hubの公開イメージで起動(milmildev/milmil-api、milmildev/milmil-web) docker compose up -d ``` **サービス:** - **PostgreSQL 16** — データベース - **Redis 7** — キャッシュ - **milmil-api** — Goバックエンド(ポート8080) - **milmil-web** — Reactフロントエンド(Nginx経由、ポート3000) ### リバースプロキシ HTTPS用にNginxまたはCaddyの後ろに配置: ```nginx server { listen 443 ssl; server_name anime.example.com; location / { proxy_pass http://localhost:3000; } location /api/ { proxy_pass http://localhost:8080; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location /ws { proxy_pass http://localhost:8080; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } ``` --- ## 設定 ### 環境変数 | 変数 | デフォルト | 説明 | |------|-----------|------| | `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/ # カスタムフック lib/ # APIクライアント、ユーティリティ locales/ # i18n翻訳(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 + フォーマット + テスト # i18n cd web && bun run i18n:extract # 翻訳文字列の抽出 cd web && bun run i18n:compile # 翻訳のコンパイル ``` ### データベース - **開発:** SQLite(ゼロ設定) - **本番:** PostgreSQL 16+ - **マイグレーション:** golang-migrateで起動時に自動適用 - **クエリ:** SQLファースト、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を自由に使用、変更、配布できることを意味しますが、変更したバージョンをネットワークサービスとして実行する場合は、そのサービスのユーザーにソースコードを提供する必要があります。